-★出爺;3 发表于 2018-9-28 07:01:31

Mysql MHA高可用集群架构

  记得之前发过一篇文章,名字叫《浅析MySQL高可用架构》,之后一直有很多小伙伴在公众号后台或其它渠道问我,何时有相关的深入配置管理文章出来,因此,民工哥,也将对前面的各类架构逐一进行整理,然后发布出来。那么今天将来发布的MHA的架构整体规划与配置操作。
  简单介绍
  MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
  MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。
  目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器
  布署规划
  系统信息
  

# cat /etc/redhat-release
  
CentOS>  
# uname -r
  
2.6.32-642.el6.x86_64
  

  数据库
  mysql57-community-release-el6-9.noarch.rpm
  环境规划
  Db250    集群管理节点192.168.4.250
  Db251    主库   192.168.4.251
  Db253    从库(备主库)192.168.4.253
  Db254    从库 192.168.4.254
  架构图如下

  配置SSH免密登陆与hosts文件
  配置hosts文件
  

cat>>/etc/hosts  --------------以上配置三台数据库服务器都需要配置----------------
  配置主从同步
  Db251与db253的配置文件都需要配置开启binlog
  server_id=251
  log_bin=master-bin
  log_bin_index=master-bin.index
  server_id=253
  log_bin=slave-bin
  log_bin_index=slave-bin.index
  log-slave-updates
  relay_log_index=slave-relay-bin.index
  relay_log=slave-relay-bin
  server_id=254
  relay_log_index=slave-relay-bin.index
  relay_log=slave-relay-bin
  同步主库数据到从库,主从同步操作请参考之前的文章
  检查主从同步状态
  mysql -uroot -p123456 -e "show slave status\G" |egrep "Slave_IO_Running|Slave_SQL_Running"

  所有数据库节点配置MHA管理用户与权限

  grant all on . to mha@'192.168.4.%'>  至此所有基础环境组建完成
  安装配置MHA
  https://downloads.mariadb.com/MHA/下载地址
  整个MHA服务安装过程如下:
  安装依赖包
  

yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch -y  
yum install perl-Parallel-ForkManager perl-Time-HiRes –y
  

  管理节点安装
  

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm  
yum localinstall -y mha4mysql-manager-0.52-0.noarch.rpm
  
yum localinstall -y mha4mysql-node-0.52-0.noarch.rpm
  

  其它节点安装
  yum localinstall -y mha4mysql-node-0.52-0.noarch.rpm
  安装过程中可能会报错,根据提示去解决
  配置过程如下:
  

Mkdir /mha  
# vim /etc/masterha_default.cnf
  

  
#刚才授权的mysql管理用戶名
  
user=mha
  
password=123456
  
manager_workdir=/mha
  
manager_log=/mha/manager.log
  
remote_workdir=/mha
  

  
#ssh免密钥登录的帐号名
  
ssh_user=root
  
#mysql复制帐号,用来在主从机之间同步二进制日志等
  
repl_user=slave
  
repl_password=123456
  

  
#ping间隔,用来检测master是否正常
  
ping_interval= 1
  

  

  
hostname=db251
  
master_binlog_dir=/var/lib/mysql
  
#候选master挂掉时候优先让它顶
  
candidate_master=1
  

  

  
hostname=db253
  
master_binlog_dir=/var/lib/mysql/
  
candidate_master=1
  

  

  
hostname=db254
  
master_binlog_dir=/var/lib/mysql/
  
no_master=1
  
#不能成为master
  


  masterha_check_ssh         检查MHA的SSH配置状况
  masterha_check_repl 检查MySQL复制状况
  masterha_manger            启动MHA
  masterha_check_status      检测当前MHA运行状态
  masterha_master_monitor    检测master是否宕机
  masterha_master_switch   控制故障转移(自动或者手动)
  masterha_conf_host         添加或删除配置的server信息
  验证操作
  

# masterha_check_ssh --conf=/etc/masterha_default.cnf  
检查主从同步
  
masterha_check_repl --conf=/etc/masterha_default.cnf
  



  启动MHA服务
  

# masterha_manager --conf=/etc/masterha_default.cnf &  
2035
  
# Fri Sep1 01:52:25 2017 - Reading default configuratoins from /etc/masterha_default.cnf..
  
Fri Sep1 01:52:25 2017 - Reading application default configurations from /etc/masterha_default.cnf..
  
Fri Sep1 01:52:25 2017 - Reading server configurations from /etc/masterha_default.cnf..
  

  查看启动日志


  好吧,到此MHA高可用总算成功了,也算可以的哈!
  接下来模拟下故障,将db251关闭
  

# /etc/init.d/mysqld stop  
Stopping mysqld:            
  

  查看日志





  发现新的主库已切换到db253这台服务器上了,接下来查看下主从同步的情况


  当原来的主服务器故障修复后,需要手工将原主变成从
  

# grep -i "All other slaves should start" /mha/manager.log  
Fri Sep1 01:59:05 2017 - All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='db253 or 192.168.4.253', MASTER_PORT=3306, MASTER_LOG_FILE='slave-bin.000003', MASTER_LOG_POS=760546, MASTER_USER='slave', MASTER_PASSWORD='xxx';
  

  因此此时我在原主库上执行操作将修复的主库改为从库



  接下来在新的主库上写入数据来测试同步情况





页: [1]
查看完整版本: Mysql MHA高可用集群架构