您当前的位置: 首页 >  linux

一一哥Sun

暂无认证

  • 1浏览

    0关注

    622博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Day15_06_分库分表教程之Linux中安装配置MyCat

一一哥Sun 发布时间:2019-07-04 00:31:32 ,浏览量:1

Linux中MyCat安装配置 一. MyCat下载

Mycat下载可以到官网下载,也可以到github上下载.

1. 官方网站

http://www.mycat.org.cn/

2. github地址

https://github.com/MyCATApache

二. MyCat安装配置

MyCat安装,需要先安装配置好JDK.

1. 上传并解压

把MyCat的压缩包上传到linux服务器,并且解压.

切换目录
cd /usr/local/  
    
解压
tar -zxvf Mycat-server-1.4-linux.tar.gz

 

2. MyCat常用命令
启动
/usr/local/mycat/bin/mycat start

停止      
/usr/local/mycat/bin/mycat stop

重启
/usr/local/mycat/bin/mycat restart
3. 连接MyCat

可以使用MySQL自带的客户端进行连接,也可以使用可视化软件进行连接.

mycat的默认的账号和密码都是test.

客户端连接:mysql -h 10.211.55.12 -u test -p -P 8066

可视化工具连接

注意: 可以使用mysql的客户端直接连接mycat服务,默认服务端口为8066.

三. MyCat分片配置

将指定的一张表进行分片存储,比如存储到三个数据节点上.

1. 创建三个数据库,准备表

使用一台服务器模拟分片操作,创建三个数据库分别命名.

    db_mycat_1
    db_mycat_2
    db_mycat_3
    ip地址:10.211.55.12
2. MyCat配置文件说明 2.1 server.xml介绍

server.xml几乎保存了所有mycat需要的系统配置信息,最常用的是在此配置用户名、密码及权限.

常用标签:

1️⃣.user标签

内容:
 说明用户名是test.

子标签:
property,privileges

2️⃣.property标签

内容说明test用户密码是testdb1, db2可访问的schema有db1,db2true是否只读11111连接上限,降级权值1是否开启加密

3️⃣.privileges标签:

对用户的 schema以及表进行精细化的DML权限控制.

check表示是否开启DML权限检查,默认是关闭.

注意:
server.dtd文件中可以有多个schema的配置!
2.2 dml顺序说明:

insert,update,select,delete


   
   


db1的权限是update,select;
tb01的权限是啥都不能干;
tb02的权限是insert,update,select,delete; 
其他表默认是udpate,select.

1️⃣.system标签

字符集
utf8 

处理线程数量,默认是cpu数量.
1 

每次读取流的数量,默认4096
4096

创建共享buffer需要占用的总空间大小,processorBufferChunk*processors*100.
409600 

默认为0,0表示:DirectByteBufferPool,1表示ByteBufferArena.
0

二级共享buffer是processorBufferPool的百分比,这里设置的是百分比.
100

全局ID生成方式:
0:为本地文件方式;
1:为数据库方式;
2:为时间戳序列方式;
3:为ZK生成ID;
4:为ZK递增ID生成.
100

是否开启mysql压缩协议,1为开启,0为关闭,默认关闭.
1

指定 Mysql 协议中的报文头长度,默认 4.
4 

指定 MySQL协议可以携带的数据最大长度,默认 16M.
16M

指定连接的空闲超时时间,某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉.默认 30 分钟,单位毫秒.
1800000

前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步.
默认为 REPEATED_READ,设置值为数字默认 3.
READ_UNCOMMITTED = 1; 
READ_COMMITTED = 2; 
REPEATED_READ = 3; 
SERIALIZABLE = 4;
3

SQL 执行超时的时间,Mycat 会检查连接上最后一次执行 SQL 的时间,若超过这个时间则会直接关闭这连接,默认时间为 300 秒,单位秒.
300

清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间,默认是 1 秒,单位毫秒.
1000

对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒.
300000 

对后端所有读、写库发起心跳的间隔时间,默认是 10 秒,单位毫秒.
10000

mycat 服务监听的 IP 地址,默认值为 0.0.0.0
0.0.0.0

定义 mycat 的使用端口,默认值为 8066.
8066

定义 mycat 的管理端口,默认值为 9066
9066

mycat 模拟的 mysql 版本号,默认值为 5.6 版本,如非特需,不要修改这个值,
目前支持设置 5.5/5.6/5.7 版本,其他版本可能会有问题.
5.6

是否开启实时统计,1为开启;0为关闭.
0  

是否开启全局表一致性检测,1为开启;0为关闭.
0

分布式事务开关:
0为不过滤分布式事务;
1为过滤分布式事务;
2为不过滤分布式事务,但是记录分布式事务日志.
0

默认是65535, 64K用于sql解析时最大文本长度.
65535

以上举例的属性仅仅是一部分,可以配置的变量很多,具体可以查看SystemConfig这个类的属性内容.

System标签下的属性,一般是上线后,需要根据实际运行的情况,分析后调优的时候进行修改.

2️⃣.Firewall标签

顾名思义,这个就是关于防火墙的设置,也就是在网络层对请求的地址进行限制,主要是从安全角度来保证Mycat不被匿名IP进行访问.

 
     
        
        
     
    

2.3 schema.xml介绍
Schema.xml作为MyCat中重要的配置文件之一,管理着MyCat的逻辑库、表、分片规则、DataNode以及DataSource.
弄懂这些配置,是正确使用MyCat的前提,这里一层层对该文件进行解析.

schema 标签用于定义MyCat实例中的逻辑库.

Table 标签定义了MyCat中的逻辑表.

dataNode 标签定义了MyCat中的数据节点,也就是我们通常说所的数据分片.

dataHost 标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句.

注意: 若是LINUX版本的MYSQL,则需要设置为Mysql大小写不敏感,否则可能会发生表找不到的问题.
在MySQL的配置文件中my.cnf位置在etc目录下[mysqld] 中增加一行
lower_case_table_names = 1
2.4 rule.xml
rule.xml里面定义了我们对表进行拆分所涉及到的规则.
我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同.
这个文件里面主要有tableRule和function这两个标签.
在具体使用过程中可以按照需求添加tableRule和function.
3. Mycat分片实现步骤 3.1 server.xml配置
编辑系统配置信息
vim /usr/local/mycat/conf/server.xml  

3.2 schema.xml配置
编辑规则配置信息
vim /usr/local/mycat/conf/schema.xml 

重新启动mycat!

4. 测试分片

4.1 创建表

#配置完毕后,重新启动mycat,使用mysql客户端连接mycat,创建表.
mysql -uroot -psyc -P8066

#注意,需要连接到mycat,执行建表语句,表名与schema.xml中的虚拟表名一致!
    
#切换到mycat的某个数据库:
use TESTDB
    
#创建虚拟表:
create table tb_user(id int primary key AUTO_INCREMENT COMMENT '用户序号',username varchar(20) NOT NULL COMMENT '账号',password varchar(32) NOT NULL COMMENT '密码',createtime datetime  COMMENT '创建时间')

4.2 创建数据

insert into TB_USER(id,username,password,createtime)        values(1,'zs','123456',now());

insert into TB_USER(id,username,password,createtime)        values(200000,'zs','123456',now());

insert into TB_USER(id,username,password,createtime)        values(5000001,'zs','123456',now());

insert into TB_USER(id,username,password,createtime)        values(10000002,'zs','123456',now());

再看下三个分片的数据:

4.2 分片测试

由于配置的分片规则为“auto-sharding-long”,所以mycat会根据此规则自动分片.

每个datanode中保存一定数量的数据,根据id进行分片.

经测试id范围为:
Datanode1: 1~5000000
Datanode2: 5000000~10000000
Datanode3: 10000001~15000000
    
当15000000以上的id插入时报错:
[Err] 1064 - can't find any valid datanode: TB_ITEM -> ID -> 15000001
此时需要添加节点了.
四. MySQL读写分离 1. 读写分离简介

MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一,但不可忽略的是它本身的功能的确很强大.随着技术的发展,在实际的生产环境中,由于单台MySQL数据库服务器不能满足实际的需求,此时数据库集群就很好的解决了这个问题了.采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器.在此之前我们必须要保证每台MySQL服务器里的数据同步,数据同步我们可以通过MySQL内部配置就可以轻松完成,主要有主从复制和主主复制.

数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能.对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置.

Mycat读写分离和自动切换机制,需要MySQL的主从复制机制配合.

2. MySQL的主从复制

注意:

  • 1️⃣.主DB server和从DB server数据库的版本一致;

  • 2️⃣.主DB server和从DB server数据库数据一致[这里可以把主DB的备份在从DB上还原,也可以直接将主DB的数据目录拷贝到从DB的相应数据目录];

  • 3️⃣.主DB server开启二进制日志,主DB server和从DB server的server_id都必须唯一.

3. MySQL主服务器配置

3.1 修改my.cnf文件:位置/etc/my.cnf

vim /etc/my.cnf 编辑mysql的配置文件
在[mysqld]段下添加:
#启用的数据库
inlog-do-db=db1
#忽略的数据库
binlog-ignore-db=mysql
#启用二进制日志
log-bin=mysql-bin
#服务器唯一ID,一般取IP最后一段
server-id=134

3.2 重启MySQL服务:

service mysqld restart

下面的操作都需要连接Mysql的服务器进行设置.

建立帐户并授权slave:GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'lx';

刷新权限:FLUSH PRIVILEGES;

查看主库状态:SHOW MASTER STATUS;

查看mysql现在有哪些用户:select user,host from mysql.user;

一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如10.211.55.12,加强安全.

4. MySQL从服务器配置

4.1 修改my.conf文件:

vim /etc/my.cnf 修改配置文件
server-id=131  服务唯一地址

下面的操作都需要连接Mysql的服务器进行设置.

4.2 配置从服务器:

change master to master_host='10.211.55.12',
master_port=3306,master_user='backup',
master_password='lx',master_log_file='mysql-bin.000001',
master_log_pos=439

注意语句中间不要断开,master_port为MySQL服务器端口号(无引号),master_user为执行同步操作的数据库账户,439无单引号(此处的439就是show master status 中看到的position的值,这里的mysql-bin.000001就是file对应的值).

4.3 启动从服务器复制功能:

start slave;

4.4 检查从服务器复制功能状态:

show slave status

……………………(省略部分)
 Slave_IO_Running: Yes //此状态必须YES
 Slave_SQL_Running: Yes //此状态必须YES
 ……………………(省略部分)

注: Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误).

5. 错误处理

5.1 错误现象

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

因为是mysql是克隆的系统所以mysql的uuid是一样的,所以需要修改.

5.2 解决方法

删除/var/lib/mysql/auto.cnf文件,重新启动服务.

以上操作过程,从服务器配置完成.

五. Mycat结合MySQL实现读写分离

Mycat 从1.4版本开始支持MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠.

1. schema.xml的配置

    
    
    
        show slave status
        
            
    

2. 配置说明

设置 balance="1"与writeType="0"

2.1 Balance参数设置

  • 1️⃣.balance=“0”,所有读操作都发送到当前可用的writeHost上;

  • 2️⃣.balance=“1”,所有读操作都随机的发送到readHost;

  • 3️⃣.balance=“2”,所有读操作都随机的在writeHost、readhost上分发.

2.2 WriteType参数设置

  • 1️⃣.writeType=“0”,所有写操作都发送到可用的writeHost上;

  • 2️⃣.writeType=“1”,所有写操作都随机的发送到readHost;

  • 3️⃣.writeType=“2”,所有写操作都随机的在writeHost、readhost分上发.

“readHost是从属于writeHost的,即意味着它从那个writeHost获取同步数据.因此,当它所属的writeHost宕机了,则它也不会再参与到读写分离中来,即“不工作了”,这是因为此时,它的数据已经“不可靠”了.

基于这个考虑,目前mycat 1.3和1.4版本中,若想支持MySQL一主一从的标准配置,并且在主节点宕机的情况下,从节点还能读取数据,则需要在Mycat里配置为两个writeHost并设置banlance="1". 然后设置 switchType="2" 与slaveThreshold="100".

2.3 switchType 目前有三种选择

  • -1: 表示不自动切换;

  • 1: 默认值,自动切换;

  • 2: 基于MySQL主从同步的状态决定是否切换.

“Mycat心跳检查语句配置为 show slave status,dataHost 上定义两个新属性:switchType="2" 与slaveThreshold="100",此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制.

Mycat心跳机制通过检测 show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running"三个字段来确定当前主从同步的状态以及Seconds_Behind_Master主从复制时延.

 

关注
打赏
1665624836
查看更多评论
立即登录/注册

微信扫码登录

0.0469s