生產環境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
- 安裝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 - 設置集羣內服務器ssh信任,使用檢查MHA SSH插件腳本檢測通過
masterha_check_ssh --conf=/etc/masterha/base.cnf
masterha_check_ssh --conf=/etc/masterha/exam_study.cnf - 設置定期清除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的進程。
【注意】:之所以把命令都寫出來,是因爲,在生產環境中,一定要先寫好上線流程的所有步驟,包括命令,然後在生產環境操作的時候,不要用手敲,一定要複製,複製一定不會出錯,但是手敲,難免會出現錯誤,如果一個步驟出現問題,那麼整個上線過程都會受到影響。