溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL+MMM 高可用集群部署(二)

發(fā)布時間:2020-06-22 19:15:00 來源:網(wǎng)絡(luò) 閱讀:397 作者:司徒曉宇 欄目:MySQL數(shù)據(jù)庫

接上期,MySQL主從同步我們已經(jīng)部署完成,接下來,我們開始部署本期的核心---MMM高可用集群


四、MMM高可用集群部署

    1、安裝依賴包

    由于mmm 是用perl語言寫的腳本程序,因此需要在5臺服務(wù)器中分別安裝 perl 和 perl-CPAN

    [root@cluster-mysqlb ~]# yum -y install perl perl-CPAN

    2、yum 安裝 mmm

        a、在4臺 MySQL 服務(wù)器中安裝 mysql-mmm-agent

        [root@cluster-mysqla ~]# yum -y install gcc gcc-c++ mysql-mmm-agent

        b、在 monitor 服務(wù)器中安裝 mysql-mmm-monitor

        [root@cluster-proxy ~]# yum -y install gcc gcc-c++ mysql-mmm-monitor

    3、配置 mmm

        mysql-mmm 的配置文件在 /etc/mysql-mmm目錄下,進入該目錄

        mysql-mmm-agent 配置文件

        MySQL+MMM 高可用集群部署(二)

        mysql-mmm-monitor 配置文件

        MySQL+MMM 高可用集群部署(二)

        如圖,mysql-mmm-agent 的配置文件只有2個,mmm_agent.conf 和 mmm_common.conf,而 mysql-mmm-monitor 的配置文件有4個,原本是3個,因為我這里安裝了 mysql-mmm-tools ,因此多了一個mmm_tools.conf

        a、修改公共配置文件 mmm_common.conf

        [root@cluster-mysqla mysql-mmm]# vim mmm_common.conf

        MySQL+MMM 高可用集群部署(二)

        如圖:

        (1)、字段解釋

            active_master_role      writer                                           #主動的master角色標示,所有數(shù)據(jù)庫服務(wù)器都需要開啟 read_only 參數(shù),而對于 Write 服務(wù)器,監(jiān)控服務(wù)器會自動將 read_only 屬性關(guān)閉,也就是將其值設(shè)為1

            <host default>
            cluster_interface       eth0                                               #集群網(wǎng)絡(luò)接口
            pid_path                /run/mysql-mmm-agent.pid            #mmm-agent進程pid文件路徑
            bin_path                /usr/libexec/mysql-mmm/               #可執(zhí)行文件路徑
            replication_user        slaveuser                                       #復(fù)制用戶
            replication_password    123456                                      #復(fù)制用戶的密碼
            agent_user              mmmagent                                     #代理用戶
            agent_password          123456                                       #代理用戶的密碼
            </host>

            <host mastera>                                                              #這里寫 mastera 的主機名
            ip      192.168.20.134                                                       #mastera 的 IP 地址
            mode    master                                                                #角色模式:master   表示主庫
            peer    masterb                                                                #與 mastera 同等的主庫的主機名稱,也就是說向 mastera 同步數(shù)據(jù)的數(shù)據(jù)庫的主機的名稱,因此為 masterb
            </host>

            <host masterb>                                                              #這里的屬性同 mastera
            ip      192.168.20.128
            mode    master
            peer    mastera
            </host>

            <host slavea>                                                                  #從庫的主機名稱
            ip      192.168.20.129                                                        #從庫的 IP 地址
            mode    slave                                                                    #角色模式:該主機為 masterb 的從數(shù)據(jù)庫,因此為 slave
            </host>

            <host slaveb>                                                                  #這里的屬性同 slavea
            mode    slave
            </host>

            <role writer>                                                                    #Write 角色配置
            hosts   mastera, masterb  #具有寫操作的主機名稱,這里的配置可以寫單個,也可以寫多個,寫單個的時候,可以避免在網(wǎng)絡(luò)延遲過大時切換Write,但是當(dāng)master出現(xiàn)故障時,就無法進行write了,只能對外提供read操作了
            ips     192.168.20.254                                           #對外提供寫操作的虛擬 IP 地址
            mode    exclusive                                                 #模式,exclusive 表示只允許存在一個主數(shù)據(jù)庫,也就是只能寫 一個虛擬 IP 地址
            </role>

            <role reader>                                                                    #read 角色配置
            hosts   slavea, slaveb                                                         #對外提供 read 操作的服務(wù)器的主機的名稱,這里也可以寫master進來,寫進來時,master也對外提供 read 操作
            ips     192.168.20.253, 192.168.20.252                               #對外提供 read 操作的虛擬 IP 地址,為了實現(xiàn)負載均衡,這里的虛擬 IP 地址至少應(yīng)該和 read 數(shù)據(jù)庫服務(wù)器數(shù)量相同
            mode    balanced                                                               #模式,balanced 表示負載均衡
            </role>

        (2)、mmm_common.conf配置文件修改

                如果在服務(wù)器中有多張網(wǎng)卡,則需要在 cluster_interface 字段中指定網(wǎng)卡名稱

                按照上面的格式修改公共配置文件,修改完后復(fù)制到其他4臺服務(wù)器中

                scp /etc/mysql-mmm/mmm_common.conf root@192.168.20.128:/etc/mysql-mmm

                scp /etc/mysql-mmm/mmm_common.conf root@192.168.20.129:/etc/mysql-mmm

                scp /etc/mysql-mmm/mmm_common.conf root@192.168.20.130:/etc/mysql-mmm

                scp /etc/mysql-mmm/mmm_common.conf root@192.168.20.131:/etc/mysql-mmm

        (3)、mmm_agent.conf配置文件修改

            [root@cluster-mysqla mysql-mmm]# vim mmm_agent.conf

            MySQL+MMM 高可用集群部署(二)

            如圖,改配置文件只需要修改圖中標示部分,因此,如果服務(wù)器是 mastera ,就改為 this mastera ,如果服務(wù)器是 masterb ,就改為 this masterb ,以此類推

        (4)、修改 mysql-mmm-monitor 的配置文件 mmm_mon.conf

            [root@cluster-proxy mysql-mmm]# vim mmm_mon.conf

            MySQL+MMM 高可用集群部署(二)

            如上圖,字段解釋

      include mmm_common.conf                                                                                                 #調(diào)用 mmm_common.conf 配置文件
      <monitor>
      ip                  192.168.20.131                                                                                                  #監(jiān)控主機 IP 地址
      pid_path            /run/mysql-mmm-monitor.pid                                                                    #監(jiān)控進程 pid 文件目錄
      bin_path            /usr/libexec/mysql-mmm                                                                            #可執(zhí)行文件目錄
      status_path         /var/lib/mysql-mmm/mmm_mond.status                                                 
      ping_ips            192.168.20.134, 192.168.20.128, 192.168.20.129, 192.168.20.130               #這里寫4臺數(shù)據(jù)庫服務(wù)器的 IP 地址
      auto_set_online     60

      # The kill_host_bin does not exist by default, though the monitor will
      # throw a warning about it missing.  See the section 5.10 "Kill Host
      # Functionality" in the PDF documentation.
      #
      # kill_host_bin     /usr/libexec/mysql-mmm/monitor/kill_host
      #
     </monitor>

     <host default>
      monitor_user        monitor                                                                              #監(jiān)控用戶
      monitor_password    123456                                                                          #監(jiān)控用戶密碼
     </host>

      debug 0

        按照上面的格式,配置好 mmm_mond.conf

    b、啟動 mmm 服務(wù)

        在4臺 MySQL 服務(wù)器中啟動 mysql-mmm-agent 服務(wù)

        [root@cluster-mysqla mysql-mmm]# mmm_agentd start

        在監(jiān)控服務(wù)器中驅(qū)動 mysql-mmm-monitor 服務(wù)

        [root@cluster-proxy mysql-mmm]# mmm_mond start

    c、在 monitor 服務(wù)器查看其他4臺服務(wù)器的狀態(tài)

        [root@cluster-proxy mysql-mmm]# mmm_control show

        MySQL+MMM 高可用集群部署(二)

        如上圖,表示4臺數(shù)據(jù)庫服務(wù)器配置 mmm 配置 OK。

    d、測試虛擬 IP 地址是否能夠 ping 通

        如果能夠 ping 通,說明 mysql-mmm 部署成功,如果無法 ping 通,則說明在主機上虛擬 IP 地址沒有設(shè)置成功,這時候,我們需要在 5 臺數(shù)據(jù)庫服務(wù)器上執(zhí)行以下命令

        [root@cluster-mysqla mysql-mmm]# perl -MCPAN -e shell

        如圖:

        MySQL+MMM 高可用集群部署(二)

        cpan[1]> install Net::ARP

        如果在執(zhí)行 perl -MCPAN -e shell 該命令時報錯   Can't locate CPAN.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .).



        說明,我們沒有安裝 perl-CPAN,用 yum 安裝即可

        執(zhí)行完上述命令之后,在分別在4臺服務(wù)器中執(zhí)行下列命令

        mastera

        [root@cluster-mysqla mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.254

        masterb

        [root@cluster-mysqlb mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.254

        slavea
        [root@cluster-mysqlc mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.253

        slaveb

        [root@cluster-mysqld mysql-mmm]# /usr/libexec/mysql-mmm/agent/configure_ip /etc/mysql-mmm/mmm_common.conf ens33 192.168.20.252

        執(zhí)行上面命令之后,在 ping 虛擬 IP 地址,ping 測試 OK,能夠 ping 通

        最后,在查看4臺數(shù)據(jù)庫服務(wù)器的狀態(tài)

        [root@cluster-proxy mysql-mmm]# mmm_control checks all

        如圖:

        MySQL+MMM 高可用集群部署(二)

        如果全是 OK ,說明我們的 mysql-mmm 服務(wù)部署成功

        上面的地2列的意思分別是:

        ping:ping 測試,可以 ping 通時 OK,否則,請按照上述操作檢查

        mysql:mysql server 在線時 OK,否則,請檢查 mysql server 是否有停止

        rep_threadh:復(fù)制線程正在運行時 OK,否則請排查復(fù)制線程未運行的原因,常見可能原因為:1、監(jiān)控和復(fù)制所用的用戶名、密碼錯誤;2、主從同步出現(xiàn)故障

        rep_backlog:復(fù)制擠壓的日志很少時 OK,否則可能是服務(wù)器處理速度太慢或者數(shù)據(jù)量太大

    e、mmm_control 名詞解釋

        如圖:

        MySQL+MMM 高可用集群部署(二)

        check:查看指定 host 或者所有主機的指定狀態(tài)或者所有狀態(tài)

        show:查看當(dāng)前集群狀態(tài)

        set_online:把 host 的狀態(tài)由AWAITING_RECOVERY或者ADMIN_OFFLINE恢復(fù)到ONLINE

        set_offline:把 host 的狀態(tài)手動設(shè)置為ADMIN_OFFLINE,并且會停止mysql復(fù)制

        mode:打印當(dāng)前monitor的運行模式

        set_active:切換monitor進程為主動模式

        set_passive:切換monitor進程為被動模式

        set_manual:切換monitor進程為手動模式

        move_role:將write角色切換到其他主機

    f、測試mysql-mmm在服務(wù)故障情況下是否能夠自動切換,這里值提供方法

        測試方法為:

        停止 mastera 的 mysql 服務(wù),查看 writer(192.168.20.254) 是否能夠切換到 masterb,隨后開啟 mastera 的 mysql 服務(wù),在手動停止 masterb 的 mysql 服務(wù),查看 writer(192.168.20.254) 是否能夠切換到 mastera ,如果都能,則說明,我們的mysql-mmm集群部署時OK的,如果不能,請檢查mmm_common.conf配置文件是否有錯。當(dāng)然還有其他測試思路,這里就不一一列舉了。

        

五、連接MMM集群

    部署完 mysql-mmm 集群,這時候我們就迫不及待的想要用我們現(xiàn)有的應(yīng)用服務(wù)去連接

    首先,我們在mastera新建一個MySQL賬號game

    mysql> grant all privileges on *.* to game@"%" identified by "123456";

    mysql> flush privileges;

    然后,我們在我們的應(yīng)用服務(wù)器上連接虛擬 IP(192.168.20.254、192.168.20.253、192.168.20.252)

        a、連接192.168.20.254創(chuàng)建一個數(shù)據(jù)庫

        [root@weba ~]# mysql -h292.168.20.254 -ugame -p123456

        MySQL+MMM 高可用集群部署(二)

        MySQL [(none)]> create database web;

        MySQL+MMM 高可用集群部署(二)

        b、連接192.168.20.253、192.168.20.252查看剛才創(chuàng)建的數(shù)據(jù)庫是否存在

        [root@webb ~]# mysql -h292.168.20.253 -ugame -p123456

            MySQL+MMM 高可用集群部署(二)

        [root@webb ~]# mysql -h292.168.20.252 -ugame -p123456

        MySQL+MMM 高可用集群部署(二)

        有圖可見,我們連接192.168.20.254創(chuàng)建的數(shù)據(jù)庫,在連接192.168.20.253和192.168.20.252后也能看得到,說明一切OK

        注意:連接192.168.20.254時,最好能夠切換 mastera 和 masterb 進行連接建庫測試,在這期間有可能會出現(xiàn)以下報錯:

                  1209 - The MySQL server is running with the --read-only option so it cannot execute this statement

                  出現(xiàn)這個錯誤原因是,mmm 將主數(shù)據(jù)庫設(shè)置成了只讀模式,我們只需要執(zhí)行 set global read_only=0; 即可

                 

        到此為止,我們的MySQL主從同步+MMM高可用集群部署完成,我們也列舉了一些在部署過程中可能會踩到的坑,但是,在線上部署中,需要具體問題具體分析,所以,在以后的生活中,小弟還會和大佬們共同成長。

        對于以上部署過程,若有疑問,可參照 官方安裝文檔 。

本節(jié)完。

        

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI