当前位置:   article > 正文

mysql数据库—MAH集群部署_mysql mha 最低几台服务器

mysql mha 最低几台服务器

1、MHA的介绍:

  • 由日本DeNA公司youshimaton开发。

  • 是一套优秀的实现MySQL高可用的解决方案。

  • 数据库的自动故障切换操作能做到在0~30秒之内完成。

  • MHA能确保在故障切换过程中最大限度保证数据的一致性,以达到真正意义上的高可用。

2、MHA集群架构:

  • 数据库服务器至少需要3台以上,才能实现数据的高可用。

  • 主和从服务器之间有一个vip地址,当主出现问题时,从服务器会自动转换成主服务器,为了保证数据库服务器完全正常,使用2台从数据库服务器。

3、MHA工作原理:

  • 当管理数据库集群的服务器manager定时探测集群中的master节点。

  • 当master故障时,manager自动将拥有最新数据的从服务器提升为新的master服务器。相当于manager为一个监控与执行服务器。

4、MHA的缺点:

        必须要有vip地址,宕机的主服务器需要手动添加到集群里,还需要手动同步宕机期间的数据,管理服务发现主服务器宕机后,会调用故障切换脚本,把vip地址部署在新的主数据库服务器上。管理服务会自动停止,需要手动启动管理服务器,才能监视新的主数据服务器,故障切换期间会有数据丢失的情况。

 5、配置MAH集群

管理端软件(管理节点):安装管理集群主机上的软件

数据端软件(数据节点):安装在数据库服务器上的软件

链接:https://pan.baidu.com/s/1vD-Br7x5Ovs2Ck_apaZJPA 
提取码:xbjy

说明:zip格式,可以使用unzip解压

 5.1、环境准备

数据服务器(3台):192.168.4.10 | 20 | 30,配置全新的数据库服务

管理服务器(1台):192.168.4.40,不需要有数据库服务

客   户    端(1台):192.168.4.50,有连接命令mysql即可

所有服务器关闭防火墙、selinux服务

5.2、三台数据服务器的部署 

  1. 配置192.168.4.10服务器
  2. [mysqld]
  3. plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
  4. rpl_semi_sync_slave_enabled=1
  5. rpl_semi_sync_master_enabled=1
  6. relay_log_purge=0
  7. server_id=10
  8. log_bin=master10
  9. [root@mysql10 ~]# systemctl restart mysqld
  10. [root@mysql10 ~]# grep "password" /var/log/mysqld.log
  11. 2022-05-18T03:16:56.610678Z 1 [Note] A temporary password is generated for root@localhost: 2f;?Aha*qNUd
  12. [root@mysql10 ~]# mysql -uroot -p"2f;?Aha*qNUd"
  13. mysql> alter user root@"localhost" identified by "JY1987...zy2011";
  14. Query OK, 0 rows affected (10.01 sec)
  15. mysql> exit
  16. [root@mysql10 ~]# mysql -uroot -pJY1987...zy2011
  17. mysql> grant replication slave on *.* to repluser@"%" identified by "JY1987...zy2011";
  18. Query OK, 0 rows affected, 1 warning (0.01 sec)
  19. 配置192.168.4.20服务器
  20. [root@mysql20 ~]# vim /etc/my.cnf
  21. [mysqld]
  22. plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
  23. rpl_semi_sync_master_enabled=1
  24. rpl_semi_sync_slave_enabled=1
  25. relay_log_purge=0
  26. server_id=20
  27. log_bin=master20
  28. [root@mysql20 ~]# systemctl restart mysqld
  29. [root@mysql20 ~]# grep "password" /var/log/mysqld.log
  30. 2022-05-18T03:22:14.083847Z 1 [Note] A temporary password is generated for root@localhost: e>5/0DGNP5.T
  31. [root@mysql20 ~]# mysql -uroot -p"e>5/0DGNP5.T"
  32. mysql> alter user root@"localhost" identified by "JY1987...zy2011";
  33. Query OK, 0 rows affected (10.00 sec)
  34. mysql> exit
  35. [root@mysql20 ~]# mysql -uroot -pJY1987...zy2011
  36. mysql> grant replication slave on *.* to repluser@"%" identified by "JY1987...zy2011";
  37. Query OK, 0 rows affected, 1 warning (0.00 sec)
  38. 配置192.168.4.30服务器
  39. [root@mysql30 ~]# vim /etc/my.cnf
  40. [mysqld]
  41. plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
  42. rpl_semi_sync_master_enabled=1
  43. rpl_semi_sync_slave_enabled=1
  44. relay_log_purge=0
  45. server_id=30
  46. log_bin=master30
  47. [root@mysql30 ~]# systemctl restart mysqld
  48. [root@mysql30 ~]# grep "password" /var/log/mysqld.log
  49. 2022-05-18T03:22:31.746573Z 1 [Note] A temporary password is generated for root@localhost: fo448kwl=&4O
  50. [root@mysql30 ~]# mysql -uroot -p"fo448kwl=&4O"
  51. mysql> alter user root@"localhost" identified by "JY1987...zy2011";
  52. Query OK, 0 rows affected (10.01 sec)
  53. mysql> exit
  54. [root@mysql30 ~]# mysql -uroot -pJY1987...zy2011
  55. mysql> grant replication slave on *.* to repluser@"%" Identified by "JY1987...zy2011";
  56. Query OK, 0 rows affected, 1 warning (0.00 sec)

5.3、数据库服务器配置ssh免密登录

  1. [root@mysql10 ~]# ssh-keygen 遇到提示就回车
  2. [root@mysql10 ~]# ssh-copy-id root@192.168.4.20
  3. [root@mysql10 ~]# ssh-copy-id root@192.168.4.30
  4. [root@mysql20 ~]# ssh-keygen 遇到提示就回车
  5. [root@mysql20 ~]# ssh-copy-id root@192.168.4.10
  6. [root@mysql20 ~]# ssh-copy-id root@192.168.4.30
  7. [root@mysql30 ~]# ssh-keygen 遇到提示就回车
  8. [root@mysql30 ~]# ssh-copy-id root@192.168.4.10
  9. [root@mysql30 ~]# ssh-copy-id root@192.168.4.20

5.4、部署一主从多的架构,mysql20和mysq30都做如下配置,配置为mysql10的从

  1. mysql> change master to master_host="192.168.4.10";
  2. Query OK, 0 rows affected (0.12 sec)
  3. mysql> change master to master_host="192.168.4.10",
  4. -> master_user="repluser",
  5. -> master_password="JY1987...zy2011",
  6. -> master_log_file="master10.000002",
  7. -> master_log_pos=685;
  8. Query OK, 0 rows affected, 2 warnings (0.01 sec)
  9. mysql> start slave;
  10. Query OK, 0 rows affected (0.01 sec)
  11. mysql> show slave status \G
  12. *************************** 1. row ***************************
  13. Slave_IO_State: Waiting for master to send event
  14. Master_Host: 192.168.4.10
  15. Master_User: repluser
  16. Master_Port: 3306
  17. Connect_Retry: 60
  18. Master_Log_File: master10.000002
  19. Read_Master_Log_Pos: 685
  20. Relay_Log_File: mysql20-relay-bin.000002
  21. Relay_Log_Pos: 319
  22. Relay_Master_Log_File: master10.000002
  23. Slave_IO_Running: Yes
  24. Slave_SQL_Running: Yes

5.4、管理服务器配置ssh免密登录

  1. [root@mah40 ~]# ssh-keygen 遇到提示就回车
  2. [root@mah40 ~]# ssh-copy-id root@192.168.4.10
  3. [root@mah40 ~]# ssh-copy-id root@192.168.4.20
  4. [root@mah40 ~]# ssh-copy-id root@192.168.4.30

5.5、管理服务器安装相关软件及配置

  1. [root@mah40 ~]# ls
  2. anaconda-ks.cfg mha.zip
  3. [root@mah40 ~]# unzip mha.zip
  4. [root@mah40 ~]# cd mha/
  5. [root@mah40 mha]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
  6. [root@mah40 mha]# yum -y install perl-*.rpm
  7. [root@mah40 mha]# yum -y install perl-ExtUtils-* perl-CPAN*
  8. [root@mah40 ~]# tar -xf mha4mysql-manager-0.56.tar.gz
  9. [root@mah40 ~]# cd mha4mysql-manager-0.56/
  10. [root@mah40 mha4mysql-manager-0.56]# perl Makefile.PL
  11. *** Module::AutoInstall version 1.03
  12. *** Checking for Perl dependencies...
  13. [Core Features]
  14. - DBI ...loaded. (1.627)
  15. - DBD::mysql ...loaded. (4.023)
  16. - Time::HiRes ...loaded. (1.9725)
  17. - Config::Tiny ...loaded. (2.14)
  18. - Log::Dispatch ...loaded. (2.41)
  19. - Parallel::ForkManager ...loaded. (1.18)
  20. - MHA::NodeConst ...loaded. (0.56)
  21. *** Module::AutoInstall configuration finished.
  22. Checking if your kit is complete...
  23. Looks good
  24. Writing Makefile for mha4mysql::manager
  25. Writing MYMETA.yml and MYMETA.json
  26. [root@mah40 mha4mysql-manager-0.56]# make && make install
  27. [root@mah40 mha4mysql-manager-0.56]# masterha_
  28. masterha_check_repl masterha_check_status masterha_manager masterha_master_switch masterha_stop
  29. masterha_check_ssh masterha_conf_host masterha_master_monitor masterha_secondary_check

5.6、创建并编辑管理服务的主配置文件

  1. [root@mah40 ~]# mkdir /etc/mha
  2. [root@mah40 ~]# cd mha4mysql-manager-0.56/
  3. [root@mah40 mha4mysql-manager-0.56]# cp samples/conf/app1.cnf /etc/mha/
  4. [root@mah40 ~]# vim /etc/mha/app1.cnf # 编辑配置文件
  5. [server default]
  6. manager_workdir=/etc/mha
  7. manager_log=/etc/mha/manager.log
  8. master_ip_failover_script=/etc/mha/master_ip_failover
  9. ssh_user=root
  10. ssh_port=22
  11. repl_user=repluser
  12. repl_password=JY1987...zy2011
  13. user=jy
  14. password=JY1987...zy2011
  15. [server1]
  16. hostname=192.168.4.10
  17. port=3306
  18. candidate_master=1
  19. [server2]
  20. hostname=192.168.4.20
  21. port=3306
  22. candidate_master=1
  23. [server3]
  24. hostname=192.168.4.30
  25. port=3306
  26. candidate_master=1
  27. # 创建故障切换脚本并指定vip地址部署在哪块网卡上
  28. [root@mah40 ~]# cd mha
  29. [root@mah40 mha]# mv master_ip_failover /etc/mha/
  30. [root@mah40 mha]# chmod +x /etc/mha/master_ip_failover
  31. [root@mah40 mha]# vim +35 /etc/mha/master_ip_failover
  32. my $vip = '192.168.4.100/24'; # Virtual IP
  33. my $key = "1";
  34. my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
  35. my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

5.7、配置三台数据库服务器,数据库都有ifconfig 命令

1)把故障切换脚本里指定的vip地址,配置在当前主从结构种的主数据库服务器mysql10主机上

  1. [root@mysql10 ~]# which ifconfig || yum -y install net-tools
  2. [root@mysql10 ~]# ifconfig eth0:1 192.168.4.100/24
  3. [root@mysql10 ~]# ifconfig eht0:1
  4. eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  5. inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
  6. ether 00:0c:29:34:46:2e txqueuelen 1000 (Ethernet)

2)三台数据库服务器都要安装以下安软件

  1. [root@mysql10 mha]# yum -y install perl-*.rpm
  2. [root@mysql10 mha]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm

3)添加监控用户,在master服务器添加用户,在slave服务器查看用户

  1. [root@mysql10 ~]# mysql -uroot -pJY1987...zy2011
  2. mysql> grant all on *.* to jy@"%" identified by "JY1987...zy2011";
  3. Query OK, 0 rows affected, 1 warning (0.00 sec)
  4. [root@mysql20 ~]# mysql -uroot -pJY1987...zy2011 -e "select user from mysql.user where user='jy'"
  5. mysql: [Warning] Using a password on the command line interface can be insecure.
  6. +------+
  7. | user |
  8. +------+
  9. | jy |
  10. +------+
  11. [root@mysql30 ~]# mysql -uroot -pJY1987...zy2011 -e "select user from mysql.user where user='jy'"
  12. mysql: [Warning] Using a password on the command line interface can be insecure.
  13. +------+
  14. | user |
  15. +------+
  16. | jy |
  17. +------+

5.8、在管理主机对配置做测试

  1. [root@mah ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf # 测试免密登录
  2. Wed May 18 00:17:51 2022 - [info] All SSH connection tests passed successfully. # 提示成功
  3. [root@mah ~]# masterha_check_repl --conf=/etc/mha/app1.cnf # 测试主从同步
  4. MySQL Replication Health is NOT OK! # 提示成功

1)测试成功,才能启动服务

  1. [root@mah ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
  2. [1] 5575
  3. [root@mah ~]# jobs
  4. [1]+ 运行中 nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
  5. [root@mah40 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
  6. app1 (pid:11846) is running(0:PING_OK), master:192.168.4.10
  7. [root@mysql10 ~]# ifconfig eth0:1
  8. eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  9. inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
  10. ether 00:0c:29:cc:dc:7a txqueuelen 1000 (Ethernet)

5.9、集群测试

1)主服务器mysql10添加访问数据的连接用户

  1. mysql> create database xb;
  2. Query OK, 1 row affected (0.00 sec)
  3. mysql> create table xb.zy(id int);
  4. Query OK, 0 rows affected (0.01 sec)
  5. mysql> grant select ,insert on xb.* to jj@"%" identified by "JY1987...zy2011";
  6. Query OK, 0 rows affected, 1 warning (0.00 sec)
  7. mysql> insert into xb.zy(id) values(99);
  8. Query OK, 1 row affected (10.07 sec)
  9. mysql> select * from xb.zy;
  10. +------+
  11. | id |
  12. +------+
  13. | 99 |
  14. +------+

2)客户端50连接vip地址访问集群

  1. [root@host50 ~]# mysql -h192.168.4.100 -ujj -pJY1987...zy2011;
  2. MySQL [(none)]> select * from xb.zy;
  3. Empty set (0.00 sec)
  4. MySQL [(none)]> exit

3)两台从服务器查看数据

  1. [root@mysql20 ~]# mysql -uroot -pJY1987...zy2011 -e "select * from xb.zy"
  2. mysql: [Warning] Using a password on the command line interface can be insecure.
  3. +------+
  4. | id |
  5. +------+
  6. | 99 |
  7. +------+
  8. [root@mysql30 ~]# mysql -uroot -pJY1987...zy2011 -e "select * from xb.zy"
  9. mysql: [Warning] Using a password on the command line interface can be insecure.
  10. +------+
  11. | id |
  12. +------+
  13. | 99 |
  14. +------+

 4)停止主服务器mysql10的数据库服务

[root@mysql10 ~]# systemctl stop mysqld.service   # 停止主服务的数据库服务

5) 客户端50再次连接vip地址访问集群,验证集群的高可靠

  1. [root@host50 ~]# mysql -h192.168.4.100 -ujj -pJY1987...zy2011;
  2. MySQL [(none)]> select * from xb.zy;
  3. +------+
  4. | id |
  5. +------+
  6. | 99 |
  7. +------+
  8. 1 row in set (0.01 sec)

6)在两台从服务器查看vip地址,vip地址192.168.4.100会切换到新的主数据库服务器上

  1. [root@mysql20 ~]# ifconfig eth0:1
  2. eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  3. inet 192.168.4.100 netmask 255.255.255.0 broadcast 192.168.4.255
  4. ether 00:0c:29:69:e0:6a txqueuelen 1000 (Ethernet)
  5. [root@mysql30 ~]# ifconfig eth0:1
  6. eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  7. ether 00:0c:29:77:20:31 txqueuelen 1000 (Ethernet)
  8. [root@mysql30 mha]# mysql -uroot -pJY1987...zy2011 -e 'show slave status\G' | grep -i yes
  9. mysql: [Warning] Using a password on the command line interface can be insecure.
  10. Slave_IO_Running: Yes
  11. Slave_SQL_Running: Yes
  12. [root@mysql30 mha]# mysql -uroot -pJY1987...zy2011 -e 'show slave status\G' | grep -i master_host
  13. mysql: [Warning] Using a password on the command line interface can be insecure.
  14. Master_Host: 192.168.4.20

7)在mha管理主机40上查看配置文件和服务状态

  1. [root@mah40 ~]# grep "server[1,2,3]" /etc/mha/app1.cnf # 主数据库服务器的信息没有了
  2. [server2]
  3. [server3]
  4. [root@mah40 ~]# masterha_check_status --conf=/etc/mha/app1.cnf # 出现故障后,服务会停掉,要重新启动服务
  5. app1 is stopped(2:NOT_RUNNING).
  6. [root@mah40 ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
  7. [1] 12893
  8. [root@mah40 ~]# jobs
  9. [1]+ 运行中 nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover 2> /dev/null &
  10. [root@mah40 ~]# masterha_check_status --conf=/etc/mha/app1.cnf # 服务监控新的主数据库服务器
  11. app1 (pid:12893) is running(0:PING_OK), master:192.168.4.20

5.10、修复宕机的10数据库服务器

1)把192.168.4.10配置为当前master服务器192.168.4.20的slave

  1. # 在master主机上做数据备份,拷贝给10服务器
  2. [root@mysql20 mha]# mysqldump -uroot -pJY1987...zy2011 --master-data -B xb > xb.sql
  3. [root@mysql20 mha]# scp xb.sql 192.168.4.10:/root/
  4. # 数据同步后,把10服务器配置为master数据库服务的slave
  5. [root@mysql10 ~]# grep master20 xb.sql
  6. CHANGE MASTER TO MASTER_LOG_FILE='master20.000003', MASTER_LOG_POS=154;
  7. [root@mysql10 ~]# systemctl restart mysqld
  8. [root@mysql10 ~]# mysql -uroot -pJY1987...zy2011 < xb.sql
  9. mysql: [Warning] Using a password on the command line interface can be insecure.
  10. [root@mysql10 ~]# mysql -uroot -pJY1987...zy2011
  11. mysql> stop slave;
  12. Query OK, 0 rows affected (0.00 sec)
  13. mysql> change master to master_host="192.168.4.20",
  14. -> master_user="repluser",
  15. -> master_password="JY1987...zy2011",
  16. -> master_log_file="master20.000003",
  17. -> master_log_pos=154;
  18. Query OK, 0 rows affected, 2 warnings (0.01 sec)
  19. mysql> start slave;
  20. Query OK, 0 rows affected (0.00 sec)
  21. mysql> show slave status \G
  22. *************************** 1. row ***************************
  23. Slave_IO_State: Waiting for master to send event
  24. Master_Host: 192.168.4.20
  25. Master_User: repluser
  26. Master_Port: 3306
  27. Connect_Retry: 60
  28. Master_Log_File: master20.000003
  29. Read_Master_Log_Pos: 403
  30. Relay_Log_File: mysql10-relay-bin.000002
  31. Relay_Log_Pos: 568
  32. Relay_Master_Log_File: master20.000003
  33. Slave_IO_Running: Yes
  34. Slave_SQL_Running: Yes

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/294792
推荐阅读
相关标签
  

闽ICP备14008679号