当前位置: 首页 > news >正文

使用Xenon工具搭建高可用MySQL集群实战(上)

一、Xenon简介

 1.1、Xenon是什么

        Xenon是一款由青云开发团队开源的新一代 MySQL集群高可用工具。基于 Raft协议进行无中心化选主,实现主从秒级切换;基于无损半同步(Semi-Sync)机制,保障数据不丢失,实现数据强一致性。并结合MySQL(5.7 及以上版本)并行复制特性,实现Binlog并行回放,极大降低从库延迟。

 1.2、Xenon架构特点

Xenon架构特点
序号Xenon架构的特点
1Xenon基于Raft协议进行无中心化选主,并能实现秒级切换。
2数据一致性依赖于无损半同步Semi-Sync。
3

借助于配置项leader-start-command和leader-stop-command调用脚本完成故障切换;

同时,通过调用Xtrabackup可实现数据热备份和恢复。

4支持MySQL5.7及其更高内核版本。

 1.3、Xenon的工作原理

Xenon的工作原理
序号Xenon的工作原理
1

Xenon是基于Raft+Semi-Sync+GTID实现的高可用,保证大多数节点接收到数据。

而Raft基于心跳管理,如果从节点超时收不到主的心跳,会尝试发起选举,若得到超过半数(非 IDLE 节点)的选票,则会当选为主节点。

2

我们以这三节点(一主两从)Xenon 集群来简单说明工作原理。

{Leader, [GTID:{1,2,3,4,5}]

{Follower1, [GTID:{1,2,3,4,5}]

{Follower2, [GTID:{1,2,3}]

《1》当 Leader 不可用时,Follower1 和 Follower2 立即参与竞选成为主节点。

《2》Xenon校验GTID值较高的Follower成为新主节点,示例中GTID值较高的是Follower1。当GTID值最高的Follower被选举成为新主时,将结束竞选。

《3》示例中Follower1成为新主节点后,将会拒绝 Follower2 的选举。接着,自动完成主从切换。

二、MySQL基础知识

 2.1、全局事务标识符(GTID)

  2.1.1、什么是GTID

        GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号。GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识,保存在mysql数据目录下的auto.cnf文件里。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调增。

        GTID的复制方式是从MySQL5.6.5开始的。通过GTID保证了每个在主库上提交的事务在集群中有一个唯一的ID。这种方式强化了数据库的主备一致性,故障恢复以及容错能力。相比传统的复制,GTID复制对于运维更加友好,根据GTID可以知道事务最初是在哪个实例上提交的,产生多少事物等,都可以非常直接的标识出来。

  2.1.2、GTID的工作原理

GTID的工作原理
序号GTID的工作原理
1master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
2slave端的I/O线程将变更的binlog,写入到本地的relay log中。
3

sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录:

《1》若有记录,说明该GTID的事务已经执行,slave会忽略。

《2》若没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。

 2.2、MySQL主从复制的三种类型

高可用MySQL的整体解决方案、体系化原理和指导思路https://coffeemilk.blog.csdn.net/article/details/152078348

  2.2.1、异步复制

异步复制

在mysql异步复制的情况下,Master Server将自己的binlog通过复制线程传输出去以后,Mysql Master Sever就自动返回数据给客户端,而不管slave上是否接受到了这个二进制日志。那么,当master宕机后,如果master不能恢复,此时,只能用slave代替master,但slave处于同步落后的状态,就会导致数据丢失。

优点缺点
复制的性能最好master挂掉后,slave可能会丢失事务

  2.2.2、全同步复制

全同步复制
在全同步复制中,master将自己的binlog写入到bin-log文件并且sync,然后向存储引擎提交事务,然后一直等待ACK,同时要求所有slave接收到binlog,写入relay-log后,并完成日志回放,同时返回ACK确认信息,master在接收到所有从库ACK确认信息后,才将结果返回给客户端。
优点缺点
数据不会丢失会阻塞master session,性能太差,非常依赖网络

  2.2.3、半同步复制

半同步复制,又分为两种,分别是【传统半同步复制】和【无损半同步复制】。

   2.2.3.1、传统半同步复制
传统半同步复制

在传统半同步复制的架构下,master将自己的binlog写入到bin-log文件并且sync,且向存储引擎提交事务,然后一直等待ACK。当至少一个slave接收到binlog后,写入relay-log并返回ACK确认信息。master在接收到从库任意一个ACK确认信息后,就将结果返回给客户端。【由此可知,传统半同步复制对于客户的请求响应稍微慢点,但是它可以保证二进制日志的完整性】。

传统半同步的特点:

        由于master是在三段提交的最后commit阶段完成后才等待,所以master的其他session是可以看到这个提交事务的,所以这时候master上的数据和slave不一致,master crash后,slave有数据丢失。

参数rpl_semi_sync_master_wait_point在MySQL的半同步复制中,控制master在哪个阶段等待来自slave的ACK确认。在MySQL5.7中,该参数主要有两个值:after_commit和after_sync。
《1》after_commit:这其实就是传统的半同步复制,master将自己的binlog写入到bin-log文件并且sync,且向存储引擎提交事务,然后一直等待ACK。当至少一个slave接收到binlog后,写入relay-log并返回ACK确认信息。master在接收到从库任意一个ACK确认信息后,就将结果返回给客户端。
《2》after_sync:这其实就是后面马上要讲到的无损半同步复制,master将自己的binlog写入到binlog文件并且sync,之后会进入等待ACK,当至少一个slave接收到binlog之后,写入relay-log并返回ACK确认信息。master接收到从库ACK确认信息之后,向存储引擎提交事务,最终返回给客户端。
#开启传统半同步复制,需要设置如下几个参数:#是否在master上开启半同步,1表示开启,0是关闭,默认关闭。
rpl_semi_sync_master_enabled=1
#是否在slave上开启半同步,1表示开启,0是关闭,默认关闭。
rpl_semi_sync_slave_enabled=1
#切换复制的超时时间,单位是毫秒,这里设置超时5s。
rpl_semi_sync_master_timeout=5000
#等待的point,有after_commit和after_sync可选。
#after_sync表示无损半同步复制,after_commit表示传统半同步复制,默认值为after_sync。
rpl_semi_sync_master_wait_point=after_commit
优点缺点
会有数据丢失风险,但很低。会阻塞master session,性能稍差,非常依赖网络。

   2.2.3.2、无损半同步复制
无损半同步复制
master将自己的binlog写入到binlog文件并且sync,之后会进入等待ACK,当至少一个slave接收到binlog之后,写入relay-log并返回ACK确认信息。master接收到从库ACK确认信息之后,向存储引擎提交事务,最终返回给客户端。

重点:

        由于master是在三段提交的第二阶段sync binlog完成后才等待, 所以master的其他session是看不见这个提交事务的,所以这时候master上的数据和slave一致,master crash后,slave没有丢失数据。

#要开启无损半同步复制,需要设置如下几个参数:plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000
优点缺点
数据零丢失,性能好会阻塞master session,非常依赖网络

三、使用Xenon工具搭建高可用MySQL集群

 3.1、使用Xenon工具实现MySQL高可用环境说明

使用Xenon工具实现MySQL高可用环境说明

系统环境说明

《1》采用三台物理机或虚拟机,都使用OpenEuler2203LTS或(RHEL9/Almalinux9.1)及其更高系统。

《2》MySQL版本:二进制安装的8.4.6。

《3》xtrabackup:8.4.6版本。

序号IP地址端口号主机名角色
1192.168.1.3613336xenon1node节点
2192.168.1.3713336xenon2node节点
3192.168.1.3813336xenon3node节点
4192.168.1.22713336VIP
注意:这里的vip地址是跟随xenon集群启动的,默认vip会绑定在xenon选举出来的master节点上,程序要连接mysql的话,连接使用的就是这个vip地址。

 3.2、操作环境的相关配置

  3.2.1、创建MySQL用户和配置主机名称

#在三台mysql节点服务器上都需要创建【mysql】用户并设置相同密码(密码需要记住后续在xenon工具配置使用【如密码设置为:qwas%1357】)
useradd mysqlpasswd mysql

#在三台mysql节点服务器上都需要配置主机的hosts,方便后续通过域名解析#方法一:直接给主机配置文件【/etc/hosts】追加这三台服务器的IP和名称内容(注意:ip地址需要根据自己的实际情况修改)
echo -e "192.168.1.36\txenon1\n192.168.1.37\txenon2\n192.168.1.38\txenon3\n" >> /etc/hosts#方法二:编辑主机配置文件【/etc/hosts】(注意:ip地址需要根据自己的实际情况修改)
vi /etc/hosts192.168.1.36    xenon1
192.168.1.37    xenon2
192.168.1.38    xenon3

查看和修改Linux的主机名称https://blog.csdn.net/xiaochenXIHUA/article/details/152363961?spm=1001.2014.3001.5501

#修改三台MySQL服务器的主机名称#1-修改第一台MySQL服务器主机名称为 xenon1
hostnamectl set-hostname xenon1
exec bash#2-修改第二台MySQL服务器主机名称为 xenon2
hostnamectl set-hostname xenon2
exec bash#3-修改第三台MySQL服务器主机名称为 xenon3
hostnamectl set-hostname xenon3
exec bash

  3.2.2、配置三台MySQL服务器互信

        注意:配置ssh互信,是指配置三个节点服务器之间的免密码登录。这个免密码登录,是在mysql用户上执行的配置,因为后面所有对xenon的操作,都是在mysql用户下完成的。

#配置三台MySQL服务器互信#1-配置xenon1节点互信
su - mysql
ssh-keygen -t ed25519 -C "ck@163.com"
cd /home/mysql/.ssh/
ssh-copy-id -i id_ed25519.pub -p 22 mysql@xenon2
ssh-copy-id -i id_ed25519.pub -p 22 mysql@xenon3#2-配置xenon2节点互信
su - mysql
ssh-keygen -t ed25519 -C "ck@163.com"
cd /home/mysql/.ssh/
ssh-copy-id -i id_ed25519.pub -p 22 mysql@xenon1
ssh-copy-id -i id_ed25519.pub -p 22 mysql@xenon3#3-配置xenon3节点互信
su - mysql
ssh-keygen -t ed25519 -C "ck@163.com"
cd /home/mysql/.ssh/
ssh-copy-id -i id_ed25519.pub -p 22 mysql@xenon1
ssh-copy-id -i id_ed25519.pub -p 22 mysql@xenon2

实现Linux的ssh免密登录实操保姆级教程https://blog.csdn.net/xiaochenXIHUA/article/details/152375722?spm=1001.2014.3001.5501

 3.3、配置mysql用户sudo权限

        由于xenon在执行master、slave故障切换的时候,需要将vip地址也切换过去,而xenon是运行在mysql用户下的,所以需要给mysql用户做一个授权,让这个普通用户能够执行ip这个linux命令。

#1-配置mysql用户sudo权限(注意需要给三台MySQL服务器都执行)#方法一:修改/etc/sudoers文件添加mysql用户无密码操作ip权限
vi /etc/sudoers
mysql    ALL=(ALL)      NOPASSWD: /usr/sbin/ip#方法二:直接使用echo命令添加到/etc/sudoers文件末尾
echo -e "mysql\tALL=(ALL)\tNOPASSWD: /usr/sbin/ip" >> /etc/sudoers#2-验证给mysql用户设置的sudo无密码操作ip权限(若执行如下命令后有本机ip地址信息输出,表示配置正确)
su - mysql -c "sudo ip a"

Linux的用户和用户组与权限解析、环境变量说明与配置、sudo配置解析和使用https://coffeemilk.blog.csdn.net/article/details/149323633

http://www.dtcms.com/a/455251.html

相关文章:

  • MySQL包安装 -- Debian系列(离线DEB包安装MySQL)
  • 有哪些网站建设的方法做母婴网站赚钱
  • 想把公司的外部网站替换东营建设信息网(东营市住房和城乡建设局)
  • 做旅游广告在哪个网站做效果好国外素材网站
  • 网站设计怎么收费网站空间代理加盟
  • 网站制作现状解决方案域名反查网站
  • 河北建设厅官网站首页北京服装设计公司前十名
  • 做网站是什么软件seo快速排名利器
  • 主要网站 开发语言教做衣服网站
  • 深圳网站制作07551python做网站的书
  • 完整网站开发看什么书wordpress做成公众号
  • 合肥企业建站系统模板免费黄页营销网站
  • 网站的ftp怎么登陆做房地产一级市场的看什么网站
  • 外贸企业网站系统源码代前导页的网站
  • 网站外部链接如何建设网站建设与推广方案
  • 新洲建设投标网站网站建设国标行业分类
  • 平安保险网站官方网址做健身网站步骤
  • 怎么给一个网站做seo智联招聘网站怎么做微招聘
  • 网页模板网站互联网平台有哪些
  • 可以免费下源码的网站电商网站首页图片
  • 做网站网站需要注意什么wordpress版本文件
  • C++基础语法详解:从命名空间到内联函数
  • 广东网站建设网站网站怎么做购物车
  • 最专业的做网站公司哪家好易企秀怎么制作
  • 响应式网站有什么弊端seo怎么收费的
  • wordpress 资源站模板wordpress文章图片全屏浏览
  • 华为网站推广策略前端移动端开发
  • 做门窗网站中企动力官方网站
  • 《SaaS多租户实战指南:从灰度发布到故障容错的全链路架构设计》
  • 网站登记表58同城类型网站制作