赞
踩
mysql高可用
高可用的方法有MHA 、MMM、NGR三种。本文主要实验为MHA为例。
实验环境
CentOS Linux release 7.6.1810 (Core)
mysql-5.7.37-1.el7.x86_64
三台mysql、一台MHA
主机 IP:192.168.217.11
从机1IP :192.168.217.12
从机2IP: 192.168.217.13
HMA IP: 192.168.217.14
MHA(master high avaliability)是一套优秀的mysql高可用环境下故障切换和主从复制的软件,mysq故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。MHA能在故障切换的过程中最大程度上保证数据的一致性,一道道真正意义上的高可用。
MHA工作原理
1 从宕机崩溃的master保存二进制日志事件(binlog events)
2 识别含有最新更新的slave
3 应用差异的中继日志(relay log)到其他的slave
4 应用从master保存的二进制日志事件(binlog events)
5 提升一个slave为新的master
6 使其他的slave连接新的master进行复制
准备安装包
mha4mysql-node-0.56-0.el6.noarch.rpm
mha4mysql-manager-0.56-0.el6.noarch.rpm
mysql-community-client-5.7.37-1.el7.x86_64.rpm
mysql-community-common-5.7.37-1.el7.x86_64.rpm
mysql-community-libs-5.7.37-1.el7.x86_64.rpm
mysql-community-server-5.7.37-1.el7.x86_64.rpm
三台mysql安装
mha4mysql-node-0.56-0.el6.noarch.rpm
MHA 安装
mha4mysql-node-0.56-0.el6.noarch.rpm
mha4mysql-manager-0.56-0.el6.noarch.rpm
为了实验顺利进行4台设备关闭防火墙
systemctl stop firewalld
netenforce 0
更新yum
wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo wget -O
/etc/yum.repos.d/epel-7.repo
http://mirrors.aliyun.com/repo/epel-7.repo
主1 从1 从2
安装mha 客户端node节点
[root@localhost ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
错误:依赖检测失败:
perl(DBD::mysql) 被 mha4mysql-node-0.56-0.el6.noarch 需要
perl(DBI) 被 mha4mysql-node-0.56-0.el6.noarch 需要
安装依赖
[root@localhost ~]# yum -y install perl-DBD-mysql perl-DBI
[root@localhost ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
准备中... ################################# [100%]
正在升级/安装...
1:mha4mysql-node-0.56-0.el6 ################################# [100%]
MHA
安装mha
安装依赖
[root@localhost ~]# yum -y install perl-DBD-mysql perl-DBI perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
[root@localhost ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
准备中... ################################# [100%]
正在升级/安装...
1:mha4mysql-node-0.56-0.el6 ################################# [100%]
[root@localhost ~]# rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
准备中... ################################# [100%]
正在升级/安装...
1:mha4mysql-manager-0.56-0.el6 ################################# [100%]
主1、 从1 、从2、MHA
设置免密登录
4台设备全部操作免密登录 , 同样操作每台设备操作一次
[root@localhost ~]# ssh-keygen #回车4次 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:4yhK/ul6PUymTnOIc7FLM85bgIRsf9o6GDXc/nGuwNU root@localhost.localdomain The key's randomart image is: +---[RSA 2048]----+ | | |.. | |.oo . | |...= . . | | o.=. .SE | | . .=*++ o | | *.@X= = | | + X+X=. . | | +B@. o. | +----[SHA256]-----+ ssh-copy-id root@192.168.217.12 #此处ip改其余三台主机 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host '192.168.217.12 (192.168.217.12)' can't be established. ECDSA key fingerprint is SHA256:/Dmpz2tJIrSn3PbaMSpDLfHTKrpAGIYGOEAzou708rc. ECDSA key fingerprint is MD5:f4:03:dc:66:88:b1:42:0d:16:a3:d9:30:ab:86:d2:1c. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.217.12's password: #输入root 登录密码 Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.217.12'" and check to make sure that only the key(s) you wanted were added.
免密登录验证
[root@localhost ~]# ssh root@192.168.217.14
Last login: Thu May 19 07:16:20 2022 from 192.168.217.50
[root@localhost ~]# exit
登出
Connection to 192.168.217.14 closed.
[root@localhost ~]# ssh root@192.168.217.13
Last login: Wed May 18 23:35:03 2022 from 192.168.217.50
[root@localhost ~]# exit
登出
Connection to 192.168.217.13 closed.
主、从1、从2
安装MySQL 卸载nodeps mariadb-libs [root@localhost ~]# rpm -e --nodeps mariadb-libs [root@localhost ~]# rpm -ivh mysql-community-common-5.7.37-1.el7.x86_64.rpm 警告:mysql-community-common-5.7.37-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:mysql-community-common-5.7.37-1.e################################# [100%] [root@localhost ~]# rpm -ivh mysql-community-libs-5.7.37-1.el7.x86_64.rpm 警告:mysql-community-libs-5.7.37-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:mysql-community-libs-5.7.37-1.el7################################# [100%] [root@localhost ~]# rpm -ivh mysql-community-client-5.7.37-1.el7.x86_64.rpm 警告:mysql-community-client-5.7.37-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:mysql-community-client-5.7.37-1.e################################# [100%] [root@localhost ~]# rpm -ivh mysql-community-server-5.7.37-1.el7.x86_64.rpm 警告:mysql-community-server-5.7.37-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:mysql-community-server-5.7.37-1.e################################# [100%] [root@localhost ~]# systemctl start mysqld 查看初始密码 [root@localhost ~]# cat /var/log/mysqld.log | grep password 2022-05-18T22:58:28.605893Z 1 [Note] A temporary password is generated for root@localhost: **)=Juxuadl9m2** #密码 [root@localhost ~]# mysql -uroot -p Enter password: 修改MySQL密码 mysql> set password=password('1234.Asd');
启动MySQL
[root@localhost ~]# systemctl start mysqld
主
修改MySQL配置文件
[root@localhost ~]# vim /etc/my.cnf
server-id=1
log-bin=mysql-bin # 开启二进制日志
从1
server-id=2
log-bin=mysql-bin #开启二进制日志
relay-log=relay-log-bin #中继日志
relay-log-purge=0 #防止从变成主删除中继日志
从2
server-id=3
log-bin=mysql-bin #开启二进制日志
relay-log=relay-log-bin #中继日志
relay-log-purge=0 #防止从变成主删除中继日志
重启MySQL
[root@localhost ~]# systemctl restart mysqld
主从复制 mha授权
主
mysql> grant replication slave on *.* to 'mha'@'192.168.217.%' identified by '1234.Asd'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> grant all on *.* to 'mha'@'192.168.217.%' identified by '1234.Asd'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> show master status/G; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/G' at line 1 mysql> show master status\G; *************************** 1. row *************************** File: mysql-bin.000002 Position: 891 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec)
从1
mysql> grant replication slave on *.* to 'mha'@'192.168.217.%' identified by '1234.Azx'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> grant all on *.* to 'mha'@'192.168.217.%' identified by '1234.Azx'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> change master to master_host='192.168.217.11',master_user='mha',master_password='1234.Asd',master_log_file='mysql-bin.000002',master_log_pos=891; Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql> start slave; Query OK, 0 rows affected (0.00 sec) mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.217.11 Master_User: mha Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 891 Relay_Log_File: relay-log-bin.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB:
从2
mysql> grant replication slave on *.* to 'mha'@'192.168.217.%' identified by '1234.Aqw'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> grant all on *.* to 'mha'@'192.168.217.%' identified by '1234.Aqw'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> change master to master_host='192.168.217.11',master_user='mha',master_password='1234.Asd',master_log_file='mysql-bin.000002',master_log_pos=891; Query OK, 0 rows affected, 2 warnings (0.01 sec) mysql> start slave; Query OK, 0 rows affected (0.00 sec) mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.217.11 Master_User: mha Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 891 Relay_Log_File: relay-log-bin.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB:
MHA
[root@localhost ~]# mkdir /etc/mha [root@localhost ~]# vim /etc/mha/mha.cnf 添加以下内容 [server default] user=mha password=1234.Asd ssh_user=root repl_user=mha repl_password=1234.Asd ping_interval=1 master_ip_failover_script=/usr/bin/master_ip_failover manager_workdir=/var/mha manager_log=/var/mha/manager.log [server1] hostname=192.168.217.11 #mysql主库ip ssh_port=22 master_binlog_dir=/var/lib/mysql [server2] hostname=192.168.217.12 #mysql从1ip ssh_port=22 candidate_master=1 #允许从为主库 master_binlog_dir=/var/lib/mysql [server3] hostname=192.168.217.13 #mysql从2 ip ssh_port=22 no_master=1 #不允许为主库 master_binlog_dir=/var/lib/mysql [root@localhost ~]# vim /usr/bin/master_ip_failover 添加一下内容 #!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Getopt::Long; my ( $command, $ssh_user, $orig_master_host, $orig_master_ip, $orig_master_port, $new_master_host, $new_master_ip, $new_master_port ); my $vip = '192.168.217.252/24'; #漂移IP地址 同网段 my $key = "1"; my $ssh_start_vip = "/usr/sbin/ifconfig ens33:$key $vip"; #网卡名为本主机网卡名 my $ssh_stop_vip = "/usr/sbin/ifconfig ens33:$key down"; #网卡名为本主机网卡名 GetOptions( 'command=s' => \$command, 'ssh_user=s' => \$ssh_user, 'orig_master_host=s' => \$orig_master_host, 'orig_master_ip=s' => \$orig_master_ip, 'orig_master_port=i' => \$orig_master_port, 'new_master_host=s' => \$new_master_host, 'new_master_ip=s' => \$new_master_ip, 'new_master_port=i' => \$new_master_port, ); exit &main(); sub main { print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n"; if ( $command eq "stop" || $command eq "stopssh" ) { my $exit_code = 1; eval { print "Disabling the VIP on old master: $orig_master_host \n"; &stop_vip(); $exit_code = 0; }; if ($@) { warn "Got Error: $@\n"; exit $exit_code; } exit $exit_code; } elsif ( $command eq "start" ) { my $exit_code = 10; eval { print "Enabling the VIP - $vip on the new master - $new_master_host \n"; &start_vip(); $exit_code = 0; }; if ($@) { warn $@; exit $exit_code; } exit $exit_code; } elsif ( $command eq "status" ) { print "Checking the Status of the script.. OK \n"; `ssh $ssh_user\@$orig_master_host \" $ssh_start_vip \"`; exit 0; } else { &usage(); exit 1; } } sub start_vip() { `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`; } sub stop_vip() { `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`; } sub usage { print "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"; }
#赋予可执行权限
[root@localhost ~]# chmod a+x /usr/bin/master_ip_failover
检测节点之间的主从复制是否正常连接 (出现ok表示无异常)
[root@localhost ~]# masterha_check_ssh --conf=/etc/mha/mha.cnf Thu May 19 18:13:35 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Thu May 19 18:13:35 2022 - [info] Reading application default configuration from /etc/mha/mha.cnf.. Thu May 19 18:13:35 2022 - [info] Reading server configuration from /etc/mha/mha.cnf.. Thu May 19 18:13:35 2022 - [info] Starting SSH connection tests.. Thu May 19 18:13:38 2022 - [debug] Thu May 19 18:13:35 2022 - [debug] Connecting via SSH from root@192.168.217.11(192.168.217.11:22) to root@192.168.217.12(192.168.217.12:22).. Thu May 19 18:13:36 2022 - [debug] ok. Thu May 19 18:13:36 2022 - [debug] Connecting via SSH from root@192.168.217.11(192.168.217.11:22) to root@192.168.217.13(192.168.217.13:22).. Thu May 19 18:13:38 2022 - [debug] ok. Thu May 19 18:13:39 2022 - [debug] Thu May 19 18:13:36 2022 - [debug] Connecting via SSH from root@192.168.217.12(192.168.217.12:22) to root@192.168.217.11(192.168.217.11:22).. Thu May 19 18:13:37 2022 - [debug] ok. Thu May 19 18:13:37 2022 - [debug] Connecting via SSH from root@192.168.217.12(192.168.217.12:22) to root@192.168.217.13(192.168.217.13:22).. Thu May 19 18:13:38 2022 - [debug] ok. Thu May 19 18:13:41 2022 - [debug] Thu May 19 18:13:36 2022 - [debug] Connecting via SSH from root@192.168.217.13(192.168.217.13:22) to root@192.168.217.11(192.168.217.11:22).. Thu May 19 18:13:37 2022 - [debug] ok. Thu May 19 18:13:37 2022 - [debug] Connecting via SSH from root@192.168.217.13(192.168.217.13:22) to root@192.168.217.12(192.168.217.12:22).. Thu May 19 18:13:40 2022 - [debug] ok. Thu May 19 18:13:41 2022 - [info] All SSH connection tests passed successfully
检测节点之间ssh是否正常连接(出现MySQL Replication Health is OK. 表示成功)
root@localhost ~]# masterha_check_repl --conf=/etc/mha/mha.cnf Thu May 19 18:14:37 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Thu May 19 18:14:37 2022 - [info] Reading application default configuration from /etc/mha/mha.cnf.. Thu May 19 18:14:37 2022 - [info] Reading server configuration from /etc/mha/mha.cnf.. Thu May 19 18:14:37 2022 - [info] MHA::MasterMonitor version 0.56. Thu May 19 18:14:38 2022 - [info] GTID failover mode = 0 Thu May 19 18:14:38 2022 - [info] Dead Servers: Thu May 19 18:14:38 2022 - [info] Alive Servers: Thu May 19 18:14:38 2022 - [info] 192.168.217.11(192.168.217.11:3306) Thu May 19 18:14:38 2022 - [info] 192.168.217.12(192.168.217.12:3306) Thu May 19 18:14:38 2022 - [info] 192.168.217.13(192.168.217.13:3306) Thu May 19 18:14:38 2022 - [info] Alive Slaves: Thu May 19 18:14:38 2022 - [info] 192.168.217.12(192.168.217.12:3306) Version=5.7.37-log (oldest major version between slaves) log-bin:enabled Thu May 19 18:14:38 2022 - [info] Replicating from 192.168.217.11(192.168.217.11:3306) Thu May 19 18:14:38 2022 - [info] Primary candidate for the new Master (candidate_master is set) Thu May 19 18:14:38 2022 - [info] 192.168.217.13(192.168.217.13:3306) Version=5.7.37-log (oldest major version between slaves) log-bin:enabled Thu May 19 18:14:38 2022 - [info] Replicating from 192.168.217.11(192.168.217.11:3306) Thu May 19 18:14:38 2022 - [info] Not candidate for the new Master (no_master is set) Thu May 19 18:14:38 2022 - [info] Current Alive Master: 192.168.217.11(192.168.217.11:3306) Thu May 19 18:14:38 2022 - [info] Checking slave configurations.. Thu May 19 18:14:38 2022 - [info] Checking replication filtering settings.. Thu May 19 18:14:38 2022 - [info] binlog_do_db= , binlog_ignore_db= Thu May 19 18:14:38 2022 - [info] Replication filtering check ok. Thu May 19 18:14:38 2022 - [info] GTID (with auto-pos) is not supported Thu May 19 18:14:38 2022 - [info] Starting SSH connection tests.. Thu May 19 18:14:41 2022 - [info] All SSH connection tests passed successfully. Thu May 19 18:14:41 2022 - [info] Checking MHA Node version.. Thu May 19 18:14:42 2022 - [info] Version check ok. Thu May 19 18:14:42 2022 - [info] Checking SSH publickey authentication settings on the current master.. Thu May 19 18:14:43 2022 - [info] HealthCheck: SSH to 192.168.217.11 is reachable. Thu May 19 18:14:43 2022 - [info] Master MHA Node version is 0.56. Thu May 19 18:14:43 2022 - [info] Checking recovery script configurations on 192.168.217.11(192.168.217.11:3306).. Thu May 19 18:14:43 2022 - [info] Executing command: save_binary_logs --command=test --start_pos=4 --binlog_dir=/var/lib/mysql --output_file=/var/tmp/save_binary_logs_test --manager_version=0.56 --start_file=mysql-bin.000002 Thu May 19 18:14:43 2022 - [info] Connecting to root@192.168.217.11(192.168.217.11:22).. Creating /var/tmp if not exists.. ok. Checking output directory is accessible or not.. ok. Binlog found at /var/lib/mysql, up to mysql-bin.000002 Thu May 19 18:14:44 2022 - [info] Binlog setting check done. Thu May 19 18:14:44 2022 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers.. Thu May 19 18:14:44 2022 - [info] Executing command : apply_diff_relay_logs --command=test --slave_user='mha' --slave_host=192.168.217.12 --slave_ip=192.168.217.12 --slave_port=3306 --workdir=/var/tmp --target_version=5.7.37-log --manager_version=0.56 --relay_log_info=/var/lib/mysql/relay-log.info --relay_dir=/var/lib/mysql/ --slave_pass=xxx Thu May 19 18:14:44 2022 - [info] Connecting to root@192.168.217.12(192.168.217.12:22).. Checking slave recovery environment settings.. Opening /var/lib/mysql/relay-log.info ... ok. Relay log found at /var/lib/mysql, up to relay-log-bin.000002 Temporary relay log file is /var/lib/mysql/relay-log-bin.000002 Testing mysql connection and privileges..mysql: [Warning] Using a password on the command line interface can be insecure. done. Testing mysqlbinlog output.. done. Cleaning up test file(s).. done. Thu May 19 18:14:45 2022 - [info] Executing command : apply_diff_relay_logs --command=test --slave_user='mha' --slave_host=192.168.217.13 --slave_ip=192.168.217.13 --slave_port=3306 --workdir=/var/tmp --target_version=5.7.37-log --manager_version=0.56 --relay_log_info=/var/lib/mysql/relay-log.info --relay_dir=/var/lib/mysql/ --slave_pass=xxx Thu May 19 18:14:45 2022 - [info] Connecting to root@192.168.217.13(192.168.217.13:22).. Checking slave recovery environment settings.. Opening /var/lib/mysql/relay-log.info ... ok. Relay log found at /var/lib/mysql, up to relay-log-bin.000002 Temporary relay log file is /var/lib/mysql/relay-log-bin.000002 Testing mysql connection and privileges..mysql: [Warning] Using a password on the command line interface can be insecure. done. Testing mysqlbinlog output.. done. Cleaning up test file(s).. done. Thu May 19 18:14:45 2022 - [info] Slaves settings check done. Thu May 19 18:14:45 2022 - [info] 192.168.217.11(192.168.217.11:3306) (current master) +--192.168.217.12(192.168.217.12:3306) +--192.168.217.13(192.168.217.13:3306) Thu May 19 18:14:45 2022 - [info] Checking replication health on 192.168.217.12.. Thu May 19 18:14:45 2022 - [info] ok. Thu May 19 18:14:45 2022 - [info] Checking replication health on 192.168.217.13.. Thu May 19 18:14:45 2022 - [info] ok. Thu May 19 18:14:45 2022 - [info] Checking master_ip_failover_script status: Thu May 19 18:14:45 2022 - [info] /usr/bin/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.217.11 --orig_master_ip=192.168.217.11 --orig_master_port=3306 IN SCRIPT TEST====/usr/sbin/ifconfig ens33:1 down==/usr/sbin/ifconfig ens33:1 192.168.217.252/24=== Checking the Status of the script.. OK Thu May 19 18:14:46 2022 - [info] OK. Thu May 19 18:14:46 2022 - [warning] shutdown_script is not defined. Thu May 19 18:14:46 2022 - [info] Got exit code 0 (Not master dead). MySQL Replication Health is OK.
主1 查看漂移地址
[root@localhost ~]# ip addr
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:c2:15:cf brd ff:ff:ff:ff:ff:ff
inet 192.168.217.11/24 brd 192.168.217.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.217.252/24 brd 192.168.217.255 scope global secondary ens33:1 #漂移地址在此处
valid_lft forever preferred_lft forever
inet6 fe80::1e6f:d3ee:5554:1f34/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::ac8:77ad:9154:7983/64 scope link noprefixroute
valid_lft forever preferred_lft forever
从1 验证漂移地址
[root@localhost ~]# mysql -umha -p1234.Asd -h192.168.217.11 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 5.7.37-log MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> exit Bye 未登陆成功 [root@localhost ~]# mysql -umha -p1234.Asd -h192.168.217.252 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.217.252' (113) [root@localhost ~]# mysql -uroot -p1234.Azx mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 14 Server version: 5.7.37-log MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 解决方案 mysql> set GLOBAL read_only=1; Query OK, 0 rows affected (0.00 sec) 在次验证成功 [root@localhost ~]# mysql -umha -p1234.Asd -h192.168.217.252 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 22 Server version: 5.7.37-log MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> exit
主 关闭主库 制造故障
[root@localhost ~]# systemctl stop mysql
MHA
启动服务会阻塞终端
[root@localhost ~]# masterha_manager --conf=/etc/mha/mha.cnf
Thu May 19 18:24:16 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Thu May 19 18:24:16 2022 - [info] Reading application default configuration from /etc/mha/mha.cnf..
Thu May 19 18:24:16 2022 - [info] Reading server configuration from /etc/mha/mha.cnf..
[root@localhost ~]# masterha_check_ssh --conf=/etc/mha/mha.cnf Thu May 19 18:44:56 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Thu May 19 18:44:56 2022 - [info] Reading application default configuration from /etc/mha/mha.cnf.. Thu May 19 18:44:56 2022 - [info] Reading server configuration from /etc/mha/mha.cnf.. Thu May 19 18:44:56 2022 - [info] Starting SSH connection tests.. Thu May 19 18:44:58 2022 - [debug] Thu May 19 18:44:56 2022 - [debug] Connecting via SSH from root@192.168.217.11(192.168.217.11:22) to root@192.168.217.12(192.168.217.12:22).. Thu May 19 18:44:57 2022 - [debug] ok. Thu May 19 18:44:57 2022 - [debug] Connecting via SSH from root@192.168.217.11(192.168.217.11:22) to root@192.168.217.13(192.168.217.13:22).. Thu May 19 18:44:58 2022 - [debug] ok. Thu May 19 18:44:59 2022 - [debug] Thu May 19 18:44:56 2022 - [debug] Connecting via SSH from root@192.168.217.12(192.168.217.12:22) to root@192.168.217.11(192.168.217.11:22).. Thu May 19 18:44:57 2022 - [debug] ok. Thu May 19 18:44:57 2022 - [debug] Connecting via SSH from root@192.168.217.12(192.168.217.12:22) to root@192.168.217.13(192.168.217.13:22).. Thu May 19 18:44:59 2022 - [debug] ok. Thu May 19 18:45:00 2022 - [debug] Thu May 19 18:44:57 2022 - [debug] Connecting via SSH from root@192.168.217.13(192.168.217.13:22) to root@192.168.217.11(192.168.217.11:22).. Thu May 19 18:44:58 2022 - [debug] ok. Thu May 19 18:44:58 2022 - [debug] Connecting via SSH from root@192.168.217.13(192.168.217.13:22) to root@192.168.217.12(192.168.217.12:22).. Thu May 19 18:44:59 2022 - [debug] ok. Thu May 19 18:45:00 2022 - [info] All SSH connection tests passed successfully. [root@localhost ~]# masterha_manager --conf=/etc/mha/mha.cnf Thu May 19 18:48:36 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Thu May 19 18:48:36 2022 - [info] Reading application default configuration from /etc/mha/mha.cnf.. Thu May 19 18:48:36 2022 - [info] Reading server configuration from /etc/mha/mha.cnf.. Creating /var/tmp if not exists.. ok. Checking output directory is accessible or not.. ok. #此处显示主库已经切换到从库 从库可变成主库 Binlog found at /var/lib/mysql, up to mysql-bin.000002 Thu May 19 18:48:58 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Thu May 19 18:48:58 2022 - [info] Reading application default configuration from /etc/mha/mha.cnf.. Thu May 19 18:48:58 2022 - [info] Reading server configuration from /etc/mha/mha.cnf..
从1
查看从1 的网卡IP (此处查看需要一点时间,才能切换过来)
[root@localhost ~]# ip addr
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:49:b3:a1 brd ff:ff:ff:ff:ff:ff
inet 192.168.217.12/24 brd 192.168.217.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 192.168.217.252/24 brd 192.168.217.255 scope global secondary ens33:1 #漂移IP已切换到从机
valid_lft forever preferred_lft forever
inet6 fe80::1e6f:d3ee:5554:1f34/64 scope link noprefixroute
valid_lft forever preferred_lft forever
从1(新的master) 从2 查看日志 以下内容属于正常情况
从1
mysql> show slave status\G;
Empty set (0.00 sec)
ERROR:
No query specified
从2
[root@localhost ~]# mysql -umha -p1234.Asd -h192.168.217.252 mysql> show slave status\G; Empty set (0.00 sec) ERROR: No query specified mysql> exit [root@localhost ~]# mysql -uroot -p1234.Aqw mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.217.12 #新主库 已经是从1 ip Master_User: mha Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 154 Relay_Log_File: relay-log-bin.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes
验证
从1(新master)
[root@localhost ~]# mysql -uroot -p1234.Azx mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.29 sec) mysql> create database hanhan; Query OK, 1 row affected (0.33 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | hanhan | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)
从2
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hanhan |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.06 sec)
从1(新master)
mysql> drop database hanhan;
Query OK, 0 rows affected (0.05 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
从2
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
总结:本实验需要先安装MHA,后安装mysql,否责容易出错,
检测节点之间ssh是否正常连接 (此处容易报错 )
[root@localhost ~]# masterha_check_repl --conf=/etc/mha/mha.cnf
……
Thu May 19 17:27:56 2022 - [info] /usr/bin/master_ip_failover --command=status --ssh_user=root --orig_master_host=192.168.217.11 --orig_master_ip=192.168.217.11 --orig_master_port=3306
Subroutine main redefined at /usr/bin/master_ip_failover line 62.
Thu May 19 17:27:56 2022 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln226] Failed to get master_ip_failover_script status with return code 255:0.
Thu May 19 17:27:56 2022 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln424] Error happened on checking configurations. at /usr/bin/masterha_check_repl line 48.
Thu May 19 17:27:56 2022 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln523] Error happened on monitoring servers.
Thu May 19 17:27:56 2022 - [info] Got exit code 1 (Not master dead).
MySQL Replication Health is NOT OK!
此错误通过检查[root@localhost ~]# vim /usr/bin/master_ip_failover 此配置文件解决
参考文章
https://blog.csdn.net/wzt888_/article/details/81639753?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165283913216780357237067%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=165283913216780357237067&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-81639753-null-null.142v10pc_search_result_control_group,157v4control&utm_term=mha+mysql+%E9%AB%98%E5%8F%AF%E7%94%A8&spm=1018.2226.3001.4187
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。