• 售前

  • 售后

热门帖子
入门百科

MySQL高可用架构之MHA架构全解

[复制链接]
落败的青春阳落s 显示全部楼层 发表于 2021-8-13 14:13:53 |阅读模式 打印 上一主题 下一主题
目录


  • 一、介绍
  • 二、构成
  • 三、工作过程
  • 四、架构
  • 五、实例展示
MHA(Master HA)是一款开源的 MySQL 的高可用步伐,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来制止一致性方面的题目。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的比力成熟的 MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的包管数据一致性。现在淘宝也正在开发相似产物 TMHA, 现在已支持一主一从。



一、介绍

MHA(Master High Availability)现在在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在举行故障切换的过程中,MHA能在最大程度上包管数据的一致性,以到达真正意义上的高可用。

二、构成

两部门构成:MHA Manager(管理节点)和MHA Node(数据节点)。
当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将全部其他的slave重新指向新的master。整个故障转移过程对应用步伐完全透明。

三、工作过程

在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的包管数据的不丢失,但这并不总是可行的。比方,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只举行故障转移而丢失了最新的数据。利用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制联合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他全部的slave服务器上,因此可以包管全部节点的数据一致性。

四、架构

搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库。

(1)从宕机崩溃的master保存二进制日志事件(binlog events);
(2)辨认含有最新更新的slave;
(3)应用差异的中继日志(relay log)到其他的slave;
(4)应用从master保存的二进制日志事件(binlog events);
(5)提升一个slave为新的master;
(6)使其他的slave毗连新的master举行复制;
Manager工具包重要功能
  1. masterha_check_ssh              检查MHA的SSH配置状况
  2. masterha_check_repl             检查MySQL复制状况
  3. masterha_manger                 启动MHA
  4. masterha_check_status           检测当前MHA运行状态
  5. masterha_master_monitor         检测master是否宕机
  6. masterha_master_switch          控制故障转移(自动或者手动)
  7. masterha_conf_host              添加或删除配置的server信息
复制代码
Node工具包功能
  1. save_binary_logs                保存和复制master的二进制日志
  2. apply_diff_relay_logs           识别差异的中继日志事件并将其差异的事件应用于其他的slave
  3. filter_mysqlbinlog              去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
  4. purge_relay_logs                清除中继日志(不会阻塞SQL线程)
复制代码
五、实例展示

部署MHA准备工作:
  1. 角色                    ip地址          主机名          server_id                  类型
  2. Monitor host            192.168.0.20    server01            -                      监控复制组
  3. Master                  192.168.0.50    server02            1                      写入
  4. Candicate master        192.168.0.60    server03            2                      读
  5. Slave                   192.168.0.70    server04            3                      读
复制代码
master对外提供写服务,备选master(现实的slave,主机名server03)提供读服务,slave也提供相关的读服务,一旦master宕机,将会把备选master提升为新的master,slave指向新的master
  1. ## 1.关闭防火墙
  2. systemctl stop firewalld
  3. systemctl disable firewalld
  4. setenforce 0
  5. ## 2.设置主机名
  6. hostnamectl set-hostname Mysql1
  7. hostnamectl set-hostname Mysql2
  8. hostnamectl set-hostname Mysql3
  9. ## 3.节点设置:Master、slave1、slave2配置文件/etc/my.cnf
  10. ## a、Master 节点##
  11. vim /etc/my.cnf
  12. [mysqld]
  13. server-id = 1
  14. log_bin = master-bin
  15. log-slave-updates = true
  16. systemctl restart mysqld
  17. ##Slave1、Slave2 节点##
  18. vim /etc/my.cnf
  19. server-id = 2                                                 #三台服务器的 server-id 不能一样
  20. log_bin = master-bin
  21. relay-log = relay-log-bin
  22. relay-log-index = slave-relay-bin.index
  23. systemctl restart mysqld
  24. ## 4.创建软链接
  25. ln -s /usr/local/mysql/bin/mysql /usr/sbin/
  26. ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
  27. ## 5.一主两从:所有节点进行mysql授权
  28. mysql -uroot -p
  29. grant replication slave on *.* to 'myslave'@'192.168.80.%' identified by '123';                #从数据库同步使用
  30. grant all privileges on *.* to 'mha'@'192.168.80.%' identified by 'manager';                #manager 使用
  31. grant all privileges on *.* to 'mha'@'Mysql1' identified by 'manager';                                #防止从库通过主机名连接不上主库
  32. grant all privileges on *.* to 'mha'@'Mysql2' identified by 'manager';
  33. grant all privileges on *.* to 'mha'@'Mysql3' identified by 'manager';
复制代码
  1. ## 主master上可看到二进制文件,同步点
  2. show master status;
  3. +-------------------+----------+--------------+------------------+-------------------+
  4. | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  5. +-------------------+----------+--------------+------------------+-------------------+
  6. | master-bin.000002 |     1745 |              |                  |                   |
  7. +-------------------+----------+--------------+------------------+-------------------+
复制代码
  1. ## slave1、slave2节点数据同步结果
  2. show slave status\G               
  3. //确保 IO 和 SQL 线程都是 Yes,代表同步正常。
  4. Slave_IO_Running: Yes
  5. Slave_SQL_Running: Yes
复制代码
  1. # slave1、slave2设置为只读模式
  2. set global read_only=1;
复制代码
  1. # 创建数据库测试
  2. ##在 Master 主库插入条数据,测试是否同步##
  3. create database test_db;
  4. use test_db;
  5. create table test(id int);
  6. insert into test(id) values (1);
复制代码
  1. # 从数据库查看
  2. select * from test_db.test;
  3. +------+
  4. | id   |
  5. +------+
  6. |    1 |
  7. +------+
复制代码
安装 MHA 软件
(1)全部服务器上都安装 MHA 依赖的环境,起首安装 epel 源
  1. yum install epel-release --nogpgcheck -y
  2. yum install -y perl-DBD-MySQL \
  3. perl-Config-Tiny \
  4. perl-Log-Dispatch \
  5. perl-Parallel-ForkManager \
  6. perl-ExtUtils-CBuilder \
  7. perl-ExtUtils-MakeMaker \
  8. perl-CPAN
复制代码
(2)安装 MHA 软件包,先在全部服务器上必须先安装 node 组件
对于每个操作系统版本不一样,这里 CentOS7.4 必须选择 0.57 版本。
在全部服务器上必须先安装 node 组件,末了在 MHA-manager 节点上安装 manager 组件,因为 manager 依赖 node 组件。
  1. cd /opt
  2. tar zxvf mha4mysql-node-0.57.tar.gz
  3. cd mha4mysql-node-0.57
  4. perl Makefile.PL
  5. make && make install
复制代码
(3)在 MHA manager 节点上安装 manager 组件
  1. cd /opt
  2. tar zxvf mha4mysql-manager-0.57.tar.gz
  3. cd mha4mysql-manager-0.57
  4. perl Makefile.PL
  5. make && make install
复制代码
7.在全部服务器上设置无暗码认证
(1)在 manager 节点上设置到全部数据库节点的无暗码认证
  1. -----------------------------------------------------------------------------------------
  2. #manager 组件安装后在/usr/local/bin 下面会生成几个工具,主要包括以下几个:
  3. masterha_check_ssh                                 检查 MHA 的 SSH 配置状况
  4. masterha_check_repl                         检查 MySQL 复制状况
  5. masterha_manger                                 启动 manager的脚本
  6. masterha_check_status                         检测当前 MHA 运行状态
  7. masterha_master_monitor                 检测 master 是否宕机
  8. masterha_master_switch                         控制故障转移(自动或者手动)
  9. masterha_conf_host                                 添加或删除配置的 server 信息
  10. masterha_stop                                          关闭manager
  11. #node 组件安装后也会在/usr/local/bin 下面会生成几个脚本(这些工具通常由 MHAManager 的脚本触发,无需人为操作)主要如下:
  12. save_binary_logs                                 保存和复制 master 的二进制日志
  13. apply_diff_relay_logs                         识别差异的中继日志事件并将其差异的事件应用于其他的 slave
  14. filter_mysqlbinlog                                 去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)
  15. purge_relay_logs                                 清除中继日志(不会阻塞 SQL 线程)
复制代码
(2)在 mysql1 上设置到数据库节点 mysql2 和 mysql3 的无暗码认证
  1. ssh-keygen -t rsa                                 #一路按回车键
  2. ssh-copy-id 192.168.80.10
  3. ssh-copy-id 192.168.80.20
  4. ssh-copy-id 192.168.80.30
复制代码
(3)在 mysql2 上设置到数据库节点 mysql1 和 mysql3 的无暗码认证
  1. ssh-keygen -t rsa
  2. ssh-copy-id 192.168.80.20
  3. ssh-copy-id 192.168.80.30
复制代码
(4)在 mysql3 上设置到数据库节点 mysql1 和 mysql2 的无暗码认证
  1. ssh-keygen -t rsa
  2. ssh-copy-id 192.168.80.10
  3. ssh-copy-id 192.168.80.30
复制代码
8.在 manager 节点上设置 MHA
(1)在 manager 节点上复制相关脚本到/usr/local/bin 目录
  1. cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin
  2. //拷贝后会有四个执行文件
  3. ll /usr/local/bin/scripts/
  4. ----------------------------------------------------------------------------------------------------------
  5. master_ip_failover                  #自动切换时 VIP 管理的脚本
  6. master_ip_online_change         #在线切换时 vip 的管理
  7. power_manager                                 #故障发生后关闭主机的脚本
  8. send_report                                 #因故障切换后发送报警的脚本
复制代码
(2)复制上述的自动切换时 VIP 管理的脚本到 /usr/local/bin 目录,这里利用master_ip_failover脚本来管理 VIP 和故障切换
  1. cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
复制代码
(3)修改内容如下:(删除原有内容,直接复制并修改vip相关参数)
  1. vim /usr/local/bin/master_ip_failover
  2. #!/usr/bin/env perl
  3. use strict;
  4. use warnings FATAL => 'all';
  5. use Getopt::Long;
  6. my (
  7. $command, $ssh_user, $orig_master_host, $orig_master_ip,
  8. $orig_master_port, $new_master_host, $new_master_ip, $new_master_port
  9. );
  10. #############################添加内容部分#########################################
  11. my $vip = '192.168.80.200';                                                                        #指定vip的地址
  12. my $brdc = '192.168.80.255';                                                                #指定vip的广播地址
  13. my $ifdev = 'ens33';                                                                                #指定vip绑定的网卡
  14. my $key = '1';                                                                                                #指定vip绑定的虚拟网卡序列号
  15. my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";                #代表此变量值为ifconfig ens33:1 192.168.80.200
  16. my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";                #代表此变量值为ifconfig ens33:1 192.168.80.200 down
  17. my $exit_code = 0;                                                                                        #指定退出状态码为0
  18. #my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key;/usr/sbin/arping -q -A -c 1 -I $ifdev $vip;iptables -F;";
  19. #my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key";
  20. ##################################################################################
  21. GetOptions(
  22. 'command=s' => \$command,
  23. 'ssh_user=s' => \$ssh_user,
  24. 'orig_master_host=s' => \$orig_master_host,
  25. 'orig_master_ip=s' => \$orig_master_ip,
  26. 'orig_master_port=i' => \$orig_master_port,
  27. 'new_master_host=s' => \$new_master_host,
  28. 'new_master_ip=s' => \$new_master_ip,
  29. 'new_master_port=i' => \$new_master_port,
  30. );
  31. exit &main();
  32. sub main {
  33. print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
  34. if ( $command eq "stop" || $command eq "stopssh" ) {
  35. my $exit_code = 1;
  36. eval {
  37. print "Disabling the VIP on old master: $orig_master_host \n";
  38. &stop_vip();
  39. $exit_code = 0;
  40. };
  41. if ($@) {
  42. warn "Got Error: $@\n";
  43. exit $exit_code;
  44. }
  45. exit $exit_code;
  46. }
  47. elsif ( $command eq "start" ) {
  48. my $exit_code = 10;
  49. eval {
  50. print "Enabling the VIP - $vip on the new master - $new_master_host \n";
  51. &start_vip();
  52. $exit_code = 0;
  53. };
  54. if ($@) {
  55. warn $@;
  56. exit $exit_code;
  57. }
  58. exit $exit_code;
  59. }
  60. elsif ( $command eq "status" ) {
  61. print "Checking the Status of the script.. OK \n";
  62. exit 0;
  63. }
  64. else {
  65. &usage();
  66. exit 1;
  67. }
  68. }
  69. sub start_vip() {
  70. `ssh $ssh_user\@$new_master_host " $ssh_start_vip "`;
  71. }
  72. ## A simple system call that disable the VIP on the old_master
  73. sub stop_vip() {
  74. `ssh $ssh_user\@$orig_master_host " $ssh_stop_vip "`;
  75. }
  76. sub usage {
  77. print
  78. "Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
  79. }
复制代码
(4)创建 MHA 软件目录并拷贝设置文件,这里利用app1.cnf设置文件来管理 mysql 节点服务器
  1. mkdir /etc/masterha
  2. cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha
  3. vim /etc/masterha/app1.cnf                                                #删除原有内容,直接复制并修改节点服务器的IP地址
  4. [server default]
  5. manager_log=/var/log/masterha/app1/manager.log
  6. manager_workdir=/var/log/masterha/app1
  7. master_binlog_dir=/usr/local/mysql/data
  8. master_ip_failover_script=/usr/local/bin/master_ip_failover
  9. master_ip_online_change_script=/usr/local/bin/master_ip_online_change
  10. password=manager
  11. ping_interval=1
  12. remote_workdir=/tmp
  13. repl_password=123
  14. repl_user=myslave
  15. secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.80.20 -s 192.168.80.30
  16. shutdown_script=""
  17. ssh_user=root
  18. user=mha
  19. [server1]
  20. hostname=192.168.80.10
  21. port=3306
  22. [server2]
  23. candidate_master=1
  24. check_repl_delay=0
  25. hostname=192.168.80.20
  26. port=3306
  27. [server3]
  28. hostname=192.168.80.30
  29. port=3306
复制代码
阐明:
  1. [server default]
  2. manager_log=/var/log/masterha/app1/manager.log       #manager日志
  3. manager_workdir=/var/log/masterha/app1.log         #manager工作目录
  4. master_binlog_dir=/usr/local/mysql/data/          #master保存binlog的位置,这里的路径要与master里配置的binlog的路径一致,以便MHA能找到
  5. master_ip_failover_script=/usr/local/bin/master_ip_failover  #设置自动failover时候的切换脚本,也就是上面的那个脚本
  6. master_ip_online_change_script=/usr/local/bin/master_ip_online_change  #设置手动切换时候的切换脚本
  7. password=manager                        #设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
  8. ping_interval=1                                #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failover
  9. remote_workdir=/tmp                        #设置远端mysql在发生切换时binlog的保存位置
  10. repl_password=123                        #设置复制用户的密码
  11. repl_user=myslave                        #设置复制用户的用户
  12. report_script=/usr/local/send_report     #设置发生切换后发送的报警的脚本
  13. secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.80.20 -s 192.168.80.30        #指定检查的从服务器IP地址
  14. shutdown_script=""                        #设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机防止发生脑裂,这里没有使用)
  15. ssh_user=root                                #设置ssh的登录用户名
  16. user=mha                                        #设置监控用户root
  17. [server1]
  18. hostname=192.168.80.10
  19. port=3306
  20. [server2]
  21. hostname=192.168.80.20
  22. port=3306
  23. candidate_master=1
  24. #设置为候选master,设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个从库不是集群中最新的slave
  25. check_repl_delay=0
  26. #默认情况下如果一个slave落后master 超过100M的relay logs的话,MHA将不会选择该slave作为一个新的master,
  27. 因为对于这个slave的恢复需要花费很长时间;通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的
  28. 时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master
  29. [server3]
  30. hostname=192.168.80.30
  31. port=3306
复制代码
开启master的假造IP
  1. /sbin/ifconfig ens33:1 192.168.80.200/24
复制代码
10.在 manager 节点上测试 ssh 无暗码认证
  1. masterha_check_ssh -conf=/etc/masterha/app1.cnf
  2. Tue Nov 26 23:09:45 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
  3. Tue Nov 26 23:09:45 2020 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
  4. Tue Nov 26 23:09:45 2020 - [info] Reading server configuration from /etc/masterha/app1.cnf..
  5. Tue Nov 26 23:09:45 2020 - [info] Starting SSH connection tests..
  6. Tue Nov 26 23:09:46 2020 - [debug]
  7. Tue Nov 26 23:09:45 2020 - [debug]  Connecting via SSH from root@192.168.80.20(192.168.80.20:22) to root@192.168.80.30(192.168.80.30:22)..
  8. Tue Nov 26 23:09:46 2020 - [debug]   ok.
  9. Tue Nov 26 23:09:47 2020 - [debug]
  10. Tue Nov 26 23:09:46 2020 - [debug]  Connecting via SSH from root@192.168.80.30(192.168.80.30:22) to root@192.168.80.20(192.168.80.20:22)..
  11. Tue Nov 26 23:09:47 2020 - [debug]   ok.
  12. Tue Nov 26 23:09:47 2020 - [info] All SSH connection tests passed successfully.
  13. # 无密码认证成功
复制代码
11.在 manager 节点上测试 mysql 主从毗连情况
  1. masterha_check_repl -conf=/etc/masterha/app1.cnf
  2. Tue Nov 26 23:10:29 2020 - [info] Slaves settings check done.
  3. Tue Nov 26 23:10:29 2020 - [info]
  4. 192.168.80.20(192.168.80.20:3306) (current master)
  5. +--192.168.80.30(192.168.80.30:3306)
  6. Tue Nov 26 23:10:29 2020 - [info] Checking replication health on 192.168.80.30..
  7. Tue Nov 26 23:10:29 2020 - [info]  ok.
  8. Tue Nov 26 23:10:29 2020 - [info] Checking master_ip_failover_script status:
  9. Tue Nov 26 23:10:29 2020 - [info]   /usr/local/bin/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.80.20 --orig_master_ip=192.168.80.20 --orig_master_port=3306
  10. IN SCRIPT TEST====/sbin/ifconfig ens33:1 down==/sbin/ifconfig ens33:1 192.168.80.200===
  11. Checking the Status of the script.. OK
  12. Tue Nov 26 23:10:29 2020 - [info]  OK.
  13. Tue Nov 26 23:10:29 2020 - [warning] shutdown_script is not defined.
  14. Tue Nov 26 23:10:29 2020 - [info] Got exit code 0 (Not master dead).
  15. MySQL Replication Health is OK.
  16. # 主从连接成功
复制代码
  1. # manager 节点上启动 MHA
  2. nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
复制代码
  1. --remove_dead_master_conf:该参数代表当发生主从切换后,老的主库的 ip 将会从配置文件中移除。
  2. --manger_log:日志存放位置。
  3. --ignore_last_failover:在缺省情况下,如果 MHA 检测到连续发生宕机,且两次宕机间隔不足 8 小时的话,
  4.   则不会进行 Failover, 之所以这样限制是为了避免 ping-pong 效应。该参数代表忽略上次 MHA 触发切换产生的文件,
  5.   默认情况下,MHA 发生切换后会在日志记目录,也就是上面设置的日志app1.failover.complete文件,
  6.   下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后收到删除该文件,
  7.   为了方便,这里设置为--ignore_last_failover。
复制代码
  1. # b查看 MHA 状态,可以看到当前的 master 是 Mysql1 节点。
  2. masterha_check_status --conf=/etc/masterha/app1.cnf
  3. # a日志方式查看
  4. cat /var/log/masterha/app1/manager.log | grep "current master"
  5. # c 查看 Mysql1 的 VIP 地址 192.168.80.200 是否存在,这个 VIP 地址不会因为 manager 节点停止 MHA 服务而消失。
  6. ifconfig
  7. //若要关闭 manager 服务,可以使用如下命令。
  8. masterha_stop --conf=/etc/masterha/app1.cnf
  9. 或者可以直接采用 kill 进程 ID 的方式关闭。
复制代码
模仿故障
  1. # a在 manager 节点上监控观察日志记录
  2. tail -f /var/log/masterha/app1/manager.log
  3. # b在 Master 节点 Mysql1 上停止mysql服务
  4. systemctl stop mysqld
  5. pkill -9 mysql
  6. # c正常自动切换一次后,MHA 进程会退出。HMA 会自动修改 app1.cnf 文件内容,将宕机的 mysql1 节点删除。查看 mysql2 是否接管 VIP
  7. ifconfig
  8. 故障切换备选主库的算法:
  9. 1.一般判断从库的是从(position/GTID)判断优劣,数据有差异,最接近于master的slave,成为备选主。
  10. 2.数据一致的情况下,按照配置文件顺序,选择备选主库。
  11. 3.设定有权重(candidate_master=1),按照权重强制指定备选主。
  12. (1)默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效。
  13. (2)如果check_repl_delay=0的话,即使落后很多日志,也强制选择其为备选主。
复制代码
故障修复
  1. 1.重启mysql服务
  2. systemctl restart mysqld
  3. 2.修复主从:先查看二进制文件和同步点
  4. show master status;
  5. 3.原主库服务器 mysql1 执行同步操作
  6. change master to master_host='192.168.80.20',master_user='myslave',master_password='123',master_log_file='master-bin.000001',master_log_pos=1745;
  7. start slave;
  8. 4.在 manager 节点上修改配置文件app1.cnf
  9. vi /etc/masterha/app1.cnf
  10. ......
  11. secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.80.10 -s 192.168.80.30
  12. ......
  13. [server1]
  14. hostname=192.168.80.20
  15. port=3306
  16. [server2]
  17. candidate_master=1
  18. check_repl_delay=0
  19. hostname=192.168.80.10
  20. port=3306
  21. [server3]
  22. hostname=192.168.80.30
  23. port=3306
复制代码
  1. 5.从库必须设置为只读模式:当前从库为mysql
  2. set global read_only=1;
  3. 6.在 manager 节点上启动 MHA,并查看VIP是否漂移到mysql2
  4. nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
  5. ##查看 MHA 状态,可以看到当前的 master 是 Mysql2 节点
  6. masterha_check_status --conf=/etc/masterha/app1.cnf
复制代码
到此这篇关于MySQL高可用架构之MHA的文章就介绍到这了,更多相关MySQL高可用架构内容请搜索脚本之家以前的文章或继承欣赏下面的相关文章希望各人以后多多支持脚本之家!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作