1. 程式人生 > >Mycat讀寫分離以及拆庫拆表綜合實驗1:主從復制與多源復制

Mycat讀寫分離以及拆庫拆表綜合實驗1:主從復制與多源復制

mycat mysql 讀寫分離 拆庫拆表 主從復制

數據規劃:

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

[root@node123 ~]# 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 sstuser@‘192.168.31.%‘ identified by ‘Mirror-12345‘; #授權sst用戶 
# systemctl stop mysql

修改wsrep配置文件

[root@node123 ~]# 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

啟動第一個節點

[root@node123 ~]# systemctl start [email protected]

mysql> show status like ‘wsrep%‘; #請關註下面的參數
| wsrep_cluster_size               | 1 

啟動第二個節點

[root@node125 ~]# systemctl start [email protected]

mysql> show status like ‘wsrep%‘; #請關註下面的參數
| wsrep_cluster_size               | 2

啟動第三個節點

[root@node126 ~]# systemctl start [email protected]

mysql> show status like ‘wsrep%‘; #請關註下面的參數
| wsrep_cluster_size               | 3

請使用之前提供的存儲過程驗證rep功能。

需要說明的是:這個是測試環境,包括之前的mysql主從,以及當前的galera cluster,所以沒有全量備份這個步驟,在生產環境中,需要註意。

Mycat讀寫分離以及拆庫拆表綜合實驗1:主從復制與多源復制