簡介: 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
mysql進階(三)MHA高可用集羣
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.