一 MHA高可用架构
架构从架构上来说,MHA分为Node和Manager两部分1)Node我们知道,MHA是基于MySQL Replication环境的,在该环境中,不管是Master角色,还是Slave角色,都统称为Node,是被MHA监控管理的对象节点。Node服务器上需要安装MHA Node包。2)ManagerManager为MHA架构中的管理者,建议部署在一独立的服务器上,当然也可部署在某个Slave上,但该Slave永远不要被选择成为新的Master,否则故障切换后的MHA架构就失去了高可用性。Manager服务器需要安装MHA Manager包,并完善一个主配置文件。一个Manager可管理多套MySQL Replication环境。
二 MHA工作原理。。。 二 mysql主从环境搭建
make_replication_sandbox --gtid /tmp/5.7.30
installing and starting master installing slave 1 installing slave 2 starting slave 1 .. sandbox server started starting slave 2 .... sandbox server started initializing slave 1 initializing slave 2 replication directory installed in $HOME/sandboxes/rsandbox_5_7_30
我们进入到安装好的目录,检查主从状态
使用mysql-sandbox只需要这么简单一步,一个一主两从的mysql环境就搭建好了
三 MHA环境搭建1.下载MHA软件,github下载地址:
https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58 2.安装依赖
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y
3.安装MHA node及manager
[root@sandbox tmp]# rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm 准备中... ################################# [100%] 正在升级/安装... 1:mha4mysql-node-0.58-0.el7.centos ################################# [100%] [root@sandbox tmp]# rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm 准备中... ################################# [100%] 正在升级/安装... 1:mha4mysql-manager-0.58-0.el7.cent################################# [100%]
4.准备配置文件配置全局配置文件(故障切换脚本不会写,会了补上)
[root@sandbox .ssh]# vim /etc/masterha_default.cnf [server default] user=mha password=mha ssh_user=root repl_user=rsandbox repl_password=rsandbox #master_binlog_dir= /var/lib/mysql #remote_workdir=/data/log/masterha ping_interval=3 secondary_check_script=masterha_secondary_check -s 127.0.0.1 #master_ip_failover_script="/etc/mha/scripts/master_ip_failover" #master_ip_online_change_script="/etc/mha/scripts/master_ip_online_change" #report_script="/etc/mha/scripts/send_report"
配置主配置文件
[root@sandbox .ssh]# cat /etc/mha/ app1.cnf scripts/ [root@sandbox .ssh]# cat /etc/mha/app1.cnf [server default] manager_workdir=/var/log/mha/app1 manager_log=/var/log/mha/app1/manager.log [server1] hostname=127.0.0.1 port=22805 master_binlog_dir=/root/sandboxes/rsandbox_5_7_30/master/data [server2] hostname=127.0.0.1 port=22806 master_binlog_dir=/root/sandboxes/rsandbox_5_7_30/node1/data [server3] hostname=127.0.0.1 port=22807 master_binlog_dir=/root/sandboxes/rsandbox_5_7_30/node2/data
5.配置mysql软连接
ln -s /tmp/5.7.30/bin/mysql /usr/bin/mysql ln -s /tmp/5.7.30/bin/mysqlbinlog /usr/bin/mysqlbinlog
6.用root用户登陆主库,创建MHA需要的用户
[root@sandbox ~]# mysql -uroot -pmsandbox -S /tmp/mysql_sandbox22805.sock mysql> grant all privileges on *.* to 'mha'@'%' identified by 'mha'; Query OK, 0 rows affected, 1 warning (0.01 sec)
7.同主机下也要配置ssh互信,不然MHA检测不过
cp id_rsa.pub authorized_keys
8.ssh互信检查
masterha_check_ssh --conf=/etc/mha/app1.cnf
看到 All SSH connection tests passed successfully. 则字样检测通过9.主从状态检查
masterha_check_repl --conf=/etc/mha/app1.cnf
127.0.0.1(127.0.0.1:22805) (current master) +--127.0.0.1(127.0.0.1:22806) +--127.0.0.1(127.0.0.1:22807) Thu Aug 27 19:38:05 2020 - [info] Checking replication health on 127.0.0.1.. Thu Aug 27 19:38:05 2020 - [info] ok. Thu Aug 27 19:38:05 2020 - [info] Checking replication health on 127.0.0.1.. Thu Aug 27 19:38:05 2020 - [info] ok. Thu Aug 27 19:38:05 2020 - [warning] master_ip_failover_script is not defined. Thu Aug 27 19:38:05 2020 - [warning] shutdown_script is not defined. Thu Aug 27 19:38:05 2020 - [info] Got exit code 0 (Not master dead). MySQL Replication Health is OK.
10.开启MHA
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
11.查看MHA状态
[root@sandbox rsandbox_5_7_30]# masterha_check_status --conf=/etc/mha/app1.cnf app1 (pid:120310) is running(0:PING_OK), master:127.0.0.1
[root@sandbox .ssh]# tailf /var/log/mha/app1/manager.log 127.0.0.1(127.0.0.1:22805) (current master) +--127.0.0.1(127.0.0.1:22806) +--127.0.0.1(127.0.0.1:22807) Thu Aug 27 19:06:38 2020 - [warning] master_ip_failover_script is not defined. Thu Aug 27 19:06:38 2020 - [warning] shutdown_script is not defined. Thu Aug 27 19:06:38 2020 - [info] Set master ping interval 3 seconds. Thu Aug 27 19:06:38 2020 - [info] Set secondary check script: masterha_secondary_check -s 127.0.0.1 Thu Aug 27 19:06:38 2020 - [info] Starting ping health check on 127.0.0.1(127.0.0.1:22805).. Thu Aug 27 19:06:38 2020 - [info] Ping(SELECT) succeeded, waiting until MySQL doesn't respond..
12.手工Kill掉主库22805端口的mysqld_safe和mysqld服务,但是不会自动切换,因为我没写脚本
