1. 程式人生 > >MHA實現mariadb的高可用的詳細步驟及配置參數詳解

MHA實現mariadb的高可用的詳細步驟及配置參數詳解

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的高可用的詳細步驟及配置參數詳解