MHA實現mariadb的高可用的詳細步驟及配置參數詳解
阿新 • • 發佈:2019-05-12
top master 獲得 ins ati 有時 可靠的 secondary ha mysql MHA實現mariadb的高可用的詳細步驟及配置參數詳解
A. 實驗環境說明
a) 4臺centos7主機
b) 角色說明:
a、 MHA:192.168.36.35
b、 Master_mariadb:192.168.36.121
c、 Slave_mariadb:192.168.36.120
d、 Slave_mariadb:192.168.36.27
B. 安裝程序包
a) mariadb上安裝:
mariadb-server 版本:5.5.60 mha4mysql-node -0.56-0.el6.noarch.rpm
b) MHA上安裝:
mha4mysql-manager -0.56-0.el6.noarch.rpm
mha4mysql-node -0.56-0.el6.noarch.rpm
C. 配置數據庫主從同步功能
a) Master節點
[mysqld]
server_id=121
binlog_format=row
log_bin
innodb_file_per_table
skip_name_resolve #禁止反向解析
b) Slave節點
[mysqld] server_id=120 #必須唯一 read_only log_bin #要想提升為主節點,必須開啟二進制日誌功能 binlog_format=row relay_log_purge=0 #關閉中繼日誌 skip_name_resolve innodb_file_per_table
c) Master節點創建復制和MHA管理帳戶:
grant replication slave on *.* to [email protected]‘192.168.8.%‘ identified by ‘centos‘;
grant all on *.* to [email protected]‘192.168.8.%’identified by‘centos‘;
d) 啟動主從同步功能並測試是否成功
CHANGE MASTER TO MASTER_HOST=‘192.168.36.121‘, MASTER_USER=‘repluser‘, MASTER_PASSWORD=‘centos‘, MASTER_LOG_FILE=‘mariadb-bin.000001‘, #根據show master logs的結果填寫 MASTER_LOG_POS=245; #根據show master logs的結果填寫
D. MHA上配置KEY驗證功能
a) 創建key:
ssh-keygen
b) 先給自己分發key:
ssh-copy-id 192.168.36.35
c) 把.ssh目錄復制到各被管理節點,實現各主機之間免密碼管理
scp -rp .ssh 192.168.36.121:/root/
scp -rp .ssh 192.168.36.120:/root/
scp -rp .ssh 192.168.36.27:/root/
E. MHA上建立配置文件
vim /etc/mha/app1.conf #路徑和文件名無要求
[server default]
user=mhauser #同授權的用戶
password=centos #同授權的密碼
#ssh_port=9527 根據需要設置,默認22
manager_workdir=/data/mastermha/app1/
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=repluser #同授權的復制用戶
repl_password=centos #同授權的復制密碼
ping_interval=1 #MHA與被管理節點的心跳間隔時間,單位秒
[server1]
hostname=192.168.36.121
candidate_master=1 #是否可提升為主節點
[server2]
hostname=192.168.36.120
candidate_master=1
[server3]
hostname=192.168.36.27
candidate_master=1
F. MHA驗證和啟動
a) masterha_check_ssh --conf=/etc/mastermha/app1.cnf #檢查SSH通訊
b) masterha_check_repl --conf=/etc/mastermha/app1.cnf #檢查主從復制
c) masterha_manager --conf=/etc/mastermha/app1.cnf #檢查管理功能且只能提升一次
G. 排錯日誌:
/data/mastermha/app1/manager.log
H. MHA配置參數詳解:
hostname:目標實例的主機名或者IP地址,這個參數是強制的,只能配置在app配置文件的[server_xxx]段落標記下
ip:目標實例的ip地址,默認從hostname獲取,MHA內部管理節點與數據節點之間的mysql和ssh通過這個IP連接,正常情況下你不需要配置這個參數,因為MHA會自動解析Hostname獲得
port:目標實例的端口,默認是3306,MHA使用mysql server的IP和port連接
ssh_host:從0.53版本開始支持,默認情況下和hostname參數相同,當你使用了VLAN隔離的時候,比如為了安全,把ssh網段和訪問數據庫實例的網段分開使用兩個不同的IP,那麽就需要單獨配置這個參數
ssh_ip:從0.53版本開始支持,默認情況下與ssh_host相同
ssh_port:從0.53版本開始支持,目標數據庫的ssh端口,默認是22
ssh_connection_timeout:從0.54版本開始支持,默認是5秒,增加這個參數之前這個超時時間是寫死在代碼裏的
ssh_options:從0.53版本開始支持,額外的ssh命令行選項
candidate_master:從不同的從庫服務器中,提升一個可靠的機器為新主庫,(比如:RAID 10比RAID0的從庫更可靠),可以通過在配置文件中對應的從庫服務器的配置段下添加candidate_master=1來提升這個從庫被提升為新主庫的優先級(這個從庫要開始binlog,以及沒有顯著的復制延遲,如果不滿足這兩個條件,也並不會在主庫掛掉的時候成為新主庫,所以,這個參數只是提升了優先級,並不是說指定了這個參數就一定會成為新主庫)
no_master:通過在目標服務器的配置段落設置no_master=1,它永遠也不會變為新主庫,用於配置在不想用於接管主庫故障的從庫上,如:只是一個binlog server,或者硬件配置比較差的從庫上,或者這個從庫只是一個遠程災備的從庫,但是,要註意,不能把所有的從庫都配置這個參數,這樣MHA檢測到沒有可用備主的時候,會中斷故障轉移操作
ignore_fail:默認情況下,MHA在做故障轉移的時候,會去檢測所有的server,如果發現有任何的從庫有問題(比如不能通過SSH檢測主機或者mysql的存活,或者說有SQL線程復制錯誤等)就不會進行故障轉移操作,但是,有時候可能需要在特定從庫有故障的情況下,仍然繼續進行故障轉移,就可以使用這個參數指定它。默認是0,需要設置時在對應服務器的配置段下添加ignore_fail=1
skip_init_ssh_check:監控程序啟動的時候,跳過SSH連接檢測
skip_reset_slave:0.56開始支持,master故障轉移之後,跳過執行reset slave all語句
user:目標mysql實例的管理帳號,盡量是root用戶,因為運行所有的管理命令(如:stop slave,change master,reset slave)需要使用,默認是root
password:user參數指定的用戶的密碼,默認為空
repl_user:在所有slave上執行change master的復制用戶名,這個用戶最好是在主庫上擁有replication slave權限
repl_password:repl_user參數指定的用戶的密碼,默認情況下,是當前復制帳號的密碼,如果你運行了online master switch腳本且使用了–orig_master_is_new_slave做在線切換,當前主庫作為了從庫加入新主庫,此時,如果你沒有設置repl_password來指定復制帳號的密碼,當前主庫作為從庫加入新主庫的時候會在change master的時候失敗,因為默認情況下這個密碼是空的,MHA做切換的時候,其他所有作為從庫加入新主庫時,都需要使用這個密碼
disable_log_bin:如果設置這個參數,當應用差異日誌到從庫時,slave不生成binlog寫入,內部通過mysqlbinlog命令的–disable-log-bin選項實現
master_pid_file:設置master的pid,在運行多實例的環境下,你可能需要用到這個參數來指定master的pid,參考shutdown_script參數詳解
ssh_user:訪問MHA manger和MHA mysql節點的OS系統帳號,需要使用它來遠程執行各種各樣的管理mysql節點的命令(從manager到mysql),從latest slave拷貝差異日誌到其他從庫上(從mysql到mysql),該用戶必須要能夠沒有任何交互地連接到服務器,通常使用ssh key認證,默認情況下,這個用戶是manager所在的OS系統用戶。
remote_workdir:每一個MHA node(指的是mysql server節點)生成日誌文件的工作路徑,這個路徑是絕對路徑,如果該路徑目錄不存在,則會自動創建,如果沒有權限訪問這個路徑,那麽MHA將終止後續過程,另外,你需要關心一下這個路徑下的文件系統是否有足夠的磁盤空間,默認值是/var/tmp
master_binlog_dir:在master上生成binlog的絕對路徑,這個參數用在master掛了,但是ssh還可達的時候,從主庫的這個路徑下讀取和復制必須的binlog events,這個參數是必須的,因為master的mysqld掛掉之後,沒有辦法自動識別master的binlog存放目錄。默認情況下,master_binlog_dir的值是/var/lib/mysql,/var/log/mysql,/var/lib/mysql目錄是大多數mysql分支默認的binlog輸出目錄,而 /var/log/mysql是ubuntu包的默認binlog輸出目錄,這個參數可以設置多個值,用逗號隔開
log_level:manager記錄日誌的等級,默認以及大多數場景下都是info級別,可以設置的值為debug/info/warning/error
manager_workdir:mha manager生成的相關狀態文件的絕對路徑,如果沒有設置,則默認使用/var/tmp
client_bindir: 如果mysql命令工具是安裝在非標準路徑下,那麽使用這個參數指定絕對路徑
client_libdir:如果mysql的庫文件是安裝在非標準路徑下,那麽使用這個參數指定據對路徑
manager_log:mha manager生成的日誌據對路徑,如果沒有設置,mha manager將打印在標準輸出,標準錯誤輸出上,如:當mha manager執行故障轉移的時候,這些信息就會打印
check_repl_delay:默認情況下,如果從庫落後主庫100M的relay logs,MHA不會選擇這個從庫作為新主庫,因為它會增加恢復的時間,設置這個參數為0,MHA在選擇新主庫的時候,則忽略復制延遲,這個選項用在你使用candidate_master=1 明確指定需要哪個從庫作為新主庫的時候使用。
check_repl_filter:默認情況下,如果master和slave相互之間有任何不同的binlog復制過濾規則,MHA將打印錯誤日誌並拒絕啟動監控程序或者拒絕故障轉移操作,這是為了避免意外出現類似Table not exists這樣的錯誤,如果你100%確定不同的復制過濾規則不會出現恢復問題,那麽就設置check_repl_filter = 0,此時MHA在應用差異日誌的時候就不會去檢測復制過濾規則,但是你可能會碰到Table not exists這樣的錯誤,使用這個參數要非常小心
latest_priority:默認情況下,latest slave(收到最新的binlog的slave),優先作為新主庫,如果你想控制這個優先級順序,可以通過 latest_priority=0,此時,就會按照配置文件中配置的順序來選擇新主庫(如 host2->host3->host4)。
multi_tier_slave:從0.52版本開始,支持多個主庫的復制架構,默認情況下,在配置文件中不支持三個或更多層級的復制架構,例如:host2從host1復制,host3從host2復制,默認情況下,是不允許host1,2,3同時可寫的。因為這個是一個三層復制,MHA manager會報錯並停止,設置這個參數之後,MHA manager不會中斷三層復制架構的監控,只是忽略了第三層,即host3,如果host1掛了,host2將接管host1,被選擇為新主庫,host3繼續從host3復制。
ping_interval:這個參數表示mha manager多久ping(執行select ping sql語句)一次master,連續三個丟失ping連接,mha master就判定mater死了,因此,通過4次ping間隔的最大時間的機制來發現故障,默認是3,表示間隔是3秒
ping_type:從0.53版本開始支持,默認情況下,mha master基於一個到master的已經存在的連接執行select 1(ping_type=select)語句來檢查master的可用性,但是在有些場景下,最好是每次通過新建/斷開連接的方式來檢測,因為這能夠更嚴格以及更快速地發現TCP連接級別的故障,把ping_type設置為connect就可以實現。從0.56開始新增了ping_type=INSERT類型。
secondary_check_script:通常,推薦通過兩個或者更多的網絡路徑來檢測master的可用性,默認情況下,MHA只是通過單個網絡路徑來檢測,即從mha master到master的路線,但是不推薦這麽做,mha可以通過secondary_check_script 參數來調用一個外部的腳本來實現兩個或更多個網絡路徑來檢測master的可用性
master_ip_failover_script:通常在MHA環境下,通常需要分配一個VIP供master用於對外提供讀寫服務,如果master掛了,HA軟件指引備用服務器接管VIP,另外一個通用的方法,是在數據庫中創建一個全局的應用程序名稱與讀寫IP地址之間的全局類目映射( {app1_master1, 192.168.0.1}, {app_master2, 192.168.0.2}, …)來代替VIP地址的使用,在這種情況下,如果你的master掛了,你需要更新這個數據庫中的全局類目映射。第二種方法這裏個人覺得跟智能DNS解析類似。
master_ip_online_change_script:這是一個與master_ip_failover_script 參數很接近的參數,但是這個參數不使用故障轉移命令,而是master的在線change命令(masterha_master_switch –master_state=alive)
shutdown_script:你可能想要強制關閉master節點來避免master節點重新啟動服務,這對於避免腦裂來說是很重要的
report_script:在故障轉移完成或者說因為錯誤而終止的時候,你可能希望發送一個報告出來,這就是使用report_script 參數的目的
init_conf_load_script:這個腳本在你不想在配置文件中設置純文本的信息的時候使用(比如:password和repl_password),從這個腳本返回name=value的鍵值對,它可以作為全局配置文件參數,示例腳本內容如下:
#!/usr/bin/perl
print "password=$ROOT_PASS\n";
print "repl_password=$REPL_PASS\n";
這個參數默認為空,所以mha manager不會調用這個參數做任何事情
MHA實現mariadb的高可用的詳細步驟及配置參數詳解