1. 程式人生 > >MySQL---高可用(修改版1.0)

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_%'; 可檢視叢集狀態