一、总概:
本文介绍了MySQL高可用性的实现方案MHA,MHA由Node和Manager组成,Node运行在每一台MySQL服务器上,不管是MySQL主服务器,还是MySQL从服务器,都要安装Node。主从安装keepalived,实现虚拟ip漂移,程序不用改IP自动切换。二、环境1. 软件版本操作系统版本:CentOS release 6.4MySQL数据库版本:5.6.14MHA版本:mha4mysql-node-0.54-0.el6.noarch.rpm、mha4mysql-manager-0.55-0.el6.noarch.rpmkeepalived版本:1.2.72. 主机部署MHA管理机、客户端模拟:192.168.1.100master:192.168.1.1slave:192.168.1.2三、实验步骤. 安装MySQL. MySQL配置主重复制. 建立ssh无密码登录环境. 安装MHAmha4mysql-node,mha4mysql-manager 软件包. 管理机manager上配置MHA文件. masterha_check_ssh工具验证ssh信任登录是否成功. masterha_check_repl工具验证mysql复制是否成功. 启动MHA manager,并监控日志文件. 测试master宕机后,是否会自动切换. 测试使用MHA的master_ip_failover,实现故障转移. 主从安装keepalived ,实现虚拟ip漂移
1. 安装MySQL
master的my.cnfmore /etc/my.cnf[mysqld]basedir = /usr/local/mysqldatadir = /usr/local/mysql/datasql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_UNSIGNED_SUBTRACTION port = 6603server_id = 1 lower_case_table_names = 1character_set_server = utf8autocommit = offinnodb_flush_log_at_trx_commit = 1skip_name_resolve = ONinnodb_strict_mode = ONlog_bin = mysql-bininnodb_data_home_dir = /usr/local/mysql/datainnodb_log_group_home_dir = /usr/local/mysql/databinlog_format=mixed
slave的my.cnf
more /etc/my.cnf
[mysqld]basedir = /usr/local/mysqldatadir = /usr/local/mysql/datasql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_UNSIGNED_SUBTRACTION port = 6603server_id = 2 lower_case_table_names = 1character_set_server = utf8autocommit = offinnodb_flush_log_at_trx_commit = 1skip_name_resolve = ONinnodb_strict_mode = ONlog_bin = mysql-bininnodb_data_home_dir = /usr/local/mysql/datainnodb_log_group_home_dir = /usr/local/mysql/databinlog_format=mixedread_only = ON
MySQL安装步骤略
2. MySQL配置主重复制(略)3. 建立ssh无密码登录环境
在192.168.1.100、192.168.1.1、192.168.1.2上修改hostname:
vi /etc/hosts192.168.1.100 manage192.168.1.1 master192.168.1.2 slave
# 在192.168.1.100:ssh-keygen -t rsassh-copy-id -i .ssh/id_rsa.pub root@192.168.1.1ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.2# 在192.168.1.1:ssh-keygen -t rsassh-copy-id -i .ssh/id_rsa.pub root@192.168.1.100ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.2# 在192.168.1.2:ssh-keygen -t rsassh-copy-id -i .ssh/id_rsa.pub root@192.168.1.100ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.1
测试:
# 在192.168.1.100:ssh 192.168.1.1ssh 192.168.1.2# 在192.168.1.1:ssh 192.168.1.100ssh 192.168.1.2# 在192.168.1.2:ssh 192.168.1.100ssh 192.168.1.1
4. 安装MHA mha4mysql-node,mha4mysql-manager 软件包
# 在192.168.1.100:rpm -ivh rpmforge-release-0.5.2-1.el6.rf.x86_64.rpmyum install perl-DBD-MySQLyum install perl-Config-Tinyyum install perl-Log-Dispatchyum install perl-Parallel-ForkManagerrpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpmrpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm# 在192.168.1.1:rpm -ivh rpmforge-release-0.5.2-1.el6.rf.x86_64.rpmyum install perl-DBD-MySQLyum install perl-Config-Tinyyum install perl-Log-Dispatchyum install perl-Parallel-ForkManagerrpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm# 在192.168.1.2:rpm -ivh rpmforge-release-0.5.2-1.el6.rf.x86_64.rpmyum install perl-DBD-MySQLyum install perl-Config-Tinyyum install perl-Log-Dispatchyum install perl-Parallel-ForkManagerrpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm
5. 管理机manager上配置MHA文件
在192.168.1.100:
mkdir -p /masterha/app1mkdir /etc/masterhavi /etc/masterha/app1.cnf[server default]user=rootpassword=12345manager_workdir=/masterha/app1manager_log=/masterha/app1/manager.logremote_workdir=/masterha/app1ssh_user=rootrepl_user=replrepl_password=12345ping_interval=1[server1]hostname=192.168.1.1port=6603master_binlog_dir=/usr/local/mysql/datacandidate_master=1[server2]hostname=192.168.1.2port=6603master_binlog_dir=/usr/local/mysql/datacandidate_master=1
6. masterha_check_ssh工具验证ssh信任登录是否成功
在192.168.1.100:masterha_check_ssh --conf=/etc/masterha/app1.cnf7. masterha_check_repl工具验证mysql复制是否成功在192.168.1.100:masterha_check_repl --conf=/etc/masterha/app1.cnf8. 启动MHA manager,并监控日志文件在192.168.1.100:nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log 2>&1# 单开一个终端监控日志tail -f tail -f /masterha/app1/manager.log
9. 测试master宕机后,是否会自动切换
在192.168.1.1:service mysql stop在192.168.1.2:mysql> show slave status\Gmysql> show variables like 'read_only';10. 测试使用MHA的master_ip_failover,实现故障转移
恢复主从配置(略)在192.168.1.100:在文件/etc/masterha/app1.cnf的[server default]段添加下面一行master_ip_failover_script=/tmp/master_ip_failover然后在/tmp/master_ip_failover写入如下代码:#!/usr/bin/env php $options['new_master_ip'], 'port' => $options['new_master_port'], ); $string = ' '; file_put_contents('config.php', $string, LOCK_EX); } exit(0); ?>
赋给这个文件可执行权限:
chmod +x /tmp/master_ip_failover安装PHP:
yum install php运行MHA进程:nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log 2>&1# 单开一个终端监控日志tail -f tail -f /masterha/app1/manager.log测试切换:
停止master上的mysql在192.168.1.1:service mysql stop在192.168.1.2:mysql> show slave status\Gmysql> show variables like 'read_only';11. 主从安装keepalived,实现虚拟ip漂移恢复主从配置(略)vip:192.168.1.3/192.168.1.4master:192.168.1.1slave:192.168.1.2在主从两个机器上安装keepalived(略)配置keepalived
在192.168.1.1:vim /etc/keepalived/keepalived.confglobal_defs { router_id MySQL-ha }vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 90 priority 100 advert_int 1 nopreempt authentication { auth_type PASS auth_pass 1111 }virtual_ipaddress { 192.168.1.3 192.168.1.4 }}virtual_server 192.168.1.3 6603 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 192.168.1.1 6603 { weight 1 notify_down /usr/local/mysql/bin/mysql.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 connect_port 6603 } }}
vim /usr/local/mysql/bin/mysql.sh
#!/bin/bashpkill keepalived
chmod +x /usr/local/mysql/bin/mysql.sh
# 先启动mysql,再启动keepalivedservice mysql startservice keepalived start在192.168.1.2:vim /etc/keepalived/keepalived.confglobal_defs { router_id MySQL-ha}vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 90 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 }virtual_ipaddress { 192.168.1.3 192.168.1.4 }}virtual_server 192.168.1.3 6603 { delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 192.168.1.2 6603 { weight 1 notify_down /usr/local/mysql/bin/mysql.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 connect_port 6603 } }}
vim /usr/local/mysql/bin/mysql.sh
#!/bin/bashpkill keepalived
chmod +x /usr/local/mysql/bin/mysql.sh
# 先启动mysql,再启动keepalivedservice mysql startservice keepalived start在192.168.1.100:
运行MHA进程:nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log 2>&1# 单开一个终端监控日志tail -f tail -f /masterha/app1/manager.log测试:
在192.168.1.1:ip a在192.168.1.2:ip amysql> show slave status\G在192.168.1.100:mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'read_only'"停master的mysql,再查看在192.168.1.1:service mysql stopip a在192.168.1.2:ip amysql> show slave status\G在192.168.1.100:mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'server_id'"mysql -u u1 -p12345 -P 6603 -h 192.168.1.3 -e "show variables like 'read_only'"四、参考http://os.51cto.com/art/201307/401702.htmhttp://www.tuicool.com/articles/ZFfquahttp://www.tuicool.com/articles/ErU7nuhttp://www.tuicool.com/articles/2ENRjaIhttp://blog.itpub.net/14594028/viewspace-1073516/