第7章 一篇、【MHA】安裝(單實例)

【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多實例也很簡單,下次再更新



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章