千家信息网

Mycat中间件实现Percona Cluster集群读写分离

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Mycat实现读写分离架构图:Mycat主从自动切换架构图:Mycat下载地址:http://dl.mycat.io/1.6.7.3/20190828135747/Mycat-server-1.6.7
千家信息网最后更新 2026年10月31日Mycat中间件实现Percona Cluster集群读写分离

Mycat实现读写分离架构图:

Mycat主从自动切换架构图:

Mycat下载地址:http://dl.mycat.io/1.6.7.3/20190828135747/Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz

Percona-XtraDB-Cluster下载地址:https://www.percona.com/downloads/Percona-XtraDB-Cluster-57/LATEST/

Percona-XtraBackup下载地址: https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

yum仓库地址:https://www.percona.com/downloads/percona-release/redhat/

1.下载,安装Percona-XtraDB-Cluster(三台都需要装)
[root@k8s01 ~]# rpm -ivh https://www.percona.com/redir/downloads/percona-release/redhat/1.0-13/percona-release-1.0-13.noarch.rpm

[root@k8s01 ~]# yum repolist

[root@k8s01 ~]# rpm -ivh percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm

[root@k8s01 ~]# yum install Percona-XtraDB-Cluster-57 -y

2.修改配置,启动服务(k8s01节点)

[root@k8s01 ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

log-bin=k8s01-bin
log-bin-index=k8s01-bin-index

[root@k8s01 ~]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

[mysqld]

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_address=gcomm://192.168.54.129,192.168.54.130,192.168.54.128

binlog_format=ROW

default_storage_engine=InnoDB

wsrep_slave_threads= 8

wsrep_log_conflicts

innodb_autoinc_lock_mode=2

wsrep_node_address=192.168.54.128 --三个节点值不一样

wsrep_cluster_name=mycluster

wsrep_node_name=k8s01

pxc_strict_mode=ENFORCING

wsrep_sst_method=xtrabackup-v2

wsrep_sst_auth="sstuser:s3cretPass"

[root@k8s01 ~]# mysql_install_db --defaults-file=/etc/percona-xtradb-cluster.cnf --datadir=/var/lib/mysql --初使化数据

[root@k8s01 ~]# systemctl start mysql@bootstrap.service --第一次启动,不需要同步数据
[root@k8s01 ~]# ps -ef | grep mysql
root 60672 54285 0 14:56 pts/1 00:00:00 tailf /var/log/mysqld.log
root 66031 1 0 15:03 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr --wsrep-new-cluster
mysql 66568 66031 6 15:03 ? 00:00:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --wsrep-provider=/usr/lib64/galera3/libgalera_smm.so --wsrep-new-cluster --log-error=
/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --wsrep_start_position=00000000-0000-0000-0000-000000000000:-1root 66763 33815 0 15:04 pts/0 00:00:00 grep --color=auto mysql

[root@k8s01 ~]# cat ~/.mysql_secret
# Password set for user 'root@localhost' at 2019-11-15 14:40:31
ya;-t*taM8T< --mysql登陆密码
[root@k8s01 ~]# mysql -u root -p'ya;-t*taM8T<'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.27-30-57-log
Copyright (c) 2009-2019 Percona LLC and/or its affiliates
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> set password=password('System135');
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
[root@k8s01 ~]# mysql -u root -pSystem135
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.7.27-30-57-log Percona XtraDB Cluster (GPL), Release rel30, Revision 64987d4, WSREP version 31.39, wsrep_31.39
Copyright (c) 2009-2019 Percona LLC and/or its affiliates
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> grant all privileges on *.* to sstuser@'%' identified by 's3cretPass'; --创建percona xtradb cluster用户
Query OK, 0 rows affected, 1 warning (0.05 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye
[root@k8s01 ~]#

3.修改配置,启动服务(k8s02节点)

[root@k8s02 ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

log-bin=k8s01-bin
log-bin-index=k8s01-bin-index

[root@k8s02 ~]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

[mysqld]

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_address=gcomm://192.168.54.128,192.168.54.129,192.168.54.130

binlog_format=ROW

default_storage_engine=InnoDB

wsrep_slave_threads= 8

wsrep_log_conflicts

innodb_autoinc_lock_mode=2

wsrep_node_address=192.168.54.129

wsrep_cluster_name=mycluster

wsrep_node_name=k8s02

pxc_strict_mode=ENFORCING

wsrep_sst_method=xtrabackup-v2

wsrep_sst_auth="sstuser:s3cretPass"

[root@k8s02 ~]# systemctl start mysql

4.修改配置,启动服务(k8s03节点)

[root@k8s03 ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

log-bin=k8s01-bin
log-bin-index=k8s01-bin-index
[root@k8s03 ~]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

[mysqld]

wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_address=gcomm://192.168.54.128,192.168.54.129,192.168.54.130
binlog_format=ROW

default_storage_engine=InnoDB

wsrep_slave_threads= 8

wsrep_log_conflicts

innodb_autoinc_lock_mode=2

wsrep_node_address=192.168.54.130

wsrep_cluster_name=mycluster

wsrep_node_name=k8s03

pxc_strict_mode=ENFORCING

wsrep_sst_method=xtrabackup-v2

wsrep_sst_auth="sstuser:s3cretPass"

[root@k8s03 ~]# systemctl start mysql

5.测试Percona-XtraDB-Cluster集群数据同步

k8s01节点:

[root@k8s01 ~]# mysql -u root -pSystem135
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 5.7.27-30-57-log Percona XtraDB Cluster (GPL), Release rel30, Revision 64987d4, WSREP version 31.39, wsrep_31.39
Copyright (c) 2009-2019 Percona LLC and/or its affiliates
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database wuhan charset utf8;
Query OK, 1 row affected (0.01 sec)
mysql> use wuhan
Database changed
mysql> create table t (a int primary key,b int);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t values(1,2),(2,3);
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t;
+---+------+
| a | b |
+---+------+
| 1 | 2 |
| 2 | 3 |
+---+------+
2 rows in set (0.00 sec)
mysql> exit
Bye
[root@k8s01 ~]#

k8s02节点:

[root@k8s02 ~]# mysql -u root -pSystem135
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.27-30-57-log Percona XtraDB Cluster (GPL), Release rel30, Revision 64987d4, WSREP version 31.39, wsrep_31.39
Copyright (c) 2009-2019 Percona LLC and/or its affiliates
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use wuhan
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from t;
+---+------+
| a | b |
+---+------+
| 1 | 2 |
| 2 | 3 |
+---+------+
2 rows in set (0.01 sec)
mysql> exit
Bye
[root@k8s02 ~]#

6.下载,安装Mycat中间件

[root@[root@k8s01 soft]# rpm -ivh jdk-8u221-linux-x64.rpm
warning: jdk-8u221-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:jdk1.8-2000:1.8.0_221-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
[root@k8s01 soft]# tar xvf Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz -C /usr/local/
[root@k8s01 soft]# cd /usr/local/mycat/conf/

[root@k8s01 conf]# vim schema.xml

[root@k8s01 conf]# vim server.xml


System135
hubei


[root@k8s01 conf]# ../bin/mycat restart
Stopping Mycat-server...
Mycat-server was not running.
Starting Mycat-server...
[root@k8s01 conf]# netstat -antulp | grep 9066
tcp6 0 0 :::9066 :::* LISTEN 100087/java
[root@k8s01 conf]#

7.使用Mycat验证读,写数据

(1).查看管理端口服务

(2).查看数据,如果想要看负载均衡效果,必须退出终端,再登陆。

(3).k8s01节点写入数据,k8s02和k8s03读数据

8.k8s01节点宕机后,k8s02节点负责写入数据,k8s03读数据

[root@k8s01 conf]# systemctl stop mysql@bootstrap.service

[root@k8s01 conf]# netstat -antulp | grep 3306
tcp6 0 0 10.4.132.50:60568 10.4.132.42:3306 ESTABLISHED 100087/java
tcp6 0 0 10.4.132.50:51072 10.4.132.66:3306 ESTABLISHED 100087/java
[root@k8s01 conf]# ps -ef | grep mysqld
root 115559 33815 0 16:58 pts/0 00:00:00 grep --color=auto mysqld

[root@k8s01 conf]# (1).关闭k8s01节点的mysql,写入一条数据,读取一次。

(2).写入节点是k8s02,读节点是k8s03

错误处理:

(1).Mysql没有初使化数据

2019-11-15T06:33:04.384904Z 0 [Note] Server socket created on IP: '::'.
2019-11-15T06:33:04.385584Z 0 [Warning] Failed to open optimizer cost constant tables

2019-11-15T06:33:04.385659Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
2019-11-15T06:33:04.385668Z 0 [ERROR] Fatal error: Failed to initialize ACL/grant/time zones structures or failed to remove temporary table files.

2019-11-15T06:33:04.385687Z 0 [ERROR] Aborting

解决方法:

[root@k8s01 conf]# mysql_install_db --defaults-file=/etc/percona-xtradb-cluster.cnf --datadir=/var/lib/mysql --需要初使化数据

(2).第一个节点第一次启动必须要创建新的集群

2019-11-15T06:41:35.761089Z 0 [Note] WSREP: Current view of cluster as seen by this node
view ((empty))
2019-11-15T06:41:35.761280Z 0 [ERROR] WSREP: failed to open gcomm backend connection: 110: failed to reach primary view (pc.wait_prim_timeout): 110 (Connection timed out)
at gcomm/src/pc.cpp:connect():159

2019-11-15T06:41:35.761309Z 0 [ERROR] WSREP: gcs/src/gcs_core.cpp:gcs_core_open():209: Failed to open backend connection: -110 (Connection timed out)
2019-11-15T06:41:35.761583Z 0 [ERROR] WSREP: gcs/src/gcs.cpp:gcs_open():1514: Failed to open channel 'pxc_1' at 'gcomm://192.168.54.128,192.168.54.129,192.168.54.130': -110 (Connection timed out)
2019-11-15T06:41:35.761597Z 0 [ERROR] WSREP: gcs connect failed: Connection timed out
2019-11-15T06:41:35.761600Z 0 [ERROR] WSREP: Provider/Node (gcomm://192.168.54.128,192.168.54.129,192.168.54.130) failed to establish connection with cluster (reason: 7)
2019-11-15T06:41:35.761603Z 0 [ERROR] Aborting

解决方法:

[root@k8s01 ~]# systemctl start mysql@bootstrap.service --必须添加 @bootstrap.service启动服务

(3).没有创建wsrep.cnf用户名

2019-11-15T07:27:59.158666Z 0 [ERROR] WSREP: Command did not run: wsrep_sst_xtrabackup-v2 --role 'donor' --address '192.168.54.129:4444/xtrabackup_sst//1' --socket '/var/lib/mysql/mysql.sock' --datadir '/var/lib/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suf
fix '' --mysqld-version '5.7.27-30-57' '' --gtid '19a21dce-0776-11ea-8879-92a989219bb1:2'2019-11-15T07:27:59.159302Z 0 [Warning] WSREP: Protocol violation. JOIN message sender 0.0 (k8s01) is not in state transfer (SYNCED). Message ignored.
2019-11-15T07:27:59.159405Z 5 [Note] WSREP: Synchronized with group, ready for connections

解决方法:

[root@k8s01 conf]# grep sst /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:s3cretPass"
[root@k8s01 conf]#

mysql> grant all privileges on *.* to sstuser@'%' identified by 's3cretPass'; --创建用户
Query OK, 0 rows affected, 1 warning (0.05 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye
[root@k8s01 ~]#

节点 数据 服务 地址 方法 用户 配置 集群 架构 第一次 同步 登陆 中间件 均衡 三个 主从 仓库 密码 效果 用户名 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网中国科技 互联网金融 科技金融 亿策互联网科技 致聘互联网科技 湖南洣水互联网科技有限公司扣款 农村开互联网科技讲堂 哈尔滨新华互联网科技学院 互联网企业和科技型企业 坤平互联网科技 想开互联网科技公司怎么样 乌苏新华互联网科技做什么的 中科明德北京互联网科技 元气玛特互联网科技公司是外包吗 互联网第三次科技革命特征 美国互联网科技公司 广州互联网高科技取餐柜 信承诺互联网科技有限公司 互联网时代高科技布局 互联网科技对化妆品行业 互联网 科技节活动 微视频大赛 有格互联网科技 广州淘业互联网络科技 北京路客互联网科技有限公司 互联网科技与金融科技 天津摩尔互联网科技 顺网科技2021年互联网排名 广西互联网科技孵化中心 半导体是互联网高科技吗 互联网科技自媒体灵感 武汉亿视互联网科技有限公司
0