Linux云计算之在Centos部署PXC高可用集群

·  阅读 64

安装PXC集群软件包

PXC实验环境说明

系统使用CentOS7.6以上,关闭防火墙,关闭selinux,配好ip,配好网络yum源 环境说明如下

Node	Host		IP Addr			Descprition
Node1	xuegod63.cn	192.168.1.63/24	集群节点1
Node2	xuegod64.cn	192.168.1.64/24	集群节点2
Node3	xuegod62.cn	192.168.1.62/24	集群节点3
复制代码

说明

Percona XtrDB Cluster 属于 Multi-master Replication(多主复制)。
复制代码

多主复制意味着支持对任意节点的读写,数据会同步复制到其他节点。

确认每个集群节点的机器名并关闭防火墙

以 xuegod63.cn为例,其他服务器的主机名改为 xuegod64.cn, xuegod62.cn 。

[root@xuegod63 ~]# hostname
xuegod63.cn
复制代码

关闭防火墙:

[root@xuegod63 ~]# systemctl disable firwalld && iptables -F
[root@xuegod64 ~]# systemctl disable firwalld && iptables -F
[root@xuegod62 ~]# systemctl disable firwalld && iptables -F
复制代码
每个节点安装PXC集群软件包

方法1:离线包,方式安装PXC集群 上传qpress和Percona-XtraDB-Cluster-8.0.23-rd3b9a1d-el7-x86_64-bundle.tar到xuegod63 (1)、在xuegod63上安装pxc集群软件包:

[root@xuegod63 ~]# rpm -ivh qpress-11-1.el7.x86_64.rpm   #先rpm安装qpress
[root@xuegod63 ~]# tar xvf Percona-XtraDB-Cluster-8.0.23-rd3b9a1d-el7-x86_64-bundle.tar      #解压包
复制代码

注:主要安装percona-xtradb-cluster-server 这个mysql服务

[root@xuegod63 ~]# yum -y install percona*.rpm
复制代码

(2)、在xuegod64上安装pxc集群软件包

[root@xuegod63 ~]# scp qpress-11-1.el7.x86_64.rpm percona-xtradb-cluster-* 192.168.1.64:/root/
[root@xuegod64 ~]# rpm -ivh qpress-11-1.el7.x86_64.rpm   #先rpm安装qpress
[root@xuegod64 ~]# yum -y install percona*.rpm
复制代码

(3)、在xuegod62上安装pxc集群软件包

[root@xuegod63 ~]# scp qpress-11-1.el7.x86_64.rpm percona-xtradb-cluster-* 192.168.1.64:/root/
[root@xuegod62 ~]# rpm -ivh qpress-11-1.el7.x86_64.rpm   #先rpm安装qpress
[root@xuegod62 ~]# yum -y install percona*.rpm
复制代码

扩展:方法2:在线方式安装PXC集群,从Percona 仓库在线安装 配置 yum 源如下,以 xuegod63 为例,其他 xuegod64, xuegod62 相同

[root@xuegod63 ~]# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm  -y
之后设置 pxc80 仓库
[root@xuegod63 ~]# percona-release setup pxc80   #增加PXC-8.0t版本的仓库地址
[root@xuegod63 yum.repos.d]# ls /etc/yum.repos.d/   #查看增加的pxc yum源
centos7.repo           CentOS-fasttrack.repo  percona-original-release.repo.bak
CentOS-Base.repo       CentOS-Media.repo      percona-prel-release.repo
CentOS-CR.repo         CentOS-Sources.repo    percona-pxc-80-release.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo      percona-tools-release.repo
安装 Percona XtraDB Cluster
[root@xuegod63 ~]# sudo yum install percona-xtradb-cluster -y    #一般网络会很慢,在线安装会失败
复制代码
修改percona-xtradb-cluster-server数据库root密码

三个节点都安装完软件包之后,接下来只对第一个节点 xuegod63进行修改密码操作。

[root@xuegod63 ~]#  systemctl start mysqld  #先启动 Percona XtraDB Cluster 服务。
查看MySQL 安装时自动生成的 root 的临时密码
[root@xuegod63 ~]#  grep 'temporary password' /var/log/mysqld.log
2021-09-22T09:35:03.585604Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 7Epyww)a4n?d
复制代码

使用临时密码登录 MySQL

[root@xuegod63 ~]#  mysql -u root -p'7Epyww)a4n?d'
复制代码

更改 root 用户的密码,之后退出。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql> exit
复制代码

关闭 MySQL 服务。

[root@xuegod63 ~]# sudo systemctl stop mysqld
复制代码

注意:以上修改密码操作只在第一个节点进行即可。配置好第二个和第三个节点,启动服务操作后会复制到其他节点中。xuegod62和xuegod64上的mysql服务,现在不需要启动

配置PXC集群第1个节点

配置第一个节点 xuegod63 的 /etc/my.cnf

[root@xuegod63 ~]# vim /etc/my.cnf     #修改以下红色标记内容
# Template my.cnf for PXC
# Edit to your requirements.
[client]
socket=/var/lib/mysql/mysql.sock

[mysqld]
server-id=1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# Binary log expiration period is 604800 seconds, which equals 7 days
binlog_expire_logs_seconds=604800

######## wsrep ###############
# Path to Galera library
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
# Cluster connection URL contains IPs of nodes
#If no IP is found, this implies that a new cluster needs to be created,
#in order to do that you need to bootstrap this node
wsrep_cluster_address=gcomm://192.168.1.63,192.168.1.64,192.168.1.62

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# Slave thread to use
wsrep_slave_threads=8

wsrep_log_conflicts

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node IP address
wsrep_node_address=192.168.1.63
# Cluster name
wsrep_cluster_name=pxc-cluster

#If wsrep_node_name is not specified,  then system hostname will be used
wsrep_node_name=xuegod63.cn

#pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER
pxc_strict_mode=ENFORCING

# SST method
wsrep_sst_method=xtrabackup-v2

pxc-encrypt-cluster-traffic=OFF
复制代码

my.cnf增加的参数说明:

# 集群通讯地址
wsrep_cluster_address=gcomm://192.168.1.63,192.168.1.64,192.168.1.62
# 本节点的地址
wsrep_node_address=192.168.1.63
# 本节点的名称
wsrep_node_name= xuegod63
# 关闭加密
pxc-encrypt-cluster-traffic=OFF
复制代码

注意本例使用 pxc-encrypt-cluster-traffic=OFF 关闭了传输加密,参考 Encrypting PXC Traffic这些内容也同样对 xuegod64, xuegod62 进行配置,只有两个参 wsrep_node_name, wsrep_node_address 配置的值需要修改一下

对于 xuegod64 内容改为

[root@xuegod63 ~]# scp  /etc/my.cnf   192.168.1.64:/etc/
[root@xuegod64 ~]# vim /etc/my.cnf    #修改以下内容
wsrep_node_address=192.168.1.64
wsrep_node_name= xuegod64.cn
复制代码

对于 xuegod62 内容为

[root@xuegod63 ~]# scp  /etc/my.cnf   192.168.1.62:/etc/ 
[root@xuegod62 ~]# vim /etc/my.cnf     #修改以下内容
wsrep_node_name= xuegod62.cn
wsrep_node_address=192.168.1.62
复制代码

展:主配置文件my.cnf其他参数说明

wsrep_provider    #指定 Galera 库的路径。
wsrep_cluster_name  #指定集群的逻辑名称,集群内的所有节点,这个名称必须一致。
wsrep_cluster_address  #指定集群内节点的 IP 地址,建议将集群节点都配上。
wsrep_node_name  #指定单个节点的逻辑名称,如果没有指定,将使用 hostname 作为逻辑名称。
wsrep_node_address  #指定此特定节点的 IP 地址。
wsrep_sst_method  #默认的使用 Percona Xtrabackup 进行 State Snapshot Transfer (SST),强烈建议使用 wsrep_sst_method=xtrabackup-v2
binlog_format  #Galera 只支持 row-level replication,默认设置为 binlog_format=ROW。
innodb_autoinc_lock_mode  #Galera 只支持 lock mode 为 2 的 InnoDB 引擎,默认设置为 innodb_autoinc_lock_mode=2。
复制代码

引导PXC集群启动并将其他节点加到集群中

在第一个节点上引导PXC集群启动

在第一个节点 xuegod63 使用如下命令引导PXC集群启动

[root@xuegod63 ~]# systemctl start mysql@bootstrap
复制代码

使用 bootstrap 模式启动mysql数据库,会根据 wsrep_cluster_address=gcomm://192.168.1.63,192.168.1.64,192.168.1.62初始化集群。 为确保初始化完成,可以使用如下命令查看 登录 MySQL

[root@xuegod63 ~]# mysql -u root -p123456
mysql> show status like 'wsrep%';
+----------------------------------+-----------------------------------------------+
| Variable_name                    | Value                                         |
+----------------------------------+-----------------------------------------------+
| wsrep_local_state_uuid           | 77007d05-777b-11e9-9836-4649f12          |
| ...                                 | ...                                           |
| ...                                 | ...                                           |
| wsrep_local_state                  | 4                                             |
| wsrep_local_state_comment        | Synced                                        |
| ...                                 | ...                                           |
| ...                                 | ...                                           |
| wsrep_cluster_size                 | 1                                             |
| ...                                 | ...                                           |
| wsrep_cluster_status              | Primary                                       |
| wsrep_connected                  | ON                                            |
| wsrep_ready                      | ON                                            |
+----------------------------------+-----------------------------------------------+
71 rows in set (0.01 sec)
复制代码

可以看到集群数量是 1,本节点为 Synced 状态,表示连接成功,并且准备好进行 write-set replication。

注意:所有其他节点的数据和配置都会被第一个节点的数据覆盖 不要同时加入多个节点,避免数据或网络开销过大。等一个结点加入成功后,再加入另一个新结点。

启动第二个节点
[root@xuegod64 ~]# systemctl start mysqld
复制代码

启动完成后,xuegod64 会接到 xuegod63 的数据,可以使用如下命令查看状态

[root@xuegod64 ~]# mysql -u root -p123456
复制代码

登录到 MySQL 后,输入如下命令

mysql> show status like 'wsrep%';
+----------------------------------+--------------------------------------+
| Variable_name                    | Value                                |
+----------------------------------+--------------------------------------+
| wsrep_local_state_uuid           | 33e1e8eb-777b-11e9-b16f-9f9d75d90117 |
| ...                              | ...                                  |
| ...                              | ...                                  |
| wsrep_local_state              | 4                                    |
| wsrep_local_state_comment    | Synced                               |
| ...                              | ...                                  |
| ...                              | ...                                  |
| wsrep_cluster_size             | 2                                    |
| ...                              | ...                                  |
| wsrep_cluster_status           | Primary                              |
| wsrep_connected              | ON                                   |
| ...                              | ...                                  |
| ...                              | ...                                  |
| wsrep_ready                   | ON                                   |
+----------------------------------+--------------------------------------+
复制代码

可以看到 wsrep_cluster_size 的值是 2 表示集群已经有 2 个节点了。 wsrep_local_state_comment 的值是 Synced 表示已经同步了。 注意 如果 wsrep_local_state_comment 的状态是 Joiner,表示正在同步,请不要启动第三个节点的服务。

启动第三个节点

注意:确认好第二个节点的状态为 Synced 后,再启动第三个节点。 步骤与启动第二个节点相同

[root@xuegod62 ~]# systemctl start mysqld
复制代码

启动完成后,xuegod62 会接到集群,可以使用如下命令查看状态

[root@xuegod62 ~]# mysql -u root -p
复制代码

登录到 MySQL 后,输入如下命令

+----------------------------------+--------------------------------------+
| Variable_name                    | Value                                |
+----------------------------------+--------------------------------------+
| wsrep_local_state_uuid           | 33e1e8eb-777b-11e9-b16f-9f9d75d90117 |
| ...                              | ...                                  |
| ...                              | ...                                  |
| wsrep_local_state              | 4                                    |
| wsrep_local_state_comment    | Synced                               |
| ...                              | ...                                  |
| ...                              | ...                                  |
| wsrep_cluster_size             | 3                                    |
| ...                              | ...                                  |
| wsrep_cluster_status           | Primary                              |
| wsrep_connected              | ON                                   |
| ...                              | ...                                  |
| ...                              | ...                                  |
| wsrep_ready                   | ON                                   |
+----------------------------------+--------------------------------------+
71 rows in set (0.00 sec)
复制代码

可以看到集群数量是 3,连接没有问题。

分类:
代码人生
标签:
分类:
代码人生
标签:
收藏成功!
已添加到「」, 点击更改