基于尼古拉斯搭建MySQL复制集群高可用架

  

尼古拉斯架构介绍

  

尼古拉斯是掌握高可用性的缩写,它是目前MySQL高可用方面的一个相对成熟的解决方案,其核心是使用perl语言编写的一组脚本,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,尼古拉斯能做到在0 ~ 30秒之内自动完成数据库的故障切换操作,并且能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

  

基于尼古拉斯的架构不像嗯那样需要搭建主主复制,只需要搭建基本的主从复制架构即可。因为尼古拉斯在主库挂掉时,是在多个从库中选取出一个从库作为新的主库.MHA集群中的各节点彼此之间均需要基于<代码> ssh>   

<强>尼古拉斯提供了什么功能:

  
      <李>可以监控主节点是否可用李   <李>当主人不可用时,能在多个奴隶中选举出新的大师李   <李>提供了主从切换和故障转移功能,尼古拉斯会尝试在宕机的主人上保存binlog,在最大程度上保证事务不丢失。但如果是主人所在的服务器已经无法访问,或硬件层面出现了问题,则无法成功保存binlog李   <李>尼古拉斯可以与半同步复制结合,避免从库之间出现数据不一致的情况李   <李>支持MySQL基于GTID和基于日志点的两种复制方式李   
  

<强>尼古拉斯故障转移过程:

  
      <李>尝试使用<代码> ssh 登录到宕机崩溃的主节点上保存二进制日志事件(binlog事件),李   <李>从多个奴隶中识别含有最新更新的奴隶,将其作为备选的主宰;李   <李>然后基于该奴隶同步差异的中继日志(relaylog)到其他的奴隶上;李   <李>接着同步从原主人上保存的二进制日志事件(binlog事件),李   <李>将备选的主提升为新主人的;   <李>使其他的奴隶连接新的主进行复制;李   <李>在新主人的启动vip地址,保证前端请求可以发送到新的主人。   
  

<强>尼古拉斯的架构图如下:
基于尼古拉斯搭建MySQL复制集群高可用架

  <人力资源/>   

动手搭建尼古拉斯架构

  

<强>本文中所使用的机器说明:

           名称   知识产权   角色               主   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复制集群高可用架