Mycat读写分离以及拆库拆表综合实验1:主从复制与多源复制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mycat读写分离以及拆库拆表综合实验1:主从复制与多源复制相关的知识,希望对你有一定的参考价值。

数据规划:

Haproxy 集群

haproxy01 node127 192.168.31.127
haproxy02 node128 192.168.31.128

Mycat集群

mycat01 node119 192.168.31.119
mycat02 node118 192.168.31.118

mysql主从复制集群

mysqlm1 node115   192.168.31.115
mysqlm2 node116   192.168.31.116
mysqls1  node117   192.168.31.117

MySQL galera Cluster

pxc1 node123 192.168.31.123
pxc2 node124 192.168.31.125
pxc3 node126 192.168.31.126

部署mysql互为主从、多源复制

编辑node115配置文件

node115# cat /etc/my.cnf
                datadir=/var/lib/mysql
                socket=/var/lib/mysql/mysql.sock
                log-bin=/tmp/node115
                log-bin-index=/tmp/node115
                server-id=115
                innodb_file_per_table=1

编辑node116配置文件

node116# cat /etc/my.cnf
log-bin=/tmp/node116
log-bin-index=/tmp/node116
server-id=116
innodb_file_per_table=1

编辑node117配置文件
node117上的配置

master_info_repository=TABLE
relay_log_info_repository=TABLE
server-id=117
slave_skip_errors = 1062

master_info_repository

开启MTS功能后,务必将参数master_info_repostitory设置为TABL,这样性能可以有50%~80%的提升。这是因为并行复制开启后对于元master.info这个文件的更新将会大幅提升,资源的竞争也会变大。在之前InnoSQL的版本中,添加了参数来控制刷新master.info这个文件的频率,甚至可以不刷新这个文件。因为刷新这个文件是没有必要的,即根据master-info.log这个文件恢复本身就是不可靠的。在MySQL 5.7中,推荐master_info_repository设置为TABLE,来减少这部分的开销。

relay_log_info_repository 同理

在node115、node116上执行授权操作
mysql> grant replication slave on *.* to ‘rep‘@‘192.168.31.%‘ identified by ‘Mirror-12345‘;

在配置同步之前先要获取master file以及Pos,请根据实际情况配置

mysql> show master status\G
*************************** 1. row ***************************
             File: node115.000002
             Position: 35291277

在node116上的配置:

mysql> change master to
    -> master_host=‘192.168.31.115‘,
    -> master_user=‘rep‘,
    -> master_password=‘Mirror-12345‘,
    -> master_port=3306,
    -> master_log_file=‘node115.000002‘,
    -> master_log_pos=154;

在node115上的配置:

mysql> change master to
    -> master_host=‘192.168.31.116‘,
    -> master_user=‘rep‘,
    -> master_password=‘Mirror-12345‘,
    -> master_port=3306,
    -> master_log_file=‘node116.000002‘,
    -> master_log_pos=154;

node117上的配置

mysql> set global read_only=1;  #只读模式

change master to
master_host=‘192.168.31.115‘,
master_user=‘rep‘,
master_password=‘Mirror-12345‘,
master_port=3306,
master_log_file=‘node115.000002‘,
master_log_pos=154 for channel ‘node115‘; #以channel区分源

change master to
master_host=‘192.168.31.116‘,
master_user=‘rep‘,
master_password=‘Mirror-12345‘,
master_port=3306,
master_log_file=‘node116.000001‘,
master_log_pos=447 for channel ‘node116‘;

确定replication已经正常运行

mysql> show slave status\G[for channel chanelname]
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

在node115或者node116上使用存储过程来确定同步

#创建表

CREATE TABLE `t3` (  
    `id` INT (11) NOT NULL AUTO_INCREMENT,  
    `user_id` VARCHAR (20) NOT NULL,  
    `vote_id` INT (11) NOT NULL,  
    `group_id` INT (11) NOT NULL,  
    `create_time` datetime NOT NULL,  
    PRIMARY KEY (`id`),  
    KEY `index_user_id` (`user_id`) USING HASH  
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8

#创建存储过程

DELIMITER //
CREATE  PROCEDURE `t5`(IN n int)  
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i <= n ) DO  INSERT INTO t3(user_id,vote_id,group_id,create_time ) VALUES (FLOOR(RAND() * 1000),FLOOR(RAND() * 1000),FLOOR(RAND() * 100) ,now() );  
set i=i+1;  
END WHILE;
END; 
//

#调用存储

call t5(10000)

#在node117上确定数据已经同步

mysql> select count(*) from t3;

部署galera cluster

[[email protected] ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
# yum install Percona-XtraDB-Cluster-57
# systemctl start mysql
# mysql -uroot -p
mysql> grant all on *.* to [email protected]‘192.168.31.%‘ identified by ‘Mirror-12345‘; #授权sst用户 
# systemctl stop mysql

修改wsrep配置文件

[[email protected] ~]# cat /etc/percona-xtradb-cluster.conf.d/wsrep.cnf |grep -v ‘#‘
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_address=gcomm://192.168.31.123,192.168.31.125,192.168.31.126
binlog_format=ROW

default_storage_engine=InnoDB

wsrep_slave_threads= 8

wsrep_log_conflicts

innodb_autoinc_lock_mode=2

wsrep_node_address=192.168.31.123
wsrep_cluster_name=pxc-cluster

wsrep_node_name=node123

pxc_strict_mode=ENFORCING

wsrep_sst_method=xtrabackup-v2

wsrep_sst_auth="sstuser:Mirror-12345"

修改其余两个节点的配置文件,与第一个完全相同,除了一下两个参数

wsrep_node_name=node125
wsrep_node_address=192.168.31.125

wsrep_node_name=node126
wsrep_node_address=192.168.31.126

启动第一个节点

[[email protected] ~]# systemctl start [email protected]

mysql> show status like ‘wsrep%‘; #请关注下面的参数
| wsrep_cluster_size               | 1 

启动第二个节点

[[email protected] ~]# systemctl start [email protected]

mysql> show status like ‘wsrep%‘; #请关注下面的参数
| wsrep_cluster_size               | 2

启动第三个节点

[[email protected] ~]# systemctl start [email protected]

mysql> show status like ‘wsrep%‘; #请关注下面的参数
| wsrep_cluster_size               | 3

请使用之前提供的存储过程验证rep功能。

需要说明的是:这个是测试环境,包括之前的mysql主从,以及当前的galera cluster,所以没有全量备份这个步骤,在生产环境中,需要注意。

以上是关于Mycat读写分离以及拆库拆表综合实验1:主从复制与多源复制的主要内容,如果未能解决你的问题,请参考以下文章

Mycat读写分离以及拆库拆表综合实验3:通过日志分析mycat路由过程

数据库水平切分(拆库拆表)的实现原理解析(转)

mycat双主双从主从,主从复制和读写分离实现

Mycat 实现 MySQL 主从架构的读写分离

mycat基础实验之主从配置读写分离和分表

springboot2.0+mycat实验读写分离