MySQL PXC集群的实现

MHA:一主多从,主节点挂了就提升一个从节点作为主节点。

缺点:提升从节点为主节点需要时间,且只有一个节点能进行写操作,所以写的性能不高。

双主架构:两个主节点,两个节点都能进行读写操作,但是双主架构会出现冲突的问题。

实现流程:客户端发送请求给节点,节点更改玩数据后返回对应信息,然后将更新的数据存入二进制中,通过这个二进制文件更新其他节点的数据。

多主架构:多个节点都是主节点,采用全局校验的方法来实现冲突的解决。

全局校验解决了多个主节点之间的冲突问题。

  • Galera replication library (galera-3)
  • WSREP:MySQL extended with the Write Set Replication

  • PXC:Percona XtraDB Cluster,是Percona对Galera的实现

参考仓库:https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basea
rch
  • MariaDB Galera Cluster:
参考仓库:https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-5.5.X/yum/centos7-
amd64/
  • 两者都需要至少三个节点,不能安装mysql server 或 mariadb-server
  • 两个的底层工作原理都是一样的。都是采用上面的两个组件来实现的。

环境配置:

关闭selinux和防火墙
设置时间同步

四台主机:

10.0.0.20
10.0.0.21
10.0.0.22
10.0.0.22

实现流程:

  • 1.配置peconna的yum源
  • 2.安装PXC对应软件
  • 3.更改配置文件
  • 4.启动

因为官方的yum源访问很慢,所以采用清华的源:

[root@CentOS7 ~]# cat /etc/yum.repos.d/pxc.repo
[percona]
name=percona_repo
baseurl=https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
enabled=1
gpgcheck=0

#yum中自带的变量
$releasever: 当前OS的主版本号,如:8,7,6
$basearch:系统基础平台;i386, x86_64

OS 版本目前不支持CentOS 8

[root@CentOS7 ~]# yum install Percona-XtraDB-Cluster-57 -y
mysql5.7版本中:

/etc/my.cnf为主配置文件

其余的配置文件都放在/etc/percona-xtradb-cluster.conf.d目录,

/etc/percona-xtradb-cluster.conf.d目录包含mysqld.cnf,mysqld_safe.cnf,wsrep.cnf 三个文件

所有节点的配置文件都需要修改。

只需要修改pxc的配置文件:
/etc/percona-xtradb-cluster.conf.d/wsrep.cnf

修改内容:

  • 集群ip的ip地址:wsrep_cluster_address=gcomm://
  • 当前节点的地址:wsrep_node_address=10.0.0.20
  • 集群的名称:wsrep_cluster_name=pxc-cluster
  • 当前节点的名称:wsrep_node_name=pxc-cluster-node-20
  • 验证账号:wsrep_sst_auth=”sstuser:s3cretPass”
#多个节点之间复制数据需要借助一个账号,这个就是指定复制用的账号和密码
[root@CentOS7 ~]# grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_address=gcomm://10.0.0.20,10.0.0.21,10.0.0.22 #逗号隔开,指定Galera集群中各节点地址

binlog_format=ROW    #二进制日志的格式。Galera只支持row格式的二进制日志

default_storage_engine=InnoDB    #指定默认存储引擎。Galera的复制功能只支持InnoDB

wsrep_slave_threads= 8

wsrep_log_conflicts

innodb_autoinc_lock_mode=2    #只能设置为2,设置为0或1时会无法正确处理死锁问题

wsrep_node_address=10.0.0.20     #本节点在Galera集群中的通信地址

wsrep_cluster_name=pxc-cluster    #集群名称

wsrep_node_name=pxc-cluster-node-20   #本节点在Galera集群中的名称

pxc_strict_mode=ENFORCING   #是否限制PXC启用正在试用阶段的功能,ENFORCING是默认值,表示不启用

wsrep_sst_method=xtrabackup-v2

wsrep_sst_auth="sstuser:s3cretPass"  #在SST传输时需要用到的认证凭据,格式为:"用户:密码"
  • 先启动第一个节点,第一个节点可以是这三个几点中的任意一个
  • 再启动其他节点
[root@CentOS7 ~]# systemctl start mysql@bootstrap.service

因为使用的是mysql5.7,默认安装好以后会有一个随机的临时密码放在日志里面的,所以要先从日志里面找到临时密码登录进mysql(此时只有登录权限),使用alter更改密码后才能进行相关操作。

[root@CentOS7 ~]# grep "temporary password" /var/log/mysqld.log

[root@CentOS7 ~]# mysql -uroot -p'=tWFP0oRJl8t'

mysql< alter user 'root'@'localhost' identified by 'redhat'; ##&#x4FEE;&#x6539;root&#x5BC6;&#x7801;

&#x521B;&#x5EFA;&#x590D;&#x5236;&#x8D26;&#x53F7;&#x5E76;&#x6388;&#x6743;&#xFF1A;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x91CC;&#x9762;&#x7684;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x540D;&#x548C;&#x5BC6;&#x7801;
&#x6388;&#x6743;&#xFF1A;reload lock tables&#x7B49;&#x6743;&#x9650;---&#x56E0;&#x4E3A;&#x5728;&#x590D;&#x5236;&#x8FC7;&#x7A0B;&#x4E2D;&#x4F1A;&#x4F7F;&#x7528;&#x5230;&#x8FD9;&#x4E9B;&#x6743;&#x9650;

mysql< CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cretPass';
mysql< GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';

查看集群状态的变量:
show status like ‘wsrep%’;

mysql> show status like 'wsrep%'; +----------------------------+--------------------------------------+
| Variable_name &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; | Value &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid &#xA0; &#xA0; | aad2c02e-131c-11ea-9294-b2e80a6c08c4 |
| ... &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; | ... &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; |
| wsrep_local_state &#xA0; &#xA0; &#xA0; &#xA0; | 4 &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; |
| wsrep_local_state_comment | Synced &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; |
| ... &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; | ... &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; |
| wsrep_cluster_size &#xA0; &#xA0; &#xA0; &#xA0; | 1 &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; |
| wsrep_cluster_status &#xA0; &#xA0; &#xA0; | Primary &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; |
| wsrep_connected &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; | ON &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; |
| ... &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; | ... &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; |
| wsrep_ready &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; | ON &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; |
+----------------------------+--------------------------------------+
wsrep_cluster_size&#x8868;&#x793A;&#xFF0C;&#x8BE5;Galera&#x96C6;&#x7FA4;&#x4E2D;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x8282;&#x70B9;

wsrep_local_state_comment &#x72B6;&#x6001;&#x4E3A;Synced(4)&#xFF0C;&#x8868;&#x793A;&#x6570;&#x636E;&#x5DF2;&#x540C;&#x6B65;&#x5B8C;&#x6210;(&#x56E0;&#x4E3A;&#x662F;&#x7B2C;&#x4E00;&#x4E2A;&#x5F15;&#x5BFC;&#x8282;&#x70B9;&#xFF0C;&#x65E0;&#x6570;&#x636E;&#x9700;&#x8981;&#x540C;&#x6B65;)&#x3002;
&#x5982;&#x679C;&#x72B6;&#x6001;&#x662F;Joiner, &#x610F;&#x5473;&#x7740; SST &#x6CA1;&#x6709;&#x5B8C;&#x6210;.

&#x53EA;&#x6709;&#x6240;&#x6709;&#x8282;&#x70B9;&#x72B6;&#x6001;&#x662F;Synced&#xFF0C;&#x624D;&#x53EF;&#x4EE5;&#x52A0;&#x65B0;&#x8282;&#x70B9;

wsrep_cluster_status&#x4E3A;Primary&#xFF0C;&#x4E14;&#x5DF2;&#x7ECF;&#x5B8C;&#x5168;&#x8FDE;&#x63A5;&#x5E76;&#x51C6;&#x5907;&#x597D;
[root@CentOS7 ~]# systemctl start mysql
mysql> SHOW VARIABLES LIKE 'wsrep_node_name';
+-----------------+---------------------+
| Variable_name   | Value               |
+-----------------+---------------------+
| wsrep_node_name | pxc-cluster-node-20 |
+-----------------+---------------------+
1 row in set (0.41 sec)

#&#x672C;&#x673A;&#x8282;&#x70B9;&#x5730;&#x5740;
mysql> SHOW VARIABLES LIKE 'wsrep_node_address';
+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| wsrep_node_address | 10.0.0.20 |
+--------------------+-----------+
1 row in set (0.00 sec)

mysql>  SHOW VARIABLES LIKE 'wsrep_on';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wsrep_on      | ON    |
+---------------+-------+
1 row in set (0.00 sec)

#&#x96C6;&#x7FA4;&#x8282;&#x70B9;&#x6570;&#x91CF;
mysql> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
1 row in set (0.18 sec)

  • 配置yum源
  • 安装软件
  • 更改配置文件(修改方式同上)
  • 再旧节点的配置文件中添加旧节点信息
wsrep_cluster_address=gcomm://10.0.0.20,10.0.0.21,10.0.0.22,10.0.0.23

只需要停止服务就自动少了一个节点。

Original: https://www.cnblogs.com/heyongshen/p/16741825.html
Author: 背对背依靠
Title: MySQL PXC集群的实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578562/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 博客停更通知

    楼主要忙工作了,这些工具使用相关的博客我还会维护;如有不正确的地方,欢迎大家批评指正!翻了翻这几年的内容,都是一些简单记录,且作为休闲娱乐吧。 2022年04月16日 于杭州; O…

    Linux 2023年6月14日
    094
  • 【持久层框架】- SpringData-JPA

    SpringData – JPA 😄生命不息,写作不止🔥 继续踏上学习之路,学之分享笔记👊 总有一天我也能像各位大佬一样🏆 一个有梦有戏的人 @怒放吧德德🌝分享学习心得…

    Linux 2023年6月6日
    094
  • 选择排序算法C语言实现

    选择排序C语言实现 int select_sort(int *list, int len) { int i = 0; int j = 0; int tmp = 0; int sma…

    Linux 2023年6月14日
    0107
  • Danskin’s Theorem

    Statement 1 假设 (\phi(x,z)) 为含有两个变量的连续函数: (\phi : \mathbb{R}^n \times Z \rightarrow \mathbb…

    Linux 2023年6月7日
    0106
  • linux mv 命令中断的解决办法

    背景:使用mv对服务器文件进行迁移的过程中,因为网络中断,所以迁移到一半被停止了。 现状:有一部分文件没有迁移完,但是文件夹已经存在了,重新mv提示文件夹已经存在,切已经有文件,所…

    Linux 2023年5月27日
    0133
  • SQL45 将titles_test表名修改为titles_2017

    本题链接本题省略表结构。需要用到RENAME TABLE子句,该子句可实现一或多个表名称的修改。子句语法为: RENAME TABLE tbl_name TO new_tbl_na…

    Linux 2023年6月13日
    0113
  • MySql集群之读写分离配置

    一、主从复制原理 二、环境准备 192.168.140.131 主库 192.168.140.132 从库 三、主库配置 1、修改配置文件 /etc/my.cnf #mysql服务…

    Linux 2023年6月14日
    0122
  • 树莓派4B串口测试与开发

    树莓派4B的串口,由两个增加4个,一共6个! 情况一: 缺省镜像中的配置,测试发现只启用了2个:pi@raspi4b:~ $ ls -l /dev/serial*lrwxrwxrw…

    Linux 2023年6月7日
    0114
  • k8s之部署metrics-server 转载

    Metrics Server是Kubernetes内置自动缩放管道的可扩展,高效的容器资源指标来源。 Metrics Server从Kubelet收集资源指标,并通过Metrics…

    Linux 2023年6月14日
    0100
  • Windows 10 多用户同时远程登录

    win服务器版默认是支持多用户登陆的,甚至可以在主机上用不同用户自己远程登陆自己,如window server 2016。 Win10 正常情况下是不允许用户同时远程的,即一个用户…

    Linux 2023年6月14日
    0171
  • 无法获取指向控制台的文件描述符 (couldn’t get a file descriptor referring to the console)

    背景 最近收拾东西,从一堆杂物里翻出来尘封四年多的树莓派 3B 主机来,打扫打扫灰尘,接上电源,居然还能通过之前设置好的 VNC 连上。欣慰之余,开始 clone 我的 git 项…

    Linux 2023年5月27日
    0171
  • 用python去除SQL中的注释

    我的博客在看到这个标题时候肯定有人会想,我写SQL直接在数据库工具上执行就行了啊,工具会自动识别注释的,就是不用工具,把SQL写到存储过程里,数据库也会识别注释不执行的,干嘛非要去…

    Linux 2023年6月6日
    0119
  • 记一次vcenter连接esxi失败问题排查(443端口不通)

    vecenter错误 esxi宿主机重启后,vcenter连接esxi提示超时,使用vmware客户端连接esxi也提示超时,开始介入排查。 故障排查 如何进入命令终端 运行alt…

    Linux 2023年6月14日
    0102
  • Docker部署Redis

    执行以下命令,创建并启动镜像。如果本地没镜像,会自动拉取 docker run \ -itd \ –restart=always \ –name=redis \ -p 6379…

    Linux 2023年6月7日
    0110
  • Jmeter 使用Json提取请求数据

    使用Json提取器可以提取请求响应数据 Json提取器 位置: 后置处理器-》Json提取器 使用介绍 1,变量名 变量名,其他部分引用方式: ${变量名}若提取多个变量,多个之间…

    Linux 2023年6月8日
    0121
  • docker 安装mysql5.7

    docker 安装mysql5.7 前言 MySQL 是目前最流行的关系型数据库管理系统,开发者是瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网…

    Linux 2023年6月6日
    0116
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球