MHA 安装手册
MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。
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的脚本触发,无需人为操作)主要包括以下几个工具:
save_binary_logs 保存和复制master的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞SQL线程)
1.部署MHA
接下来部署MHA,具体的搭建环境如下(所有操作系统均为centos 6.2 64bit,不是必须,server03和server04是server02的从,):
角色 ip地址 主机名 server_id 类型
Monitor host 10.10.10.155 db-manager - 监控复制组
Master 10.10.10.156 db-master 1 写入
Candicate master 10.10.10.157 db-slave01 2 读
Slave 10.10.10.158 db-slave02 3 读
其中master对外提供写服务,备选master(实际的slave,主机名server03)提供读服务,
slave也提供相关的读服务,一旦master宕机,将会把备选master提升为新的master,slave指向新的master
(1)在所有节点安装MHA node所需的perl模块(DBD:mysql),安装脚本如下:
(run this shell )
cat install.sh
#!/bin/bash
wget http://xrl.us/cpanm --no-check-certificate
mv cpanm /usr/bin
chmod 755 /usr/bin/cpanm
cat > /root/list << EOF
install DBD::mysql
EOF
for package in `cat /root/list`
do
cpanm $package
done
如果有安装epel源,也可以使用yum安装
安装以下perl 支持包
yum install perl-DBD-MySQL -y
yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y
yum install gettext-devel -y
yum install perl-CPAN -y
在所有的节点安装mha node:
tar xf mha4mysql-node-0.56.tar.gz
cd mha4mysql-node-0.56
perl Makefile.PL
make && make install
安装完成后,会生成node 所需的工具包
[root@bd-slave02 mha4mysql-node-0.56]# ll /usr/local/bin
总用量 44
-r-xr-xr-x 1 root root 16367 1月 31 11:33 apply_diff_relay_logs
-r-xr-xr-x 1 root root 4807 1月 31 11:33 filter_mysqlbinlog
-r-xr-xr-x 1 root root 8261 1月 31 11:33 purge_relay_logs
-r-xr-xr-x 1 root root 7525 1月 31 11:33 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
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y
安装MHA Manager软件包:
[root@bd-master download]# tar xf mha4mysql-manager-0.56.tar.gz
[root@bd-master download]# cd mha4mysql-manager-0.56/
[root@bd-master mha4mysql-manager-0.56]# perl Makefile.PL
*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- DBI ...loaded. (1.627)
- DBD::mysql ...loaded. (4.023)
- Time::HiRes ...loaded. (1.9725)
- Config::Tiny ...loaded. (2.14)
- Log::Dispatch ...loaded. (2.41)
- Parallel::ForkManager ...loaded. (1.18)
- MHA::NodeConst ...missing. (注意: 在manager 节点,也需要安装node ,安装完后,再回来安装manager cefp )
==> Auto-install the 1 mandatory module(s) from CPAN? [y] y
安装完成后,会生成以下文件
[root@bd-master mha4mysql-manager-0.56]# ll /usr/local/bin
总用量 84
-r-xr-xr-x 1 root root 16367 1月 31 11:46 apply_diff_relay_logs
-r-xr-xr-x 1 root root 4807 1月 31 11:46 filter_mysqlbinlog
-r-xr-xr-x 1 root root 1995 1月 31 11:47 masterha_check_repl
-r-xr-xr-x 1 root root 1779 1月 31 11:47 masterha_check_ssh
-r-xr-xr-x 1 root root 1865 1月 31 11:47 masterha_check_status
-r-xr-xr-x 1 root root 3201 1月 31 11:47 masterha_conf_host
-r-xr-xr-x 1 root root 2517 1月 31 11:47 masterha_manager
-r-xr-xr-x 1 root root 2165 1月 31 11:47 masterha_master_monitor
-r-xr-xr-x 1 root root 2373 1月 31 11:47 masterha_master_switch
-r-xr-xr-x 1 root root 5171 1月 31 11:47 masterha_secondary_check
-r-xr-xr-x 1 root root 1739 1月 31 11:47 masterha_stop
-r-xr-xr-x 1 root root 8261 1月 31 11:46 purge_relay_logs
-r-xr-xr-x 1 root root 7525 1月 31 11:46 save_binary_logs
[root@bd-master mha4mysql-manager-0.56]#
拷贝脚本到/usr/local/bin
[root@bd-master mha4mysql-manager-0.56]# ll samples/scripts
总用量 32
-rwxr-xr-x 1 4984 users 3648 4月 1 2014 master_ip_failover
-rwxr-xr-x 1 4984 users 9870 4月 1 2014 master_ip_online_change
-rwxr-xr-x 1 4984 users 11867 4月 1 2014 power_manager
-rwxr-xr-x 1 4984 users 1360 4月 1 2014 send_report
[root@bd-master mha4mysql-manager-0.56]# cp samples/scripts/* /usr/local/bin
[root@bd-master mha4mysql-manager-0.56]#
3.配置SSH登录无密码验证
(节抄自以前配置oracle rac)
设置SSH,
1).在主节点RAC1上以grid,oracle用户身份生成用户的公匙和私匙
# su - oracle
$ mkdir ~/.ssh
$ ssh-keygen -t rsa
$ ssh-keygen -t dsa
2).在副节点RAC2上执行相同的操作,确保通信无阻
# ping rac1-eth0
# ping rac1-eth1
# su - oracle
$ mkdir ~/.ssh
$ ssh-keygen -t rsa
$ ssh-keygen -t dsa
3).在主节点RAC1上oracle用户执行以下操作
$ touch ~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
#将RAC2的加入
$ ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ ssh rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys
4).主节点RAC1上执行检验操作
$ ssh rac1 date
$ ssh rac2 date
$ ssh rac1-private date
$ ssh rac2-private date
5).在副节点RAC2上执行检验操作
$ ssh rac1 date
$ ssh rac2 date
$ ssh rac1-private date
$ ssh rac2-private date
4.编译安装mysql 主从架构
见mysql 主从架构安装.log
5.配置半同步
首先加载插件
因用户需执行INSTALL PLUGIN, SET GLOBAL, STOP SLAVE和START SLAVE操作,所以用户需有SUPER权限。
主:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
从:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
查看插件是否加载成功
有两种方式
1.
mysql> show plugins;
rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL
2.
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE |
+----------------------+---------------+
1 row in set (0.00 sec)
启动半同步复制
在安装完插件后,半同步复制默认是关闭的,这时需设置参数来开启半同步
主:
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
从:
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
以上的启动方式是在命令行操作,也可写在配置文件中。
主:
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
从:
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1
在有的高可用架构下,master和slave需同时启动,以便在切换后能继续使用半同步复制
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1
重启从上的IO线程
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
如果没有重启,则默认还是异步复制,重启后,slave会在master上注册为半同步复制的slave角色。
这时候,主的error.log中会打印如下信息:
2016-08-05T10:03:40.104327Z 5 [Note] While initializing dump thread for slave with UUID <ce9aaf22-5af6-11e6-850b-000c2988bad2>, found a zombie dump thread with the same UUID. Master is killing the zombie dump thread(4).
2016-08-05T10:03:40.111175Z 4 [Note] Stop asynchronous binlog_dump to slave (server_id: 2)
2016-08-05T10:03:40.119037Z 5 [Note] Start binlog_dump to master_thread_id(5) slave_server(2), pos(mysql-bin.000003, 621)
2016-08-05T10:03:40.119099Z 5 [Note] Start semi-sync binlog_dump to slave (server_id: 2), pos(mysql-bin.000003, 621)
查看半同步是否在运行
主:
mysql> show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON |
+-----------------------------+-------+
1 row in set (0.00 sec)
从:
mysql> show status like 'Rpl_semi_sync_slave_status';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.20 sec)
这两个变量常用来监控主从是否运行在半同步复制模式下。
6.配置MHA
5.1 配置文件修改
创建MHA的工作目录,并且创建相关配置文件(在软件包解压后的目录里面有样例配置文件)。
# mkdir -p /etc/masterha
# cp mha4mysql-manager-0.53/samples/conf/app1.cnf
#配置文件
[root@bd-master ~]# cat /etc/masterha
masterha/ masterha_default.cnf
[root@bd-master ~]# cat /etc/masterha/app1.cnf
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
master_binlog_dir=/data/mysql
master_ip_failover_script= /usr/local/bin/master_ip_failover
master_ip_online_change_script= /usr/local/bin/master_ip_online_change
user=monitor
password=monitor_password
ping_interval=1
remote_workdir=/tmp
repl_user=repl
repl_password=repl_password
report_script=/usr/local/bin/send_report
secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02
shutdown_script=""
ssh_user=root
[server1]
hostname=10.10.10.156
port=3301
[server2]
hostname=10.10.10.157
port=3301
candidate_master=1
check_repl_delay=0
[server3]
hostname=10.10.10.158
port=3301
5.2设置relay log 清除方式(在每个slave)
#mysql -uroot -p -e 'set global relay_log_purge=0'
MHA节点中包含了pure_relay_logs命令工具,它可以为中继日志创建硬链接,执行SET GLOBAL relay_log_purge=1,
等待几秒钟以便SQL线程切换到新的中继日志,再执行SET GLOBAL relay_log_purge=0。
5.3 设置定时清理relay 脚本
# mkdir /data/masterha/log -p
# mkdir /opt/shell
# cat /opt/shell/purge_relay_log.sh
#!/bin/bash
user=monitor
passwd=monitor_password
port=3301
log_dir='/data/masterha/log'
work_dir='/data'
purge='/usr/local/bin/purge_relay_logs'
if [ ! -d $log_dir ]
then
mkdir $log_dir -p
fi
$purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>&1
#定期
#crontab -l
0 4 * * * /bin/bash /opt/shell/purge_relay_log.sh
(这里我使用了monitor 用户,注意权限问题,)
5.4 检查
5.4.1 检查MHA Manger到所有MHA Node的SSH连接状态:
masterha_check_ssh --conf=/etc/masterha/app1.cnf
5.4.2 通过masterha_check_repl脚本查看整个集群的状态
masterha_check_repl --conf=/etc/masterha/app1.cnf
5.4.3 检查MHA Manager的状态:
masterha_check_status --conf=/etc/masterha/app1.cnf
6.开启MHA Manager监控
# nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
再次检查一下启动状态:
masterha_check_status --conf=/etc/masterha/app1.cnf
关闭监控
masterha_stop --conf=/etc/masterha/app1.cnf
7. VIP 配置
7. keepalived方式管理虚拟ip,keepalived配置方法如下:
7.1 下载软件进行并进行安装(db-master,db-slave01 两台都要安装,备选master:db-slave01,在没有切换以前是slave):
# wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
# tar xf keepalived-1.2.12.tar.gz
# cd keepalived-1.2.12
# ./configure --prefix=/usr/local/keepalived
# make && make install
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
7.2 配置keepalived的配置文件,在master上配置 (db-master)
8.
参考URL:
https://www.cnblogs.com/gomysql/p/3675429.html
VIP 配置MHA