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节点上):





 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄