PXC数据库高可用集群,数据强一致性,数据复制延迟解决方案

目录

 

一、概述

二、PXC环境准备

三、PXC文件配置与启动

四、测试


一、概述

1.PXC(Percona Xtradb Cluster)

    galera产品是以galera cluster方式为mysql提供高可用集群解决方案的。galera cluster就是集成了galera插件的mysql集群。galera replication是codership提供的mysql数据同步方案,具有高可用性,方便扩展,并且可以实现多个mysql节点间的数据同步复制与读写,可保障数据库的服务高可用及数据强一致性。

   PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA+keepalived,galera cluster最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。本身galera cluster也是一种多主架构。galera cluster最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证MySQL集群的数据一致性;

    对galera cluster的封装有两个,虽然名称不同,但实质都是一样的,使用的都是galera cluster。一个MySQL的创始人在自己全新的MariaDB上实现的MAriaDB cluster;一个是著名的MySQL服务和工具提供商percona实现的percona xtradb cluster,简称PXC

   要搭建PXC架构至少需要3个mysql实例来组成一个集群,三个实例之间不是主从模式,而是各自为主,所以三者是对等关系,不分从属,这就叫multi-master架构。客户端写入和读取数据时,连接哪个实例都是一样的。读取到的数据时相同的,写入任意一个实例之后,集群自己会将新写入的数据同步到其他实例上,这种架构不共享任何数据,是一种高冗余架构。

 

2.PXC特点

- 数据强一致性、无同步延迟

- 没有主从切换操作,无需使用虚拟IP

- 支持InnoDB存储引擎

- 多线程复制

- 支持节点自动加入,无需手动拷贝数据

 

 

3.PXC使用到的端口

端口说明
3306数据库服务端口
4444SST端口
4567集群通信端口
4568IST端口
SSTState Snapshot Transfer 全量同步
ISTIncremental State Transfer 增量同步

 

4.软件支持

软件作用
percona-xtrabackup在线热备程序
qpress递归压缩程序
Percona-XtraDB-Cluster-server集群服务程序

 

 

 

二、PXC环境准备

1.ip规划

2.配置域名与主机对应

每台主机上都需要配置

  1. hostname pxcnode71]# vim /etc/hosts
  2. 192.168.4.71     pxcnode71
  3. 192.168.4.72     pxcnode72
  4. 192.168.4.73     pxcnode73
  5. hostname pxcnode72]# vim /etc/hosts
  6. 192.168.4.71     pxcnode71
  7. 192.168.4.72     pxcnode72
  8. 192.168.4.73     pxcnode73
  9. hostname pxcnode73]# vim /etc/hosts
  10. 192.168.4.71     pxcnode71
  11. 192.168.4.72     pxcnode72
  12. 192.168.4.73     pxcnode73

3.安装软件支持 

[软件下载]https://github.com/ck784101777/PXC

在三台主机上都需要装软件支持

  1. ]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm //安装依赖
  2. ]# yum -y install percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm
  3. ]# rpm -ivh qpress-1.1-14.11.x86_64.rpm //安装依赖
  4. ]# tar -xvf Percona-XtraDB-Cluster-5.7.25-31.35-r463-el7-x86_64-bundle.tar
  5. ]# yum -y install Percona-XtraDB-Cluster-*.rpm

 

三、PXC文件配置与启动

 

1.PXC配置文件作用一览

- 配置文件存放目录:/etc/percona-xtradb-cluster.conf.d

配置文件说明

- 数据库服务器运行参数配置文件: mysqld.cnf

- Percona Server 配置文件: mysqld_safe.cnf

- PXC配置文件:wsrep.cnf

 

 

2.修改mysqld.cnf配置文件 

这个文件相当于my.cnf(mysql的主配置文件),这个文件决定了软件执行过程中各类文件存储地址,以及是否开启binlog日志等信息. 

三台主机都需要修改,除server-id不同外其他配置一致

  1. [root@pxcnode71 ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
  2. [mysqld]
  3. server-id=71                        //server-id 不允许重复
  4. datadir=/var/lib/mysql                 //数据库目录
  5. socket=/var/lib/mysql/mysql.sock      //socket文件
  6. log-error=/var/log/mysqld.log          //日志文件
  7. pid-file=/var/run/mysqld/mysqld.pid    //pid文件
  8. log-bin                            //启用binlog日志
  9. log_slave_updates                 //启用链式复制
  10. expire_logs_days=7                //日志文件保留天数
  11. :wq

2.修改mysqld_safe.cnf

三台主机都需要修改,配置信息相同

  1. [root@pxcnode71 ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld_safe.cnf
  2. [mysqld_safe]
  3. pid-file = /var/run/mysqld/mysqld.pid
  4. socket = /var/lib/mysql/mysql.sock
  5. nice = 0
  6. :wq

3.修改wsrep.cnf文件

这个文件定义了集群地址,本机节点地址,集群名与授权认证等信息

三台主机都需要修改,wsrep_node_address,wsrep_node_name=pxcnode71这两处需要根据本机ip和主机名相同,这里我们 提前定义了用户密码,在下面实验中将创建这个用户

  1. [root@pxcnode71 ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld_safe.cnf
  2. wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73  #成员列表
  3. wsrep_node_address=192.168.4.71 #本机ip
  4. wsrep_cluster_name=pxc-cluster #集群名
  5. wsrep_node_name=pxcnode71 #本机主机名
  6. wsrep_sst_auth="sstuser:123qqq...A" #SST数据同步授权用户及密码
  7. :wq

 

4. 启动PXC集群服务

我们配置了三台数据库服务器,我们只需要在一台主机上启动集群服务即可,启动方式比较奇葩,启动mysql数据库服务,做一个授权用户(第一次使用需要修改一下初始密码)

  1. [root@pxcnode71 ~]# ]# systemctl start mysql@bootstrap.service //启动集群服务
  2. [root@pxcnode71 ~]# grep pass /var/log/mysqld.log     //查看数据库管理员初始登录密码
  3. 2019-06-20T12:29:42.489377Z 1 [Note] A temporary password is generated for root@localhost: W.HiOb8(ok)_
  4.  
  5. [root@pxcnode71 ~]#mysql –uroot –p’ W.HiOb8(ok)_’ //使用初始密码登录
  6. Mysql> alter user root@”localhost” identified by “123456”;//修改登录密码
  7. MySQL> exit;
  8. [root@pxcnode71 ~]#mysql –uroot –p123456 //使用修改后的密码登录
  9. Mysql> garnt reload, lock tables,replication client,process on *.* to
  10. sstuser@"localhost” identified by “123qqq…A”; //添加授权用户

5.启动数据库服务

在每台主机上启动数据库服务 ,3306是mysql端口,4567是集群通信端口,保证这两个端口打开

  1. [root@pxcnode72 ~]# systemctl start mysql //启动数据库服务
  2. [root@pxcnode72 ~]# netstat -utnlp | grep :3306
  3. tcp6 0 0 :::3306 :::* LISTEN 12794/mysqld
  4. [root@pxcnode72 ~]# netstat -utnlp | grep :4567
  5. tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 12794/mysqld
  6. [root@host72 ~]#

 

四、测试

测试目标:

1.测试数据库集群状态

2.测试数据存储是否同步

3.测试一台服务器宕机不影响整个集群

1.查看集群信息

在任意一台数据查看都可以。查看服务器连接状态显示NO,并且服务器台数为3即可

  1. [root@pxcnode71 ~]# mysql -uroot -p123456
  2. mysql-> show status like "%wsrep%";
  3. wsrep_incoming_addresses 192.168.4.71:3306,192.168.4.72:3306,192.168.4.73:3306 //集群成员列表
  4. wsrep_cluster_size 3             //集群服务器台数
  5. wsrep_cluster_status Primary //集群状态
  6. wsrep_connected ON            //连接状态
  7. wsrep_ready ON //服务状态

2.数据同步

1)创建授权用户

添加访问数据的连接用户 (在任意一台服务器上添加都可以,另外的2台服务器会自动同步授权用户)  

在72主机上创建用户,在71和73上查看是否同步该用户 

  1. [root@pxcnode72 ~]# mysql -uroot -p123456
  2. mysql> grant all on gamedb.* to yaya@"%" identified by "123456"; //添加授权用户
  3. Query OK, 0 rows affected, 1 warning (0.18 sec)
  4.  
  5. [root@pxcnode71 ~]# mysql -uroot -p123456 -e 'show grants for yaya@"%" '   //查看71
  6. +--------------------------------------------------+
  7. | Grants for yaya@% |
  8. +--------------------------------------------------+
  9. | GRANT USAGE ON *.* TO 'yaya'@'%' |
  10. | GRANT ALL PRIVILEGES ON `gamedb`.* TO 'yaya'@'%' |
  11. +--------------------------------------------------+
  12.  
  13. [root@pxcnode73 ~]# mysql -uroot -p123456 -e 'show grants for yaya@"%" '  //查看72
  14. +--------------------------------------------------+
  15. | Grants for yaya@% |
  16. +--------------------------------------------------+
  17. | GRANT USAGE ON *.* TO 'yaya'@'%' |
  18. | GRANT ALL PRIVILEGES ON `gamedb`.* TO 'yaya'@'%' |
  19. +--------------------------------------------------+

2)客户端连接集群存取数据 (连接任意一台数据库服务器的ip地址都可以)

连接数据服务器主机73,建立库表并插入数据

  1. client50 ~]# mysql -h192.168.4.73 -uyaya -p123456 //连接服务器73
  2. mysql>
  3. mysql> create database gamedb; //建库
  4. Query OK, 1 row affected (0.19 sec)
  5.  
  6. mysql> create table gamedb.a(id int primary key auto_increment,name char(10));//建表
  7. Query OK, 0 rows affected (1.02 sec)
  8.  
  9. mysql> insert into gamedb.a(name)values("bob"),("tom"); //插入记录
  10. Query OK, 2 rows affected (0.20 sec)
  11. Records: 2 Duplicates: 0 Warnings: 0

 

在另外2台数据库服务器查看数据,客户端连接数据库服务器71主机查看数据。

  1. client50 ~]# mysql -h192.168.4.71 -uyaya -p123456 //连接服务器71
  2. mysql> select * from gamedb.a; //查看记录
  3. +----+-------+
  4. | id | name |
  5. +----+-------+
  6. | 2 | bob |
  7. | 5 | tom |

 

  1. client50 ~]# mysql -h192.168.4.73 -uyaya -p123456 //连接服务器73
  2. mysql> select * from gamedb.a; //查看记录
  3. +----+-------+
  4. | id | name |
  5. +----+-------+
  6. | 2 | bob |
  7. | 5 | tom |

 

3.测试集群的高可用与故障后的数据恢复

1)停止数据库服务

停止3台服务器的任意一台主机的数据库服务都不会影响数据的存取。停止71号服务器的数据库服务,然后在72服务器上插入两条数据.在73好服务器上查看表记录,如果有记录证明一台服务器宕机后不影响集群中的其他主机.再启动71服务器的数据库服务,查看是否有这两条记录,如果有记录证明PXC自带的数据恢复

  1. [root@pxcnode71 ~]# systemctl stop mysql //停止71主机的数据库服务
  2.  
  3. Client50 ~]# client50 ~]# mysql -h192.168.4.72 -uyaya -p123456 //连接服务器72
  4. mysql> insert into gamedb.a(name)values("bob2"),("tom2");
  5. mysql> insert into gamedb.a(name)values("jerry"),("jack");
  6. Query OK, 2 rows affected (0.20 sec)
  7. Records: 2 Duplicates: 0 Warnings: 0

2)客户端50,连接数据库主机73,查看数据

  1. client50 ~]# mysql -h192.168.4.73 -uyaya -p123456 //连接服务器73
  2. mysql> select * from gamedb.a;
  3. +----+-------+
  4. | id | name |
  5. +----+-------+
  6. | 2 | bob |
  7. | 5 | tom |
  8. | 7 | bob2 |
  9. | 9 | tom2 |
  10. | 11 | jerry |
  11. | 13 | jack |
  12. +----+-------+
  13. 6 rows in set (0.00 sec)

3)启动71主机的数据库服务

数据库服务运行后,会自动同步宕机期间的数据。

  1. client50 ~]# mysql -h192.168.4.71 -uyaya -p123456 //连接服务器71
  2. mysql> select * from gamedb.a;
  3. +----+-------+
  4. | id | name |
  5. +----+-------+
  6. | 2 | bob |
  7. | 5 | tom |
  8. | 7 | bob2 |
  9. | 9 | tom2 |
  10. | 11 | jerry |
  11. | 13 | jack |
  12. +----+-------+
  13. rows in set (0.00 sec)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值