mysql進階(三)MHA高可用集羣

簡介:
1、MHA目前在MySQL高可用方面是一個相對成熟的解決方案,是MySQL高可用環境下故障切換和主從提升的高可用軟件
2、MHA能在短時間內完成故障切換,並且在最大程度上保證數據的一致性,以達到真正意義上的高可用
3、MHA基於mysql協議,通過mysql主從或主主進行復制
4、MHA官網:https://code.google.com/p/mysql-master-ha/

軟件由兩部分組成:MHA Manager(關理節點)和MHA Node(數據節點)
1、MHA Manager可以單獨部署在一臺獨立的機器上管理多個master-slave集羣,也可以部署在一臺slave節點上
2、MHA Node運行在每臺MySQL服務器上
3、MHA_Manager會定時探測集羣中的master節點,當master出現故障時,
   它可以自動將最新數據的slave提升爲新的master,然後將所有其他的slave重新指向新的master
4、MHA配合半同步複製使用可以最大限度的保證數據安全性

工作原理:
1、從宕機崩潰的master保存二進制日誌事件(binlog events)
2、識別含有最新更新的slave
3、應用差異的中繼日誌(relay log)到其他的slave
4、應用從master保存的二進制日誌事件(binlog events)
5、提升一個slave爲新的master
6、使其他的slave連接新的master進行復制

MHA工具:
Manager工具包:
masterha_check_ssh            #檢查MHA的SSH配置狀況,MHA強烈依賴ssh祕鑰驗證
masterha_check_repl      #檢查MySQL複製狀況
masterha_manager       #MHA主程序
masterha_check_status     #檢測當前MHA運行狀態
masterha_master_monitor    #檢測master是否宕機
masterha_master_switch    #手動控制故障轉移
masterha_conf_host      #添加或刪除配置的server信息
masterha_stop		      #MHA關閉工具

Node工具包:
save_binary_logs       #保存和複製master的二進制日誌
apply_diff_relay_logs     #識別差異的中繼日誌事件並將其差異的事件應用於其他的slave
filter_mysqlbinlog      #去除不必要的ROLLBACK事件(MHA已不再使用這個工具)
purge_relay_logs       #清除中繼日誌(不會阻塞SQL線程)



實驗環境:
角色          ip地址        
MHA_manager		192.168.0.70
Master         192.168.0.40
Slave 			192.168.0.60
Slave          192.168.0.10



安裝MHA:
1、配置elpe和baseyum源
2、yum -y localinstall mha4mysql-manager-0.55-0.el6.noarch.rpm mha4mysql-node-0.54-0.el6.noarch.rpm
#非管理節點不用安裝mha4mysql-manager-0.55-0.el6.noarch.rpm
3、配置ssh祕鑰驗證
ssh-keygen                    #生成祕鑰,一直回車就行
cat id_rsa.pub >> authorized_keys  #將authorized_keys  id_rsa  id_rsa.pub 拷貝到所有節點的~/.ssh目錄下
注意:不能禁止password登陸,否則會出現錯誤	


配置mysql主從(建議使用mysql5.5版本以上):
master配置:
vim /etc/my.cnf            #修改配置文件,添加如下內容
[mysqld]                    #找到mysqld配置段
log-bin=mysql-bin           #開啓二進制日誌
relay-log=relay-bin	    #開啓中繼日誌
binlog_format=mixed	    #使用混合模式的二進制日誌
server-id= 1		    #全局唯一的server-id
innodb-file-per-table=1	    #使用單獨表空間文件
default-storage-engine=InnoDB	 #使用InnoDB存儲引擎
autocommit=0			  #關閉事務自動提交
skip-name-resolve=1		  #關閉主機名反解
relay-log-purge=0           #不允許自動清理中繼日誌,因爲MHA會依靠中繼日誌恢復數據

service mysqld restart		#重啓mysql
mysql> SHOW MASTER STATUS;		#查看當前二進制日誌位置
+------------------+----------+
| File           | Position|
+------------------+----------+
|mysql-bin.000004 |  360  |		#記住當前值
+------------------+----------+
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'mha'@'192.168.0.%' IDENTIFIED BY 'mha';
mysql> GRANT ALL ON *.* TO 'mymha'@'192.168.0.%' IDENTIFIED BY 'mymha';	#創建MHA監控用戶
mysql> FLUSH PRIVILEGES;


slave配置:
vim /etc/my.cnf		#修改配置文件,添加如下內容
[mysqld]			#找到mysqld配置段
log-bin=mysql-bin		#開啓二進制日誌
relay-log=relay-bin		#開啓中繼日誌
binlog_format=mixed		#使用混合模式的二進制日誌
server-id= 2			#全局唯一的server-id
innodb-file-per-table=1		#使用單獨表空間文件
default-storage-engine=InnoDB	#使用InnoDB存儲引擎
autocommit=0			#關閉事務自動提交
skip-name-resolve=1		#關閉主機名反解
read-only=1			#只讀,對root用戶無效(slave節點必須設置)
relay-log-purge=0		#不允許自動清理中繼日誌,因爲MHA會依靠中繼日誌恢復數據

mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.10',MASTER_USER='mha',MASTER_PASSWORD='mha',
     MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=360,MASTER_PORT=3306; #指定主服務器
mysql> START SLAVE;			#啓動複製線程
mysql> SHOW SLAVE STATUS\G;		#查看從服務器狀態
Slave_IO_Running: Yes		    #必須都爲yes
Slave_SQL_Running: Yes
mysql> SELECT USER,PASSWORD,HOST FROM mysql.user;	#查看mha是否同步成功


MHA配置:
    mkdir /etc/mha	
    mkdir /var/log/mha_app1

vim /etc/mha/app1.cnf		
[server default]				#MHA工作屬性定義(配置時不能有註釋)
manager_workdir=/masterha/app1			#MHA的工作目錄
manager_log=/var/log/mha_app1/manager.log    #MHA的日誌文件
password=mymha         		#設置MHA監控用戶的密碼
user=mymha               	#設置監控用戶
ping_interval=1         		#設置監控主庫,健康檢查時間
remote_workdir=/masterha/app1     	#設置遠端mysql在發生切換時binlog的保存位置
repl_password=mha    		#設置複製用戶的密碼
repl_user=mha          	#設置複製環境中的複製用戶名
ssh_user=root           	#設置ssh的登錄用戶名
master_binlog_dir=/usr/local/mysql/data/ #二進制日誌文件存放路徑	

可選參數,腳本都需要自己寫:
shutdown_script=/masterha/scripts/shutdown.sh  #故障發生後關閉故障主機腳本(用於防止腦裂)
master_ip_failover_script=/masterha/scripts/automatic.sh #設置自動故障轉移時執行的腳本	
master_ip_online_change_script=/masterha/scripts/manual.sh #設置手動故障轉移時執行的腳本	
report_script=/masterha/scripts/twili.py   		#設置發生切換後發送的報警腳本


[server1]						
hostname=192.168.0.40			
port=3306						

[server2]	            #節點設置
hostname=192.168.0.60	    #主機地址
port=3306		    #端口
check_repl_delay=0 	    #用防止master故障時,切換時slave有延遲
candidate_master=1 
#設置爲候選master,如果沒有設置則在slave中選擇數據最新的成爲master,如果設置了建議最好指向半同步節點

[server3]						
hostname=192.168.0.10			
port=3306


MHA使用:
chmod 600 /etc/mha/app1.cnf		#設置爲只有root用戶對此文件有權限
masterha_check_ssh --conf=/etc/mha/app1.cnf	#檢查ssh祕鑰認證是否成功
--conf:指定配置文件

masterha_check_repl --conf=/etc/mha/app1.cnf		#檢查mysql複製環境成功
masterha_check_status --conf=/etc/mha/app1.cnf		#檢查MHA運行狀態
masterha_manager --conf=/etc/mha/app1.cnf		#啓動MHA
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章