MHA部署
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信息
Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。save_binary_logs 保存和复制master的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞SQL线程)
1.部署MHA
角色 ip地址 主机名 server_id 类型 Monitor host 192.168.1.36 server01 - 监控复制组 Master 192.168.1.36 server02 11 写入 Candicate master 192.168.1.155 server03 12 读 Slave 192.168.1.130 server04 13 读
其中master对外提供写服务,备选master(实际的slave,主机名server03)提供读服务,slave也提供相关的读服务,一旦master宕机,将会把备选master提升为新的master,slave指向新的master
(1)在所有节点安装MHA node所需的perl模块(DBD:mysql)
yum install perl-App-cpanminus.noarch -y
which cpanm
cat > /root/list << EOF install DBD::mysql EOF for package in `cat /root/list`; do cpanm $package; done
如果有安装epel源,也可以使用yum安装
yum install perl-DBD-MySQL -y
(2)在所有的节点安装mha node:
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz tar fvxz mha4mysql-node-0.58.tar.gz cd mha4mysql-node-0.58 perl Makefile.PL make && make install
安装完成后会在/usr/local/bin目录下生成以下脚本文件
[root@192.168.1.36 bin]# pwd /usr/local/bin [root@192.168.1.36 bin]# ll total 40 -r-xr-xr-x 1 root root 15498 Apr 20 10:05 apply_diff_relay_logs -r-xr-xr-x 1 root root 4807 Apr 20 10:05 filter_mysqlbinlog -r-xr-xr-x 1 root root 7401 Apr 20 10:05 purge_relay_logs -r-xr-xr-x 1 root root 7263 Apr 20 10:05 save_binary_logs
2.安装MHA Manager
MHA Manager中主要包括了几个管理员的命令行工具,例如master_manger,master_master_switch等。MHA Manger也依赖于perl模块,具体如下:
(1)安装MHA Node软件包之前需要安装依赖。我这里使用yum完成,没有epel源的可以使用上面提到的脚本(epel源安装也简单)。注意:在MHA Manager的主机也是需要安装MHA Node。
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install perl-DBD-MySQL -y
安装MHA Node软件包,和上面的方法一样,如下:
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz
tar fvxz mha4mysql-node-0.58.tar.gz cd mha4mysql-node-0.58 perl Makefile.PL make && make install
(2)安装MHA Manager。首先安装MHA Manger依赖的perl模块(我这里使用yum安装):
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y
安装MHA Manager软件包:
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gz tar fvxz mha4mysql-manager-0.58.tar.gz cd mha4mysql-manager-0.58 perl Makefile.PL make make install
安装完成后会在/usr/local/bin目录下面生成以下脚本文件
[root@192.168.1.36 bin]# pwd /usr/local/bin [root@192.168.1.36 bin]# ll total 76 -r-xr-xr-x 1 root root 15498 Apr 20 10:58 apply_diff_relay_logs -r-xr-xr-x 1 root root 4807 Apr 20 10:58 filter_mysqlbinlog -r-xr-xr-x 1 root root 1995 Apr 20 11:33 masterha_check_repl -r-xr-xr-x 1 root root 1779 Apr 20 11:33 masterha_check_ssh -r-xr-xr-x 1 root root 1865 Apr 20 11:33 masterha_check_status -r-xr-xr-x 1 root root 3201 Apr 20 11:33 masterha_conf_host -r-xr-xr-x 1 root root 2517 Apr 20 11:33 masterha_manager -r-xr-xr-x 1 root root 2165 Apr 20 11:33 masterha_master_monitor -r-xr-xr-x 1 root root 2373 Apr 20 11:33 masterha_master_switch -r-xr-xr-x 1 root root 3749 Apr 20 11:33 masterha_secondary_check -r-xr-xr-x 1 root root 1739 Apr 20 11:33 masterha_stop -r-xr-xr-x 1 root root 7401 Apr 20 10:58 purge_relay_logs -r-xr-xr-x 1 root root 7263 Apr 20 10:58 save_binary_logs [root@192.168.1.36 bin]#
复制相关脚本到/usr/local/bin目录,软件包解压缩后就有了,不是必须,因为这些脚本不完整
[root@192.168.1.36 scripts]# pwd /usr/local/mha4mysql-manager-0.58/samples/scripts [root@192.168.1.36 scripts]# ll total 32 -rwxr-xr-x 1 root root 3443 Jan 8 2012 master_ip_failover #自动切换时vip管理的脚本,不是必须,如果我们使用keepalived的,我们可以自己编写脚本完成对vip的管理,比如监控mysql,如果mysql异常,我们停止keepalived就行,这样vip就会自动漂移 -rwxr-xr-x 1 root root 9186 Jan 8 2012 master_ip_online_change #在线切换时vip的管理,不是必须,同样可以可以自行编写简单的shell完成 -rwxr-xr-x 1 root root 11867 Jan 8 2012 power_manager #故障发生后关闭主机的脚本,不是必须 -rwxr-xr-x 1 root root 1360 Jan 8 2012 send_report #因故障切换后发送报警的脚本,不是必须,可自行编写简单的shell完成。 [root@192.168.1.36 scripts]# cp * /usr/local/bin/
3.配置SSH登录无密码验证(使用key登录,工作中常用)我的测试环境已经是使用key登录,服务器之间无需密码验证的。关于配置使用key登录,有一点需要注意:不能禁止 password 登陆,否则会出现错误
centos7配置SSH免密码登录(centos7.4版本以上)
需求 :A机器想要ssh登录到B机器上。
A就是客户端 B就是服务器首先要在客户端A上操作如下
配置ssh配置文件
vim /etc/ssh/sshd_config
#PermitRootLogin yes #PubkeyAuthentication yes 将这两行的注释#去掉
重启ssh服务
systemctl stop sshd.service
systemctl start sshd.service
配置ssh服务开机自启动
systemctl enable sshd.service
在A客户端上生成公钥和私钥:
[root@localhost mysql]# ssh-keygen -t rsa 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: ...
拷贝公钥到B机器上
scp /root/.ssh/id_rsa.pub root@192.168.1.155:/root/id_rsa.pub
B机器上配置ssh配置文件
vim /etc/ssh/sshd_config
#PermitRootLogin yes
#PubkeyAuthentication yes
将这两行的注释#去掉
然后重启sshd
将从A机复制的id_rsa.pub添加到.ssh/authorzied_keys文件里
cat /root/id_rsa.pub >> .ssh/authorized_keys
authorized_keys 文件夹权限修改 600
chmod 600 .ssh/authorized_keys
此时A机可以直接登陆B机了
MHA中需要配置,monitor可以直接登陆各个node,node之间也要互通
4.搭建主从复制环境
注意:binlog-do-db 和 replicate-ignore-db 设置必须相同。 MHA 在启动时候会检测过滤规则,如果过滤规则不同,MHA 不启动监控和故障转移
-- Master 节点 -- mysql> create user 'rpl'@'%' identified by '123'; Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to 'rpl'@'%'; -- 需要replication和slave的权限,线上建议 限制成内网的网段 Query OK, 0 rows affected (0.01 sec)
测试slave节点是否可以通过 rpl@'%' 连接成功
mysql -urpl -p123 -h192.168.1.36
导出数据
mydumper -u root -p 123 --regex "^burn_test\..*$" -o backup
将备份目录复制到 Slave 节点
然后在slave节点恢复数据
time myloader -B employees1 -u root -p 123 -S /tmp/mysql.sock -t 4 -d /backup/
查看 master status ,查看mydumper导出的/backup/metadata
Started dump at: 2016-03-21 22:56:22 SHOW MASTER STATUS: Log: bin.000004 Pos: 1360 GTID:c241b625-e932-11e5-bb11-5254f035dabc:1-133 Finished dump at: 2016-03-21 22:56:22
change master
change master to master_host='192.168.1.36', master_user='rpl', master_password='123', master_port=3306, master_log_file='bin.000004', master_log_pos=1360
然后start slave,再show slave status即可
5.配置MHA
(1)创建MHA的工作目录,并且创建相关配置文件(在软件包解压后的目录里面有样例配置文件)。
[root@yanglin4 ~]# mkdir -p /etc/masterha [root@yanglin4 ~]# cp /usr/local/mha4mysql-manager-0.58/samples/conf/app1.cnf /etc/masterha/ [root@yanglin4 ~]#
修改app1.cnf配置文件,修改后的文件内容如下(注意,配置文件中的注释需要去掉):
[root@yanglin4 ~]# cat /etc/masterha/app1.cnf
[server default]
manager_workdir=/var/log/masterha/app1.log //设置manager的工作目录
manager_log=/var/log/masterha/app1/manager.log //设置manager的日志
master_binlog_dir=/data/datamysql //设置master 保存binlog的位置,以便MHA可以找到master的日志,我这里的也就是mysql的数据目录
master_ip_failover_script= /usr/local/bin/master_ip_failover //设置自动failover时候的切换脚本
master_ip_online_change_script= /usr/local/bin/master_ip_online_change //设置手动切换时候的切换脚本
password=123456 //设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
user=root 设置监控用户root
ping_interval=1 //设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover
remote_workdir=/tmp //设置远端mysql在发生切换时binlog的保存位置
repl_password=123456 //设置复制用户的密码
repl_user=rpl //设置复制环境中的复制用户名
report_script=/usr/local/send_report //设置发生切换后发送的报警的脚本
secondary_check_script= /usr/local/bin/masterha_secondary_check -s 192.168.1.155 -s 192.168.1.130
shutdown_script="" //设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)
ssh_user=root //设置ssh的登录用户名
[server1]
hostname=192.168.1.36
port=3306
[server2]
hostname=192.168.1.155
port=3306
candidate_master=1 //设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave
check_repl_delay=0 //默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master
[server3]
hostname=192.168.1.130
port=3306
(2)设置relay log的清除方式(在每个slave节点上):
