PXC集群配置方式

PXC介绍

Percona XtraDB Cluster(简称PXC)

  • 是基于Galera的MySQL高可用集群解决方案
  • Galera Cluster是Codership公司开发的一套免费开源的高可用方案
  • PXC集群主要由两部分组成:Percona Server with XtraDB和Write Set Replication patches(同步、多主复制插件)
  • 官网:http://galeracluster.com

PXC特点

  • 数据强一致性、无同步延迟
  • 没有主从切换操作,无需使用虚拟IP
  • 支持InnoDB存储引擎
  • 多线程复制
  • 部署使用简单
  • 支持节点自动加入,无需手动拷贝数据
  • 新加入的节点开销大,需要复制完整的数据。采用sst传输开销太大

相应端口

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

主机角色

三台服务器

主机名IP地址角色
pxc71192.168.4.71数据库服务器
pxc72192.168.4.72数据库服务器
pxc73192.168.4.73数据库服务器

配置主机名映射

PXC集群需要用主机名通信,所以需要添加本机hosts文件,进行主机名映射

三台服务器都要添加

vim /etc/hosts
192.168.4.71 pxc71
192.168.4.72 pxc72
192.168.4.73 pxc73

安装软件

实验环境 centos7.9 ,pxc5.7

做这个实验需要三个程序

软件作用
percona-xtrabackup在线热备程序
qpress递归压缩程序
Percona-XtraDB-Cluster-server-57-5.7.35-31.53.1.el7.x86_64.rpm集群服务程序

下载网址:

Percona-XtraDB-Cluster:https://www.percona.com/downloads/Percona-XtraDB-Cluster-57/LATEST/,本站下载:Percona-XtraDB-Cluster

percona-xtrabackup:https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/,本站下载:percona-xtrabackup

应该这三个软件有依赖关系,需要注意安装顺序

qpress:https://centos.pkgs.org/7/percona-x86_64/qpress-11-1.el7.x86_64.rpm.html,

三台主机都要进行安装

#192.168.4.71、192.168.4.72、192.1688.4.73
yum -y install libev    #安装依赖
yum -y install percona-xtrabackup-24-2.4.24-1.el7.x86_64.rpm
yum -y install qpress-11-1.el7.x86_64.rpm  #依赖包
tar -xvf Percona-XtraDB-Cluster-5.7.35-31.53-r611-el7-x86_64-bundle.tar
yum -y install Percona-XtraDB-Cluster-*.rpm

配置服务

  • 相关配置文件
    • /etc/percona-xtradb-cluster.conf.d #所在目录
  • 配置文件说明
    • mysqld.cnf #数据库服务运行参数配置文件
    • mysqld_safe.cnf #Percona Server 5.7 配置文件
    • wsrep.cnf #PXC集群配置文件

这里的提供数据库服务的软件是:Percona-XtraDB-Cluster-server

修改配置文件:

修改数据库服务运行参数配置文件

  • mysqld.cnf(三台都要配置)
  • 重要配置说明
    • server-id=71 #server-id不允许重复
    • datadir=/var/lib/mysql #数据库目录
    • socket=/var/lib/mysql/mysql.sock #socker文件
    • log-error=/var/log/mysqld.log #日志文件
    • pid-file=/var/run/mysqld/mysqld.pid #进程pid
    • log-bin #默认开启bin-log
    • log_slave_updates #默认开启层级复制
    • expire_logs_days=7 #默认保留日志7天

修改Percona Server 5.7 配置文件

  • mysqld_safe.cnf
  • 重要配置说明
    • pid-file = /var/run/mysqld/mysqld.pid #pid文件位置及名称
    • socket = /var/lib/mysql/mysql.sock #socket文件位置及名称
  • 三台数据库服务器,使用默认配置即可

修改PXC集群配置文件

  • wsrep.cnf

  • 重要配置说明

    • wsrep_cluster_address=gcomm:// #集群成员列表

    • wsrep_node_address=192.168.70.63 #本机IP地址

    • wsrep_cluster_name=pxc-cluster #集群名称,三台必须相同

    • wsrep_node_name=pxc-cluster-node-1 #本机主机名

    • wsrep_sst_auth=“sstuser:s3cretPass” #SST数据同步授权用户

#192.168.4.71
vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
[client]
socket=/var/lib/mysql/mysql.sock

[mysqld]
server-id=71    #修改server-id
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin                #默认开启bin-log
log_slave_updates         #默认开启层级复制
expire_logs_days=7          #默认保留日志7天

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.4.71 ,192.168.4.72 ,192.168.4.73    #在第八行左右添加集群成员列表
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads= 8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_node_address=192.168.4.71   #添加本机IP
wsrep_cluster_name=pxccluster    #集群名称,三台服务器的集群名称要相同
wsrep_node_name=pxc71    #与这个IP映射的主机名
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:123456"   #做全量备份使用的用户和密码


#192.168.4.72
vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
server-id=72   #修改server-id
datadir=/var/lib/mysql        #数据库目录
socket=/var/lib/mysql/mysql.sock      #socker文件
log-error=/var/log/mysqld.log              #日志文件
pid-file=/var/run/mysqld/mysqld.pid        #进程pid
log-bin                #默认开启bin-log
log_slave_updates         #默认开启层级复制
expire_logs_days=7          #默认保留日志7天
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73    #在第八行左右添加集群成员列表
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads= 8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_node_address=192.168.4.72   #添加本机IP
wsrep_cluster_name=pxccluster    #集群名称,三台服务器的集群名称要相同
wsrep_node_name=pxc72    #与这个IP映射的主机名
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:123456"   #做全量备份使用的用户和密码

#192.168.4.73
vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
[client]
socket=/var/lib/mysql/mysql.sock
[mysqld]
server-id=73    #修改server-id
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
log-bin                #默认开启bin-log
log_slave_updates         #默认开启层级复制
expire_logs_days=7          #默认保留日志7天
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.4.71,192.168.4.72,192.168.4.73    #在第八行左右添加集群成员列表
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads= 8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_node_address=192.168.4.73   #添加本机IP
wsrep_cluster_name=pxccluster    #集群名称,三台服务器的集群名称要相同
wsrep_node_name=pxc73    #与这个IP映射的主机名
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:123456"   #做全量备份使用的用户和密码

启动服务

在一台服务器上执行即可(例:192.168.4.73)

  • 启动集群服务
  • 添加授权用户
systemctl start mysql@bootstrap.service     #启动集群服务,进行数据初始化
grep pass /var/log/mysqld.log     #查看数据库管理员初始登录密码
mysql -uroot -p'初始密码' 
alter user root@'localhost' identified by "123456";
grant reload,lock tables,replication client,process on *.* to sstuser@"localhost" identified by "123456";  #添加授权用户,这个用户需要和配置文件一致
# reload  装载数据的权限
#lock tables  有锁表的权限
#replication client 查看服务状态的权限
#process  管理服务的权限
#也可以给all的权限

在其他2台服务器上执行

  • 启动数据库服务

  • 会自动同步71主机的授权用户急管理员root密码

#192.168.4.71\192.168.4.72
systemctl start mysql
ss -nultp | grep 3306  
ss -nultp | grep 4567
mysql -uroot -p123456
select user,host from mysql.user;

在这里插入图片描述
在这里插入图片描述

在两台服务器上起不来的,请查看日志/var/log/mysqld.log

测试配置

查看集群信息(可在任意一台数据库服务器上执行)

  • 执行SQL命令 show status like “%wsrep%”;
  • 相关参数
    • wsrep_incoming_addresses 192.168.4.73:3306,192.168.4.72:3306,192.168.4.71:3306 #成员列表
    • wsrep_cluster_size 3 #集群服务器台数
    • wsrep_cluster_status Primary #集群状态
    • wsrep_ready ON #服务状态
    • wsrep_connected ON #连接状态

在这里插入图片描述

测试集群功能

  • 在任意一服务器上添加访问数据的授权用户,其余会自动同步
  • 在客户端使用授权用户连接任意数据库服务器都可以存储数据,且可以查看到相同的数据
  • 建表时,必须有主键字段
mysql -uroot -p123456
grant all on testdb.* to tom@"%" identified by "123456";
#在其余两台查看
mysql -uroot -p123456 -e "show grants for tom@'%'"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

客户端测试

mysql -utom -p123456 -h192.168.4.72  #这里的IP是集群中的任意一个就行
create database testdb;
create table testdb.id(id int);
create table testdb.name(id int primary key auto_increment,name char(20) );
insert into testdb.id(id) values(10);  #这条会报错,原因建表时没有主键
insert into testdb.name(name) values("jray");
insert into testdb.name(name) values("bob");
select * from testdb.name;
#这里会发现他的数据编号是2,且步长为3,这里是因为我们是第二台数据库服务器,且集群数量为3

在这里插入图片描述

在其他两台数据库查看数据是否同步成功

mysql -uroot -p123456 -e "select * from testdb.name"

在这里插入图片描述
在这里插入图片描述

测试高可用

测试故障自动恢复

  • 任何1台数据库服务器宕机都不影响用户存取数据
  • 服务器运行后自动同步宕机期间的数据
#192.168.4.71
#模拟宕机
systemctl stop mysql
systemctl status mysql
#在客户端连接71,进行测试
mysql -utom -p123456 -h192.168.4.71
#192.168.4.72,查看集群状态
mysql -uroot -p123456
 show status like "%wsrep%";
#客户端连接集群其他机器,添加数据
mysql -utom -p123456 -h192.168.4.73
insert into testdb.name(name) values("mack");
insert into testdb.name(name) values("mack3");
select * from testdb.name;

在这里插入图片描述
在这里插入图片描述

这个时候我们可以看出71已经宕机了,然后在集群其他的机器写入数据,在恢复71查看数据

在这里插入图片描述

插入数据
在这里插入图片描述
恢复71的服务

systemctl start mysql
mysql -uroot -p123456
select * from testdb.name;   ##查看数据是否同步成功
#查看集群状态
 show status like "%wsrep%";

在这里插入图片描述

71宕机期间数据恢复正常,这一点比MHA好,MHA需要手动恢复
在这里插入图片描述

常见错误

failed to open gcomm backend connection: 110

gcs/src/gcs_core.cpp:gcs_core_open():209: Failed to open backend connection: -110 (Connection timed out)

解决方案

查看三台服务器的主机映射,是否正常,三台主机的hosts文件都要进行添加

查看三台主机的wsrep.cnf文件中的集群名称是否一致,一般这个问题就是由上面的配置错误引起的,去其他两台数据库服务器上,看默认路径下的MySQL是否初始化成功,如果成功初始化,请删除初始化文件,重启启动服务,重新初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值