MySQL---高可用(修改版1.0)
MySQL高可用
因為主從複製是由Master伺服器負責寫操作,因而會存在單點失敗的隱患,所以需要提高HA高可用性
本文介紹了以下方法實現MySQL的高可用性
一、MHA高可用(Master High Availability)
原理:建立一個Manager管理者,它通過ssh協議與各叢集(application)的主從節點進行通訊,在Master伺服器出現故障時,可自動的將Master節點轉移至其它Slave節點,提升某一Slave節點為新的Master節點使用,將其餘的Slave節點指向新的Master節點。(MHA可自動發現Slave節點更新資料的新舊,優先提用資料較新的Slave節點,並會將其read_only變數設為不啟用)
MHA需要由兩軟體組成:mha4mysql-manager和mha4mysql-node工具包
實現MHA的步驟:(注意:各節點間的時間務必保持一直)
1.首先需要在Manager管理伺服器上安裝MHA需要的兩工具包(先node後manager),各叢集節點上只安裝mha4mysql-node工具包;
2.在Manager管理伺服器的配置檔案(需要手工建立,每個叢集可單獨設立)中為所有的叢集進行global設定,以及為每個單獨的叢集設立特殊設定,設定如下:
vim /etc/mastermha/app1.conf (自定義配置檔案路徑及檔名)
[server default] (全域性設定)
user=USER_NAME (用來連線被管理叢集的使用者,由Master伺服器建立)
password=PASSWORD
manager_workdir=/data/mastermha/app1/ (自定義manager管理伺服器工作目錄)
manager_log=/data/mastermha/app1/manager.log (自定義manager管理伺服器日誌檔案)
remote_workdir=/data/mastermha/app1/ (自定義遠端主機工作目錄)
ssh_user=SSH使用者
repl_user=主從複製的使用者
repl_password=密碼
ping_interval=1
[server1] (針對單獨的MySQL叢集設定,Master和Slave節點都寫入)
hostname=IP
candidate_master=1
[server2]
hostname=IP
candidate_master=1
[server3]
hostname=IP
candidate_master=1 (注意:這裡的candidate_master=1選項,表示Master伺服器宕機後,Manager管理伺服器會在配置檔案中查詢有此選項的Slave伺服器來挑選當新Master)
3.建立MySQL主從複製的叢集,主從伺服器都應在配置檔案中加入選項“skip_name_resolve=1”,以防遠端連接出現錯誤
4.Master伺服器中另外建立管理所有MySQL主從節點的賬號資訊:
grant all on *.* to 'USER_NAME'@'IP' identified by 'PASSWORD';
(IP是包括MySQL所有主從節點得地址段)
5.Slave伺服器在配置檔案中還需要另外加入如下選項:
read_only=on (只讀,為保證安全)
relay_log_purge=0 (不清除中繼日誌)
6.Manager管理伺服器和MySQL主從複製叢集節點之間互相建立ssh key驗證
ssh-keygen
ssh-copy-id Manager_IP
scp -r /root/.ssh Master_IP:
scp -r /root/.ssh Slave_IP:
7.為保證MHA的執行,可在上述步驟設定好後,對Manager管理伺服器的建立的配置檔案進行驗證
masterha_check_ssh --conf=/etc/mastermha/app1.conf 檢查ssh協議是否正常使用
masterha_check_repl --conf=/etc/mastermha/app1.conf 檢查MySQL主從複製的相關配置
8.啟動監控(預設前臺執行,建議手動設定為後臺)
masterha_manager --conf=配置檔案
延伸:
因為排程器(proxy)是分離主從讀寫的,在MHA啟用情況下,排程器還需要能夠有重新指定ip的操作,keepalive則可以很好地完成此項功能
二、Galera Cluster高可用
原理:多節點MySQL伺服器可同時進行讀和寫,同步無延遲併發複製,基於WSREP協議(MySQL extended with the Write Set Replication),不依賴於二進位制日誌檔案,是直接拷貝資料檔案塊來進行復制,並且在新增節點後,會自動同步資料
(至少需要三個節點來實現,並且不能安裝mysql軟體包,而是需要另外安裝其他的軟體程式包)
目前有兩種版本可以實現:
Percona Xtradb Cluster 及 MariaDB Cluster
實現步驟:(這裡針對MariaDB Cluster )
1.在MySQL叢集各節點上都安裝 MariaDB-Galera-server 軟體包
使用以下路徑作為yum倉庫源
2.在配置檔案/etc/my.cnf.d/server.cnf中必須設定的選項如下:
wsrep_provider = /usr/lib64/galera/libgalera_smm.so 定義模組
wsrep_cluster_address = "gcomm://IP1,IP2,……" 定義MySQL叢集的成員ip
binlog_format = row 二進位制日誌記錄方式為行
default_storage_engine = InnoDB 預設引擎為InooDB
innodb_autoinc_lock_mode = 2 鎖模式
bind-address = 0.0.0.0 將埠繫結在所有IP
還有可選擇設定的一些選項:
wsrep_cluster_name = 'NAME' 定義MySQL叢集名稱,預設my_wsrep_cluster
wsrep_node_name = 'NODE1' 定義每個節點名稱
wsrep_node_address = 'NODE1_IP' 每個節點對應的IP
3.首次啟動服務時,第一個節點啟東時需要使用以下選項:
/etc/init.d/mysql start --wsrep-new-cluster 表示建立叢集
其餘節點正常啟動服務即可
SHOW STATUS LIKE 'wsrep_cluster_size'; 可檢視叢集節點數
SHOW STATUS LIKE 'wsrep_%'; 可檢視叢集狀態