Linux CentOS7 部署 MySql数据库 PXC 集群


文章目录

  • 前言
    • 什么是PXC集群
    • PXC特性及优点
    • PXC的局限和劣势
    • PXC与Replication的区别
    • PXC与Replication的一般使用场景
  • 正题
    • 准备工作
      • 准备两台 Linux CentOS 7.X 的主机
        • 我这里直接选用阿里云的主机:
        • 1.选择CentOS 7.6 镜像
        • 2.修改两台服务器的host
        • 3.安全组要保证所需端口开放
        • 4.创建并启动服务器
    • 搭建第一个节点
      • 1.登录服务器,我这里使用的软件为Xshell 6
      • 2.关闭自带防火墙
      • 3.关闭SELINUX 【这是一个 Linux 内核模块,也是个安全子系统】
      • 4.安装Persona仓库
      • 5.安装 Percona XtraDB Cluster 的包
      • 6.修改初始密码
      • 7.修改配置文件 my.cnf
      • 8.启动第一个节点
      • 9.添加 SST 用户并分配相应的权限
    • 搭建第二个节点
      • 1.重复第一个节点前五步操作(包括第五步),这里不再重复写了,记得先不要启动第二台节点
      • 2.修改配置文件 my.cnf
      • 3.启动第二节点
    • 修改允许远程访问
    • 测试
      • 采用Navicat进行集群同步测试
      • 1.将两个数据库加入Navicat列表中(确保开启远程访问)
      • 2.向节点1数据库建立表及数据
      • 3.查看节点2,看是否数据同步了
  • 总结及注意事项
  • 文章结束


前言

什么是PXC集群

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

PXC特性及优点

完全兼容 MySQL。
同步复制,事务要么在所有节点提交或不提交。
多主复制,可以在任意节点进行写操作。
在从服务器上并行应用事件,真正意义上的并行复制。
节点自动配置,数据一致性,不再是异步复制。
故障切换:因为支持多点写入,所以在出现数据库故障时可以很容易的进行故障切换。
自动节点克隆:在新增节点或停机维护时,增量数据或基础数据不需要人工手动备份提供,galera cluster会自动拉取在线节点数据,集群最终会变为一致;

PXC最大的优势:强一致性、无同步延迟

PXC的局限和劣势

复制只支持InnoDB 引擎,其他存储引擎的更改不复制
写入效率取决于节点中最慢的一台

PXC与Replication的区别

Replication PXC
数据同步是单向的,master负责写,然后异步复制给slave;如果slave写入数据,不会复制给master 数据同步时双向的,任何一个mysql节点写入数据,都会同步到集群中其它的节点
异步复制,从和主无法保证数据的一致性 同步复制,事务在所有集群节点要么同时提交,要么同时不提交

PXC与Replication的一般使用场景

Replication PXC
【低价值业务】 【高价值业务】
日志 订单
新闻 账户
帖子 财务

正题

准备工作


准备两台 Linux CentOS 7.X 的主机

我这里直接选用阿里云的主机:

1.选择CentOS 7.6 镜像

在这里插入图片描述

2.修改两台服务器的host

1.进入配置文件编辑

vim /etc/hosts

2.将两台服务器的IP加入其中
第一台配置信息如图:
Linux CentOS7 部署 MySql数据库 PXC 集群_第1张图片

第二台配置信息如图:
Linux CentOS7 部署 MySql数据库 PXC 集群_第2张图片

3.安全组要保证所需端口开放

#mysql实例端口:3306
#PXC cluster相互通讯的端口:4567
#用于SST传送的端口:4444
#用于IST传送的端口:4568 

在这里插入图片描述

4.创建并启动服务器

在这里插入图片描述


搭建第一个节点

1.登录服务器,我这里使用的软件为Xshell 6

Linux CentOS7 部署 MySql数据库 PXC 集群_第3张图片

2.关闭自带防火墙

【查看防火墙】

sudo systemctl status firewalld

【关闭防火墙】

sudo systemctl stop firewalld

查看了一下发现默认是关闭的,inactive(dead) 代表关闭了,如果是active(running)就意味着防火墙开启了,我这里是测试也就让防火墙关闭着,如果不可以关就把上文中那四个需要的端口给开放即可
Linux CentOS7 部署 MySql数据库 PXC 集群_第4张图片

3.关闭SELINUX 【这是一个 Linux 内核模块,也是个安全子系统】

1.输入命令进入配置文件

vim /etc/selinux/config

2.将SELINUX的值设置为disabled
修改后的文件如图所示
Linux CentOS7 部署 MySql数据库 PXC 集群_第5张图片
3.输入命令使关闭生效

setenforce 0

4.安装Persona仓库

1.输入安装命令

sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

在这里插入图片描述
2.按【y】继续
Linux CentOS7 部署 MySql数据库 PXC 集群_第6张图片
3.安装完成
Linux CentOS7 部署 MySql数据库 PXC 集群_第7张图片

5.安装 Percona XtraDB Cluster 的包

1.输入安装命令

sudo yum install Percona-XtraDB-Cluster-57

在这里插入图片描述
2.按【y】继续Linux CentOS7 部署 MySql数据库 PXC 集群_第8张图片
3.按【y】继续Linux CentOS7 部署 MySql数据库 PXC 集群_第9张图片
4.安装完成
Linux CentOS7 部署 MySql数据库 PXC 集群_第10张图片

6.修改初始密码

1.先启动 Percona XtraDB Cluster 服务

sudo systemctl start mysqld

在这里插入图片描述
2.查看自动生成的ROOT临时密码

sudo grep 'temporary password' /var/log/mysqld.log

如图所示,这次我的临时密码就是 wBL(K6HD9yml
在这里插入图片描述
3.登录 MySQL

mysql -u root -p

将临时密码复制粘贴,注意密码录入会自动隐藏,粘贴完直接回车即可
在这里插入图片描述
登录成功进入Mysql命令行
Linux CentOS7 部署 MySql数据库 PXC 集群_第11张图片
4.输入命令,将密码修改为molimoli

ALTER USER 'root'@'localhost' IDENTIFIED BY 'molimoli';

在这里插入图片描述

5.退出

exit

在这里插入图片描述

6.关闭 MySQL 服务

sudo systemctl start mysqld

在这里插入图片描述

7.修改配置文件 my.cnf

1.输入命令编辑my.cnf文件

sudo vim /etc/my.cnf

Linux CentOS7 部署 MySql数据库 PXC 集群_第12张图片2.按下Ins建 开启编辑模式(开启后左下角有提示)
Linux CentOS7 部署 MySql数据库 PXC 集群_第13张图片3.在内容尾部追加信息
注意:将【88.88.88.88】改为你第一个服务器的IP,将【99.99.99.99】改为你第二个服务器的IP

[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://99.99.99.99,88.88.88.88

wsrep_node_name=ml1
wsrep_node_address=88.88.88.88

wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:molimoli

pxc_strict_mode=ENFORCING

binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

Linux CentOS7 部署 MySql数据库 PXC 集群_第14张图片

配置参数说明

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

wsrep_sst_auth
指定 sst 的身份验证凭据,使用<sst_user>:<sst_pass> 这种格式,启动第一个节点时必须创建,并且提供相应的权限。

pxc_strict_mode
关闭实验性的或者不支持的特性

binlog_format
Galera 只支持 row-level replication,所以设置为 binlog_format=ROW。

default_storage_engine
Galera 只支持 InnoDB 引擎,所以设置为 default_storage_engine=InnoDB。

innodb_autoinc_lock_mode
Galera 只支持 lock mode 为 2 的 InnoDB 引擎,所以设置为 innodb_autoinc_lock_mode=2

4.按ESC退出编辑模式,然后按shift + Z +Z 退出并保存
在这里插入图片描述

8.启动第一个节点

1.输入该命令启动第一个节点
注:使用 bootstrap 模式启动,默认会设置 wsrep_cluster_address=gcomm://,后面没有 IP,表示初始化集群。

sudo systemctl start mysql@bootstrap

在这里插入图片描述
2.登录Mysql

mysql -u root -p

Linux CentOS7 部署 MySql数据库 PXC 集群_第15张图片
3.查看PXC集群状态

show status like 'wsrep%';

在这里插入图片描述
打印了一长串信息,这就是PXC集群状态监控指标,可以看到集群数量时 1,本节点为 Synced 状态,表示连接成功,并且准备好进行 write-set replication。
Linux CentOS7 部署 MySql数据库 PXC 集群_第16张图片常用PXC集群状态监控指标说明:

1)wsrep_local_state_uuid:与wsrep_cluster_state_uuid的值一致,且所有节点该值都相同

(2)wsrep_cluster_state_uuid:所有节点该值都相同,如果有不同值的节点,说明该节点没有与集群建立连接

(3)wsrep_last_committed:集群已经提交事务的数量,是一个累计值,所有节点该值都相同,如果出现不一致,说明事务有延迟,可以用来计算延

(4)wsrep_replicated:从本节点复制出去的写集数量,wsrep_replicated_bytes为写集的总字节数,可以用于参考节点间的负载均衡是否平衡,该值较大的节点较为繁忙

(5)wsrep_received:与wsrep_replicated对应,本节点接收来自其它节点的写集数量

(6)wsrep_local_state:所有节点该值都应该为4,表示正常,节点状态有如下6个取值

     a、取值1:节点启动并与集群建立连接

     b、取值2:当节点成功执行状态传输请求时,该节点开始缓存写集

          c、取值3:节点接收了SST全量数据传输,该节点现在拥有所有集群数据,并开始应用已缓存的写集

     d、取值4:节点完成与集群数据的同步,它的从属队列现在是空的,并启用流控使其保持为空

     e、取值5:节点接收了状态传输请求,该节点现在对donor不执行流控,该节点已缓存所有的写集但无法应用

     f、取值6:节点完成对joiner节点的状态传输

(7)wsrep_incoming_addresses:集群中所有节点的IP,且每个节点该值都相同

(8)wsrep_cluster_size:集群中的节点数量,所有节点该值都相同

(9)wsrep_cluster_conf_id:所有节点该值都相同,如果值不同,说明该节点被临时“分区”了

(10)wsrep_cluster_status:集群组成的状态,所有节点该值都为“Primary”,如果该值不为“Primary”,说明该节点出现“分区”或“脑裂”现象

(11)wsrep_connected:所有节点该值都为“ON”,表示本节点已经与集群建立连接

(12)wsrep_ready:所有节点该值都为“ON”,表示本节点可以正常提供服务

9.添加 SST 用户并分配相应的权限

1.创建用户
注:用户名和密码必须跟配置文件匹配

CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'molimoli';

2.授权

GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';

3.刷新

FLUSH PRIVILEGES;

Linux CentOS7 部署 MySql数据库 PXC 集群_第17张图片

搭建第二个节点

1.重复第一个节点前五步操作(包括第五步),这里不再重复写了,记得先不要启动第二台节点

2.修改配置文件 my.cnf

1.输入命令编辑my.cnf文件

sudo vim /etc/my.cnf

2.在内容尾部追加信息
注意:将【88.88.88.88】改为你第一个服务器的IP,将【99.99.99.99】改为你第二个服务器的IP

[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://88.88.88.88,99.99.99.99

wsrep_node_name=ml2
wsrep_node_address=99.99.99.99

wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:molimoli

pxc_strict_mode=ENFORCING

binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

第二节点的配置文件与第一节点的配置文件区别是

wsrep_node_name=ml1
wsrep_node_address=88.88.88.88

变为

wsrep_node_name=ml2
wsrep_node_address=99.99.99.99

也就是将逻辑名改为第二节点,IP改为第二节点的IP,如果你要创建第三节点,同理只需要改这两处即可

3.启动第二节点

1.输入命令启动第二节点

sudo systemctl start mysqld

2.登录Mysql,并查询状态

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

可以看到 wsrep_cluster_size 的值是 2 表示集群已经有 2 个节点了。wsrep_local_state_comment 的值是 Synced 表示已经同步了。
Linux CentOS7 部署 MySql数据库 PXC 集群_第18张图片

注意 如果 wsrep_local_state_comment 的状态是 Joiner,表示正在同步,请不要启动第三个第四个节点的服务。

修改允许远程访问

在sql命令行下输入

grant all on *.* to root@'%' identified by 'molimoli' with grant option; 

测试

采用Navicat进行集群同步测试

1.将两个数据库加入Navicat列表中(确保开启远程访问)

1.填写信息
Linux CentOS7 部署 MySql数据库 PXC 集群_第19张图片
2.点击测试按钮,确保可以正常连接,然后单击确定即可完成节点1的添加
Linux CentOS7 部署 MySql数据库 PXC 集群_第20张图片
3.节点2添加同理,最终效果如图
Linux CentOS7 部署 MySql数据库 PXC 集群_第21张图片

2.向节点1数据库建立表及数据

1.随便建立一个库【MoLiTest】
Linux CentOS7 部署 MySql数据库 PXC 集群_第22张图片

2.随便建立个表【moli】
Linux CentOS7 部署 MySql数据库 PXC 集群_第23张图片
3.往这个表中加点数据
Linux CentOS7 部署 MySql数据库 PXC 集群_第24张图片

3.查看节点2,看是否数据同步了

可以看到节点2同步了节点1的数据,如果开启更多的节点也都是同样的效果
Linux CentOS7 部署 MySql数据库 PXC 集群_第25张图片

总结及注意事项

1.所有其他节点的数据和配置都会被第一个节点的数据覆盖
2.不用同时加入多个节点,避免数据或网络开销过大


文章结束


这是我通过学习对知识的整理及备忘,本博客的所有内容,仅是自己的一些学习笔记,如有错误,欢迎指正。如有侵权,请告知修改。

参考文章:
http://www.mamicode.com/info-detail-2652214.html
http://www.imooc.com/article/28832?block_id=tuijian_wz
https://qizhanming.com/blog/2019/05/16/how-to-install-percona-xtradb-cluster-on-centos-7
https://cloud.tencent.com/developer/article/1177822

你可能感兴趣的:(SQL,Linux)