PXC集群部署

Posted by liuxu379 on November 9, 2019

简介

Percona-XtraDB-Cluster是 MySQL 集群的一个主主复制的解决方案,暂时也只了解了这一个,搭配 HaProxy 负载均衡,自己用起来感觉效果不错。简单介绍一下其特点:

  • 强一致性,所有服务器提交的事务全部执行完,才算执行成功;

  • 只支持 InnoDB 引擎;

  • 所有服务器的配置都要相同,因为同步速度取决于配置最低的服务器;

  • 多主复制,可以在任一节点写入,可以很方便地做负载均衡;

  • 数据库过多的话会影响同步速度;

介绍完 PXC,再简单说一下 Replication 的特点:

  • 弱一致性,异步复制,无法保证数据一致性;
  • 同步复制快;
  • 适合存储低价值的数据;

部署

卸载 Mariadb-libs

yum -y remove mari*

为什么要卸载 Mariadb 呢?因为 Mariadb 是 MySQL 的一个分支,而 CentOS7 默认安装了它,这时在安装 MySQL 时会产生冲突,所以要先卸载掉它。


开放端口

  • 3306:MySQL 服务端口
  • 4444:全量同步端口
  • 4567:数据库节点通信端口
  • 4568:增量同步端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --reload

关闭SELINUX

vi /etc/selinux/config
#将 SELINUX 参数改为 disabled
SELINUX = disabled

SELINUX 涉及到权限控制方面的东西,目前对它还不是很了解,为了避免出现不必要的问题,先关掉它。


安装 Percona-XtraDB-Cluster

yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum update -y percona-release
yum install -y Percona-XtraDB-Cluster-57

修改 MySQL 配置文件

初始化 Root 密码并创建同步账户

cat /var/log/mysqld.log | grep "A temporary password"
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

CREATE USER 'admin'@'%' IDENTIFIED BY 'admin';
GRANT all privileges ON *.* TO 'admin'@'%';
FLUSH PRIVILEGES;

exit;

关闭 MySQL 并禁止开机启动

service mysql stop
chkconfig mysqld off

这里之所以禁止 MySQL 开机启动,是因为后续会用到其他启动命令。


修改 Wsrep 配置文件

编辑配置文件 vi /etc/my.cnf

替换并修改参数

[client]
socket=/var/lib/mysql/mysql.sock


[mysqld]
server-id=3 #当前集群服务器 id ,注意不要跟其他服务器 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
log_slave_updates
expire_logs_days=7


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


character_set_server = utf8
bind-address = 0.0.0.0
#跳过DNS解析
skip-name-resolve




wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster  #PXC集群的名称
wsrep_cluster_address=gcomm://192.168.1.161,192.168.1.199,192.168.1.139  #所有集群的IP
wsrep_node_name=pxc3  #当前节点的名称
wsrep_node_address=192.168.1.199  #当前节点的IP
wsrep_sst_method=xtrabackup-v2  #同步方法(mysqldump、rsync、xtrabackup)
wsrep_sst_auth= admin:admin  #同步使用的帐户,这里就是上面创建的同步账户
pxc_strict_mode=ENFORCING  #同步严厉模式
binlog_format=ROW  #基于ROW复制(安全可靠)
default_storage_engine=InnoDB  #默认引擎
innodb_autoinc_lock_mode=2  #主键自增长不锁表

初始化集群节点

其中一个节点使用 systemctl start mysql@bootstrap.service 启动,其他节点使用 service mysql start 启动

管理命令

systemctl stop mysql@bootstrap.service
systemctl start mysql@bootstrap.service
systemctl stop mysqld
systemctl start mysqld

配置 wsrep_causal_reads

mysql -u root -p
set wsrep_causal_reads =1;

为什么要修改 wsrep_causal_reads 参数呢?因为集群内 master 节点的性能更好,执行事件要比 slave 快,这就造成了短暂的同步不一致(out-of-sync),这时候读取 slave 结果就为空,wsrep_causal_reads 参数用来控制读取 slave 的行为,它会使操作一直等待直到事件被执行;


查看 PXC 集群状态

mysql -u root -p
show status like 'wsrep_cluster%';

使用 HaProxy 做负载均衡

安装 haproxy yum install -y haproxy

修改配置 vi /etc/haproxy/haproxy.cfg

替换并修改参数

	global
     log         127.0.0.1 local2
     chroot      /var/lib/haproxy
     pidfile     /var/run/haproxy.pid
     maxconn     4000
     user        haproxy
     group       haproxy
     daemon
     # turn on stats unix socket
     stats socket /var/lib/haproxy/stats
defaults
     mode                    http
     log                     global
     option                  httplog
     option                  dontlognull
     option http-server-close
     option forwardfor       except 127.0.0.0/8
     option                  redispatch
     retries                 3
     timeout http-request    10s
     timeout queue           1m
     timeout connect         10s
     timeout client          1m
     timeout server          1m
     timeout http-keep-alive 10s
     timeout check           10s
     maxconn                 3000
listen   admin_stats  
     bind    0.0.0.0:8888
     mode  http
     stats uri       /dbs
     stats realm  Global\ statistics
     stats auth    admin:admin
listen   proxy-mysql
     bind    0.0.0.0:3306  
     mode  tcp
     balance  roundrobin
     option  tcplog       #日志格式
    server  MySQL_1 192.168.1.161:3306 check weight 1 maxconn 2000 #这里注意将IP修改为集群服务器的IP
    server  MySQL_2 192.168.1.139:3306 check weight 1 maxconn 2000
    server  MySQL_3 192.168.1.199:3306 check weight 1 maxconn 2000  
     #option  tcpka        #使用keepalive检测死链

重启服务 service haproxy start

通过访问 http://localhost:8888/dbs 即可查看 HaProxy 运行状态。用户名和密码为 admin,端口、后缀和账户都可在配置文件内进行修改。


结束

暂时先写到这里,等待后续更新。