当前位置:   article > 正文

数据库:MHA实现Mysql数据库高可用_mysqlmha高可用

mysqlmha高可用

一、MHA

1、MHA原理

 ①MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃的master保存二进制日志事件(binlog events)

②识别含有最新更新的slave

③应用差异的中继日志(relay log)到其他的slave

④应用从master保存的二进制日志事件(binlog events)

⑤提升一个slave为新的master

⑥使其他的slave连接新的master进行复制

2、MHA工具包

MHA软件由两部分组成,Manager工具包和Node工具包

①Manager工具包主要包括以下几个工具:

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_stop  --conf=app1.cnf 停止MHA
masterha_secondary_check 两个或多个网络线路检查MySQL主服务器的可用

②Node工具包:这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

save_binary_logs     #保存和复制master的二进制日志
apply_diff_relay_logs   #识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog   #去除不必要的ROLLBACK事件(MHA已不再使用此工具)
purge_relay_logs #清除中继日志(不会阻塞SQL线程)

③MHA配置文件:

global配置,为各application提供默认配置,默认文件路径 /etc/masterha_default.cnf
application配置:为每个主从复制集群

3、MHA实现mysql高可用实战

①实验环境:

MHA服务器:192.168.30.14
master:   192.168.30.11
slave1:   192.168.30.12
slave2:   192.168.30.13

②首先将MHA客户端安装包(node包)、服务器安装包(manger包)及master_ip_failover脚本上传到主MHA服务器,master和slave服务器只需要上传客户端安装包(node包),上传到root用户家目录下。本人博客资源中(MHA高可用实战部署包)

③安装MHA

  1. MHA:
  2. yum install epel-release.noarch -y
  3. #有依赖性用yum安装需要先安装epel源
  4. yum -y install mha4mysql-*.rpm
  5. #安装MHA
  6. Master和2个slave:
  7. yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y
  8. #安装MHA

④MHA配置免密登录建立mha 文件夹 和配置文件

  1. ssh-keygen
  2. #生成秘钥,4个回车
  3. ssh-copy-id 127.0.0.1
  4. #自己和自己实现免密钥登录
  5. rsync -a .ssh 192.168.30.11:/root/
  6. rsync -a .ssh 192.168.30.12:/root/
  7. rsync -a .ssh 192.168.30.13:/root/
  8. #将秘钥传给所有服务器,-a表示保留权限,rsync可以理解为scp
  9. mkdir /etc/mastermha
  10. #创建mha文件夹
  11. vim /etc/mastermha/app1.cnf
  12. #配置app1.cnf文件,内容全部删除复制以下内容
  13. [server default]
  14. user=mhauser
  15. password=Admin@123
  16. manager_workdir=/data/mastermha/app1/
  17. manager_log=/data/mastermha/app1/manager.log
  18. remote_workdir=/data/mastermha/app1/
  19. ssh_user=root
  20. repl_user=test
  21. repl_password=Admin@123
  22. ping_interval=1
  23. master_ip_failover_script=/usr/local/bin/master_ip_failover
  24. #report_script=/usr/local/bin/sendmail.sh 可以不加
  25. check_repl_delay=0
  26. master_binlog_dir=/data/mysql/
  27. [server1]
  28. hostname=192.168.30.11
  29. candidate_master=1
  30. [server2]
  31. hostname=192.168.30.12
  32. candidate_master=1
  33. [server3]
  34. hostname=192.168.30.13
  35. #注意将3个server改为自己的地址,1为主2位备用主,3为从。保存退出
  36. vim master_ip_failover
  37. #修改mha脚本,只需要将拷贝的脚本此2行修改即可,其他无须操作
  38. my $vip = '192.168.30.188/24';
  39. #设置自己网段的Virtual IP
  40. my $gateway = '192.168.30.2';
  41. #自己网段的网关Gateway IP 保存退出
  42. mv master_ip_failover /usr/local/bin/
  43. chmod +x /usr/local/bin/master_ip_failover
  44. #脚本文件文件剪切到/usr/local/bin/目录下并添加可执行权限使其可以执行
  45. ifconfig ens33:1 192.168.30.188/24
  46. #MHA配置虚拟ip,主挂掉后虚拟ip到备主上

⑤准备主从复制环境

  1. Master执行:
  2. vim /etc/my.cnf
  3. #[mysqld]此行下添加内容,开启主从复制和二进制日志
  4. server_id=100
  5. log-bin=/data/mysql/mysql-bin
  6. skip_name_resolve=1
  7. general_log
  8. #添加完毕保存退出
  9. mkdir /data/mysql/ -p
  10. chown mysql.mysql /data/ -R
  11. systemctl restart mysqld
  12. #创建二进制日志保存路径文件,修改文件夹权限并重启mysql服务
  13. mysql -uroot -pAdmin@123
  14. #登录数据库,注意将数据库密码设置为Admin@123,否则实验可能有问题,如何设置查看前面章节
  15. show master status;
  16. #查看记录二进制日志位置,一会从配置使用
  17. grant replication slave on *.* to test@'192.168.30.%' identified by 'Admin@123';
  18. #建立复制用户
  19. grant all on *.* to mhauser@'192.168.30.%' identified by 'Admin@123';
  20. #建立mha管理账户
  21. 2个slave执行:
  22. vim /etc/my.cnf
  23. #[mysqld]此行下添加内容,开启主从复制和二进制日志
  24. server_id=102
  25. log-bin=/data/mysql/mysql-bin
  26. relay-log=relay-log-bin
  27. relay-log-index=slave-relay-bin.index
  28. skip_name_resolve=1
  29. general_log
  30. mkdir /data/mysql/ -p
  31. chown mysql.mysql /data/ -R
  32. systemctl restart mysqld
  33. #创建二进制日志保存路径文件,修改文件夹权限并重启mysql服务
  34. mysql -uroot -pAdmin@123
  35. #登录数据库,注意将数据库密码设置为Admin@123,否则实验可能有问题,如何设置查看前面章节
  36. CHANGE MASTER TO
  37. MASTER_HOST='192.168.30.11',
  38. MASTER_USER='test',
  39. MASTER_PASSWORD='Admin@123',
  40. MASTER_PORT=3306,
  41. MASTER_LOG_FILE='mysql-bin.000001',
  42. MASTER_LOG_POS=154;
  43. #配置master信息
  44. start slave
  45. #开启主从复制
  46. show slave status;
  47. #查看配置是否成功

⑥MHA服务器上检查 mha 环境并启动mha

  1. masterha_check_ssh --conf=/etc/mastermha/app1.cnf
  2. #检查mha的ssh免密登录环境
  3. All SSH connection tests passed successfully
  4. #结尾行出现此信息表示无问题
  5. masterha_check_repl --conf=/etc/mastermha/app1.cnf
  6. #检查mha主从环境
  7. MySQL Replication Health is OK.
  8. #结尾行出现此信息表示无问题
  9. masterha_check_status --conf=/etc/mastermha/app1.cnf
  10. #查看mha状态,默认是停止状态stop
  11. masterha_manager --conf=/etc/mastermha/app1.cnf
  12. #开启mha,需要等待较长时间启动成功,此过程为前台运行,需要重新开一个窗口去查看状态即可
  13. masterha_check_status --conf=/etc/mastermha/app1.cnf
  14. #重新查看状态是running

⑦关闭master的mysql查看是否备1成为主且备2的slave信息变为备2的且备1的slave信息为空

  1. master:
  2. systemctl stop mysqld
  3. #主关闭mysql
  4. slave1:
  5. mysql -uroot -p'Admin@123'
  6. #登录数据库
  7. show slave status;
  8. #slave信息为空
  9. slave2:
  10. mysql -uroot -p'Admin@123'
  11. #登录数据库
  12. show slave status;
  13. #slave信息中Master_Host:变为slave1的ip地址
  14. ##注意就算重新开启master的数据库也不会成为主,需要手动添加为slave。
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号