欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

生产环境MySQL数据库集群MHA上线实施方案

程序员文章站 2022-03-09 12:58:07
生产环境MySQL数据库集群MHA上线实施方案 一.不停库操作 1.在所有节点安装MHAnode所需的perl模块(需要有安装epel源) 2.在所有的节点安装mhanode 3.将系统调用的脚本统一放到一个目录下 4. 安装MHAManager根据生产环境实际IP更改配置文件和自动切换脚本 l 安 ......

生产环境mysql数据库集群mha上线实施方案

一.不停库操作

1.在所有节点安装mhanode所需的perl模块(需要有安装epel源)

yum install perl-dbd-mysql -y

2.在所有的节点安装mhanode

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

4. 安装mhamanager根据生产环境实际ip更改配置文件和自动切换脚本

安装mha manger依赖的perl模块

yum install perl-dbd-mysql perl-config-tiny perl-log-dispatch perl-parallel-forkmanagerperl-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

5. 设置集群内服务器ssh信任,使用检查mha ssh插件脚本检测通过

masterha_check_ssh--conf=/etc/masterha/base.cnf 
masterha_check_ssh--conf=/etc/masterha/exam_study.cnf

6. 设置定期清除relay_logscrontab

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.txt2>&1

二.需要停库的操作

1.前端门户nginx挂维护页

2.停掉所有需要连接数据库的服务,避免写库

例如:resin、tomcat等服务

/etc/init.d/resinstop
/usr/local/apache-tomcat/bin/shutdown.sh

3.主库备份

用mysqldump或者xtrabackup对主库进行备份

4.关闭原keepalived,手动绑定vip

/etc/init.d/keepalivedstop
chkconfig keepalivedoff

 
base(我们公司会员积分的库):

ifconfig eth0:1192.168.1.101/22 up
ifconfig eth1:110.0.0.101/24 up

 
exam、study(我们公司考试、学习的库)

ifconfig eth0:1192.168.1.201/22 up 
ifconfig eth1:110.0.0.201/24 up

5.开启mha

base:

nohupmasterha_manager --conf=/etc/masterha/base.cnf --remove_dead_master_conf--ignore_last_failover < /dev/null > /var/log/masterha/base/manager.log2>&1 &

#查看日志

tail -f /var/log/masterha/base/manager.log

 
exam_study:

nohupmasterha_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 databasetestdb

6.2建表

create table`test_table` (
 `id` bigint(20) not nullauto_increment comment '主键',
                        `domain_code`varchar(20) not null comment '考试单位编号',
                        `exam_name` varchar(300)not null comment '考试名称',
                        `exam_type` int(1) notnull 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) notnull 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) notnull 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) notnull default '1' comment'语言(0:全部,1:汉语,2:维语,3:蒙语,4:哈语)',
                        `ext1` int(1) not nulldefault '1' comment '成绩计入学分的字段标识(0 是,1否)',
                        `ext2` int(3) defaultnull 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=innodbauto_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的进程。
 
【注意】:之所以把命令都写出来,是因为,在生产环境中,一定要先写好上线流程的所有步骤,包括命令,然后在生产环境操作的时候,不要用手敲,一定要复制,复制一定不会出错,但是手敲,难免会出现错误,如果一个步骤出现问题,那么整个上线过程都会受到影响。