天天看点

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 镜像

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

2.修改两台服务器的host

1.进入配置文件编辑

vim /etc/hosts
           

2.将两台服务器的IP加入其中

第一台配置信息如图:

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

第二台配置信息如图:

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

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

#mysql实例端口:3306
#PXC cluster相互通讯的端口:4567
#用于SST传送的端口:4444
#用于IST传送的端口:4568 
           
Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

4.创建并启动服务器

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

搭建第一个节点

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

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

2.关闭自带防火墙

【查看防火墙】

sudo systemctl status firewalld
           

【关闭防火墙】

sudo systemctl stop firewalld
           

查看了一下发现默认是关闭的,inactive(dead) 代表关闭了,如果是active(running)就意味着防火墙开启了,我这里是测试也就让防火墙关闭着,如果不可以关就把上文中那四个需要的端口给开放即可

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

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

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

vim /etc/selinux/config
           

2.将SELINUX的值设置为disabled

修改后的文件如图所示

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

3.输入命令使关闭生效

4.安装Persona仓库

1.输入安装命令

sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
           
Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

2.按【y】继续

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

3.安装完成

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

5.安装 Percona XtraDB Cluster 的包

1.输入安装命令

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

2.按【y】继续

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

3.按【y】继续

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

4.安装完成

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

6.修改初始密码

1.先启动 Percona XtraDB Cluster 服务

sudo systemctl start mysqld
           
Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

2.查看自动生成的ROOT临时密码

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

如图所示,这次我的临时密码就是 wBL(K6HD9yml

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

3.登录 MySQL

mysql -u root -p
           

将临时密码复制粘贴,注意密码录入会自动隐藏,粘贴完直接回车即可

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

登录成功进入Mysql命令行

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

4.输入命令,将密码修改为molimoli

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

5.退出

exit
           
Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

6.关闭 MySQL 服务

sudo systemctl start mysqld
           
Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

7.修改配置文件 my.cnf

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

sudo vim /etc/my.cnf
           
Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

2.按下Ins建 开启编辑模式(开启后左下角有提示)

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

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 集群前言正题总结及注意事项文章结束
配置参数说明

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 退出并保存

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

8.启动第一个节点

1.输入该命令启动第一个节点

注:使用 bootstrap 模式启动,默认会设置 wsrep_cluster_address=gcomm://,后面没有 IP,表示初始化集群。

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

2.登录Mysql

mysql -u root -p
           
Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

3.查看PXC集群状态

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

打印了一长串信息,这就是PXC集群状态监控指标,可以看到集群数量时 1,本节点为 Synced 状态,表示连接成功,并且准备好进行 write-set replication。

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

常用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.创建用户

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

2.授权

3.刷新

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

搭建第二个节点

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
           

可以看到 wsrep_cluster_size 的值是 2 表示集群已经有 2 个节点了。wsrep_local_state_comment 的值是 Synced 表示已经同步了。

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

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

修改允许远程访问

在sql命令行下输入

测试

采用Navicat进行集群同步测试

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

1.填写信息

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

2.点击测试按钮,确保可以正常连接,然后单击确定即可完成节点1的添加

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

3.节点2添加同理,最终效果如图

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

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

1.随便建立一个库【MoLiTest】

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

2.随便建立个表【moli】

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

3.往这个表中加点数据

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

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

可以看到节点2同步了节点1的数据,如果开启更多的节点也都是同样的效果

Linux CentOS7 部署 MySql数据库 PXC 集群前言正题总结及注意事项文章结束

总结及注意事项

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

继续阅读