Mycat读写分离以及拆库拆表综合实验1:mysql主从以及garela cluster环境准备
admin
2023-04-29 10:04:58
0次

数据规划:

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 mysql@bootstrap.service

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

启动第二个节点

[root@node125 ~]# systemctl start mysql@bootstrap.service

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

启动第三个节点

[root@node126 ~]# systemctl start mysql@bootstrap.service

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

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

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

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...