生产环境MySQL数据库集群MHA上线实施方案
一.不停库操作
1.在所有节点安装MHA node所需的perl模块(需要有安装epel源)
yum install perl-DBD-MySQL -y
2.在所有的节点安装mha node
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
3.将系统调用的脚本统一放到一个目录下
#这里统一放在了/usr/bin/目录下
/usr/bin/apply_diff_relay_logs
/usr/bin/filter_mysqlbinlog
/usr/bin/purge_relay_logs
/usr/bin/save_binary_logs

  1. 安装MHA Manager根据生产环境实际IP更改配置文件和自动切换脚本
    安装MHA Manger依赖的perl模块
    yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y
    安装MHA Manager软件包
    rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
    修改对应mysql环境所需的master_ip_failover脚本和mha配置文件
    manger管理IP 配mha配置文件名 脚本名
    192.168.1.100 base.cnf base_master_ip_failover
    192.168.1.200 exam_study.cnf exam_study_master_ip_failover
  2. 设置集群内服务器ssh信任,使用检查MHA SSH插件脚本检测通过
    masterha_check_ssh --conf=/etc/masterha/base.cnf
    masterha_check_ssh --conf=/etc/masterha/exam_study.cnf
  3. 设置定期清除relay_logs crontab
    mysql默认会自动清理relay_logs,但MHA会使用relay_logs在主从切换时恢复数据,所以MHA会关闭relay_logs的自动清理功能,会导致relay_logs逐渐增多

/30 * purge_relay_logs --user=faxuan --password=faxuan.net --host=192.168.1.172 --port=3307 --disable_relay_log_purge >> /var/log/relay_log_purge.txt 2>&1
二.需要停库的操作
1.前端门户nginx挂维护页
2.停掉所有需要连接数据库的服务,避免写库
例如:resin、tomcat等服务
/etc/init.d/resin stop
/usr/local/apache-tomcat/bin/shutdown.sh
3.主库备份
用mysqldump或者xtrabackup对主库进行备份
4.关闭原keepalived,手动绑定VIP
/etc/init.d/keepalived stop
chkconfig keepalived off

base(我们公司会员积分的库):
ifconfig eth0:1 192.168.1.101/22 up
ifconfig eth1:1 10.0.0.101/24 up

exam、study(我们公司考试、学习的库)
ifconfig eth0:1 192.168.1.201/22 up
ifconfig eth1:1 10.0.0.201/24 up
5.开启MHA
base:
nohup masterha_manager --conf=/etc/masterha/base.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/base/manager.log 2>&1 &
#查看日志
tail -f /var/log/masterha/base/manager.log

exam_study:
nohup masterha_manager --conf=/etc/masterha/exam_study.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/exam_study/manager.log 2>&1 &
#查看日志
tail -f /var/log/masterha/exam_study/manager.log
6.测试
6.1准备测试数据库
create database testdb
6.2建表
CREATE TABLE test_table (
ID bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
DOMAIN_CODE varchar(20) NOT NULL COMMENT '考试单位编号',
EXAM_NAME varchar(300) NOT NULL COMMENT '考试名称',
EXAM_TYPE int(1) NOT NULL COMMENT '考试类型(正式考试,补考)',
TARGET_EXAM_ID bigint(20) DEFAULT NULL COMMENT '关联正式考试的ID(如果是补考,该处是必填)',
EXAM_PICTURE_PATH varchar(100) DEFAULT NULL COMMENT '图示路径',
EXAM_BEGIN_TIME timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '考试开始时间',
EXAM_END_TIME timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '考试结束时间',
EXAM_TIME int(3) NOT NULL COMMENT '考试时长',
EXAM_NEED_SCORE int(5) NOT NULL COMMENT '考试所需积分',
EXAM_PAPER_TYPE int(1) DEFAULT NULL COMMENT '考试试卷类型(0固定、1随机)',
EXAM_SCORE double(6,2) DEFAULT NULL COMMENT '考试总分(关联试卷后回填)',
EXAM_PASS_SCORE double(6,2) NOT NULL COMMENT '考试及格分',
EXAM_COMMIT_NUM int(2) NOT NULL COMMENT '参考最大次数',
EXAM_STATUS int(1) NOT NULL COMMENT '发布状态0未发布,1已发布',
EXAM_YEAR varchar(5) NOT NULL COMMENT '年份',
EXAM_PAPER_ID bigint(20) DEFAULT NULL COMMENT '关联试卷ID',
EXAM_DISCRIPTION varchar(1000) DEFAULT NULL COMMENT '考试备注',
OPERATOR_USER_ACCOUNT varchar(20) NOT NULL COMMENT '修改人',
OPERATOR_TIME timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '修改时间',
TARGET_DOMAIN_CODE varchar(20) DEFAULT NULL COMMENT '发布目标单位编号(发布时回填)',
RANK varchar(100) DEFAULT NULL COMMENT '职务级别(发布时回填)',
EXAM_DIPLOMA_ID bigint(20) DEFAULT NULL COMMENT '关联证书',
DIPLOMA_NAME varchar(200) DEFAULT NULL COMMENT '证书标题(关联证书后回填',
DIPLOMA_PICTURE_PATH varchar(200) DEFAULT NULL COMMENT '证书背景图片保存位置(关联证书后回填)',
INDUSTRY_CODES varchar(1000) DEFAULT NULL,
LANGUAGE int(2) NOT NULL DEFAULT '1' COMMENT '语言(0:全部,1:汉语,2:维语,3:蒙语,4:哈语)',
EXT1 int(1) NOT NULL DEFAULT '1' COMMENT '成绩计入学分的字段标识(0 是,1否)',
EXT2 int(3) DEFAULT NULL COMMENT '成绩所占比例',
EXT3 varchar(1) DEFAULT NULL,
EXT4 varchar(1) DEFAULT NULL,
EXT5 varchar(1) DEFAULT NULL,
PRIMARY KEY (ID),
KEY DOMAIN_CODE (DOMAIN_CODE),
KEY EXAM_PAPER_ID (EXAM_PAPER_ID)
) ENGINE=InnoDB AUTO_INCREMENT=365 DEFAULT CHARSET=utf8;
6.3写插入数据脚本
往数据库里插入数据的过程中停库测试
6.4网络中断测试
有的时候不是因为主库挂了,而是因为主库那台服务器网络中断了,所以也要进行VIP漂移等测试,所以这里要强调一下,不管是任何操作,或正上线任何东西,大家一定都要把问题考虑全面。
7.如果所有测试都没有问题,就恢复环境,补全mha配置文件,启动mha
因为测试完之后,mha会自动摘除down了的server标签,所以要补全配置文件
8.开启所有连库的服务(resin/tomcat)
/etc/init.d/resin start
/usr/local/apache-tomcat/bin/startup.sh
9.添加监控
利用zabbix等监控软件,监控mha的进程。

【注意】:之所以把命令都写出来,是因为,在生产环境中,一定要先写好上线流程的所有步骤,包括命令,然后在生产环境操作的时候,不要用手敲,一定要复制,复制一定不会出错,但是手敲,难免会出现错误,如果一个步骤出现问题,那么整个上线过程都会受到影响。