【2016年11月29日】 MHA安裝
今天剛好做線上MAH,所以好好看了MHA相關的問題。寫得與原版本有出處的地方,請去買書自個看哈!!
一、環境初始化
1.環境部署
MySQL主從從結構
VIP綁定
MHA部署
2.用戶名創建及管理
3.創建一個庫及初始化表結構
4.備份任務建立
+++++++++++++++++++++++++
環境介紹
test01172.16.7.151 node01 Master
test02172.16.7.152 node02Slave
test03172.16.7.153 管理節點
VIP 172.16.7.155
軟件版本
mysql-5.7.14
mha-0.57
基本路徑
/usr/local/mysql
mysqldir=/data/mysql/mysql_3306
tmpdir=/data/mysql/mysql_3306/tmp
logbin=/data/mysql/mysql_3306/logs
server-id ip最後一位+端口號
[1]. 環境部署
1) 安裝mysql環境
1. 下載
cd /data/server/tools && wget http://dev/mysql/com/get/Downloads/MySQL-5.7/mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz
2. 解壓
cd /opt/ && mkdir mysql && cd mysql tar -zxf /data/server/tools/mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz -C .
3. 軟連接
cd /usr/local/ && ln -s /opt/mysql/mysql-5.7.14-linux-glibc2.5-x86_64 mysql chown -R mysql:mysql /usr/local/mysql #添加環境變量 echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile source /etc/profile
4. 創建用戶
groupadd mysql useradd -M -g mysql -s /sbin/nologin -d /usr/local/mysql mysql
5. 根據配置文件,創建基本目錄
mkdir /data/mysql mkdir /data/mysql/mysql_3306 cd /data/mysql/mysql_3306 mkdir {data,logs,tmp} chown -R mysql:mysql /data/mysql/mysql_3306 創建配置文件 (請查看附件)
6. MySQL初始化
[ MySQL 5.7 ] cd /usr/local/mysql/ ./bin/mysqld --defaults-file=/data/mysql/mysql_3306/my_3306.cnf --initialize # 初始化密碼 # cat /data/mysql/mysql3306/data/error.log |grep password # 2016 ...... [Note] A temporary password is generated for root@localhost: DfmzxoGVr0=l # --initialize-insecure (初始化沒有密碼) [ MySQL 5.5/5.6] ./scripts/mysql_install_db --defaults-file=/data/mysql/mysql_3306/my_3306.cnf
7.創建啓動腳本
(1)自帶腳本
cd /usr/local/mysql/ support-files/mysql.server /etc/init.d/mysql #啓動、關閉 /etc/init.d/mysql start|stop|restart
(2)手工腳本
cd /data/mysql/mysql_3306/ echo "/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql_3306/my_3306.cnf >/dev/null &" >start.sh echo "/usr/local/mysql/bin/mysqladmin -S /data/mysql/mysql_3306/mysql.sock shutdown" >stop.sh
8. 登錄初始化
mysql -S /data/mysql/mysql_3306/mysql.sock -uroot -p(在初始化時自動生成) alter user user() identified by ""; #設置密碼爲空
9. 創建用戶
grant all privileges on *.* to 'admin'@'%' identified by '123456'; grant replication slave,replication client on *.* to 'repl'@'%' identified by 'repl'; cninfo(select,update,delete)
2) 服務器之間建立主從關係
chang master to master_host='172.16.7.151',master_user='repl',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=154; start slave;
3) 在管理節點上安裝mha
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-CPAN perl-* * rpm安裝 https://code.google.com/p/mysql-master-ha/ yum localinstall mha4*.rpm rpm -ql mha4mysql-manager-0.56-0.el6.noarch
* tar安裝
tar -zxf mha4mysql-node-0.57.tar.gz cd mha4mysql-node-0.57 perl Makefile.PL make && make install cd ../ tar -zxf mha4mysql-manager-0.57.tar.gz cd mha4mysql-manager-0.57 perl Makefile.PL make && make install
4) 在master和slave節點安裝node
* tar安裝
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager tar -zxf mha4mysql-node-0.57.tar.gz cd mha4mysql-node-0.57 perl Makefile.PL make && make instal
* 產生ssh-key
將三臺服務器SSH通過密鑰認證
* 手工加載vip地址(在Master節點上手工執行)
/etc/init_vip.sh
#在master上手工加載虛擬VIP,如若沒有加載,啓動管理進程時將報錯。
5) 在管理節點上傳文件
* 檢測文件
/usr/local/bin/master_ip_failover /usr/local/bin/master_ip_online_change
* 配置文件
/etc/app1.cnf
6) 啓動
nohup /usr/local/bin/masterha_manager --conf=/etc/app1.cnf --ignore_last_failover </dev/null >/var/log/masterha/manager.log 2>&1 &
# 檢測是否啓動成功
masterha_check_status --conf=/etc/app1.cnf
# 查看狀態信息
masterha_master_monitor --conf=/etc/app1.cnf
# 關閉MHA監控進程
masterha_stop --conf=/etc/app1.cnf
* 常用命令:
#manager端命令 masterha_manager#複製啓動MHA進程 masterha_master_switch#監控守護進程,將故障的master進行轉移 masterha_master_monitor#監控守護進程,判斷master是否崩潰 #node節點命令 save_binary_logs#保存和拷貝死掉的master上的binlog filter_mysqlbinlog#該腳本在新版本里廢棄掉了 purge_relay_logs#刪除sql_thread線程執行完的relay log apply_diff_relay_logs#識別差異binlog和relay log並應用
7) MHA架構注意事項
1. 防止網絡抖動誤切換(腦裂)造成數據不一致,VIP沒有采用keepalived,就是怕存在網絡抖動問題。如果出現腦裂,那麼從庫會搶奪VIP,由於主庫和從庫都有VIP,會造成IP衝突,影響業務。
Keepalived只能實現一個節點的監控,而通過自帶腳本可以實現兩個節點的監控
2. SSH
* 修改默認端口
master_ip_failover master_ip_online_change # MHA::ManagerUtil::exec_ssh_cmd( $orig_master_ip, '12345', "ip addr del 192.168.143.200/32 dev em2", undef # 替換掉所有默認22端口 # em2 替換成本機網卡即可
* 解決ssh有時會出現連接慢或不通的情況
grep 'ConnectTimeout' /etc/ssh/ssh_config ConnectTimeout 3 # 設置ssh連接超時時間
3. 死掉的master如何與新的Master建立同步複製關係?
在日誌中找到CHANGE MASTER TO執行,即可建立新同步複製關係: Tue Nov 29 17:00:50 2016 - [info] All other slaves should start replication from here. Statement should be: CHANGE MASTER TO MASTER_HOST='VCrawlerDB-S or 192.168.143.242', MASTER_PORT=3307, MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=658, MASTER_USER='sys_repl', MASTER_PASSWORD='xxx';
4. MHA結合半同步複製(semi replication)時應注意:
將DB服務器通過VLAN劃分爲一個獨立網段,與應用隔離。(由於MHA是基於ssh公私鑰認證的,一般服務器是禁止SSH互通,以避免******)
5. MHA 0.56不支持MariaDB 10的GTID複製,僅支持甲骨文MySQL的GTID複製
8) 經驗
1) MHA無法回切
2) master VIP需要自己手動配置
MHA多實例也很簡單,下次再更新