尼古拉斯架构介绍
尼古拉斯是掌握高可用性的缩写,它是目前MySQL高可用方面的一个相对成熟的解决方案,其核心是使用perl语言编写的一组脚本,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,尼古拉斯能做到在0 ~ 30秒之内自动完成数据库的故障切换操作,并且能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
基于尼古拉斯的架构不像嗯那样需要搭建主主复制,只需要搭建基本的主从复制架构即可。因为尼古拉斯在主库挂掉时,是在多个从库中选取出一个从库作为新的主库.MHA集群中的各节点彼此之间均需要基于<代码> ssh> 代码互信通信、以实现远程控制及数据管理功能。
<强>尼古拉斯提供了什么功能:强>
-
<李>可以监控主节点是否可用李>
<李>当主人不可用时,能在多个奴隶中选举出新的大师李>
<李>提供了主从切换和故障转移功能,尼古拉斯会尝试在宕机的主人上保存binlog,在最大程度上保证事务不丢失。但如果是主人所在的服务器已经无法访问,或硬件层面出现了问题,则无法成功保存binlog李>
<李>尼古拉斯可以与半同步复制结合,避免从库之间出现数据不一致的情况李>
<李>支持MySQL基于GTID和基于日志点的两种复制方式李>
<强>尼古拉斯故障转移过程:强>
-
<李>尝试使用<代码> ssh 代码>登录到宕机崩溃的主节点上保存二进制日志事件(binlog事件),李>
<李>从多个奴隶中识别含有最新更新的奴隶,将其作为备选的主宰;李>
<李>然后基于该奴隶同步差异的中继日志(relaylog)到其他的奴隶上;李>
<李>接着同步从原主人上保存的二进制日志事件(binlog事件),李>
<李>将备选的主提升为新主人的;李>
<李>使其他的奴隶连接新的主进行复制;李>
<李>在新主人的启动vip地址,保证前端请求可以发送到新的主人。李>
<强>尼古拉斯的架构图如下:强>
动手搭建尼古拉斯架构
<强>本文中所使用的机器说明:强>
名称 知识产权 角色 主 192.168.190.151 主库 slave-01 192.168.190.152 从库 slave-02 192.168.190.154 从库 经理 192.168.190.153 集群管理节点(尼古拉斯)<强>环境版本说明:强>
-
<李>操作系统版本:CentOS 7李>
<李> MySQL版本:8.0.19李>
<李>尼古拉斯版本:0.58 李>
<强>另外的说明:强>
-
<李>会来了解嗯架构的小伙伴们想必都已经掌握了MySQL的安装方式,而且介绍MySQL的安装也有很多文章,所以本文为了减少不必要的篇幅就不演示MySQL的安装了,文中所用到的机器都已经提前安装好了MySQL。李>
配置主从节点的配置文件
在1日所有主从节点上使用如下语句创建用于主从复制的MySQL用户,因为每个从库都有可能会被选举为主库,所以都需要拥有用于复制的用户:
<代码类=" sql语言">创建用户的repl @‘%’等同于‘Abc_123456 mysql_native_password; 格兰特复制奴隶> root@master ~ # vim/etc/my.cnf (mysqld) #设置当前节点的id server_id=101 #开启binlog,并指定binlog文件的名称 log_bin=mysql_bin #开启relay_log,并指定relay_log文件的名称 relay_log=relay_bin #将relaylog的同步内容记录到binlog中 log_slave_updates=对 #开启GTID复制模式 gtid_mode=对 enforce_gtid_consistency=1 代码>
3,在<代码> slave-01> 代码的配置文件中也是添加一样配置,只不过<代码> server_id> 代码不一样:
<代码类=" language-bash "> root@slave-01 ~ # vim/etc/my.cnf (mysqld) server_id=102 log_bin=mysql_bin relay_log=relay_bin log_slave_updates=对 gtid_mode=对 enforce_gtid_consistency=1 代码>
4,接着是配置<代码> slave-02 代码>:
<代码类=" language-bash "> root@slave-02 ~ # vim/etc/my.cnf (mysqld) server_id=103 log_bin=mysql_bin relay_log=relay_bin log_slave_updates=对 gtid_mode=对 enforce_gtid_consistency=1基于尼古拉斯搭建MySQL复制集群高可用架