MySQL+MMM 高可用集羣部署(一)

1、MMM的功能特色
mysql

MMM 即(Master-Master replication manager for MySQL)的簡稱,它是一套支持雙主故障切換和雙主平常管理的腳本程序,而MMM是用 Perl 語言所開發,其主要功能是:linux

第1、用來監控和管理 MySQL 數據庫 主主複製(Master-Master),雖然是主主結構,可是因爲數據庫自身特性,在業務邏輯中,同一時刻,僅容許有一個主庫寫入,而另外一個主庫充當備份角色,一旦當前所使用的主庫出現故障,將立馬切換到另外一個主庫web

第2、用來監控和管理 MySQL 數據庫 主從複製(Master-Slave),而這裏的主從複製,首先、從庫的主要做用是進行 Read 負載均衡,其次,也充當備份角色。sql

MMM的優勢:數據庫

一、開源免費、從產品面世到成型,經歷了很長一段時間,有前輩們的成熟的技術支持vim

二、來源於 MySQL 內部,屬於MySQL本身的技術服務器

三、使用腳本控制管理,簡單方便,易於理解網絡

四、功能比較完善,自帶各類牛X工具及套件
架構

MMM的缺點:負載均衡

一、因爲 MMM 自身建構的侷限性,只能有一個寫入點,其擴展性在大型企業中將會是一個瓶頸。

二、對於讀寫分離、Read 負載均衡,其不能經過自身完成,須要企業本身手動處理,或者藉助第三方軟件完成。

2、MMM 架構解析

圖片.png

如上圖拓撲

一、箭頭方向表明數據流向

二、對於主主結構,咱們須要在兩臺主數據庫(主A 和 主B)中配置互爲主從,當其中任意一臺主庫(好比主A)處於可寫入狀態時,另一臺主庫(好比主B)將同步到它(主A)剛寫入的數據,反之亦然。

三、對於主從結構,當前,主B屬於主庫,則須要配置 從A 和 從B 兩臺數據庫作爲 主B 的從庫便可,不管是 主A 仍是 主B ,有數據寫入時,都會同步到 從A 和 從B 。若是,當前,主A 處於可寫入狀態,它首先會向 主B 進行數據同步,再由 主B 向 從A 和 從B 進行數據同步。這種結構在進行數據同步時,若是數據量較大(大型企業),將可能存在必定延時。

四、由 Monitor 監控服務器同時對 主A、主B、從A、從B 4臺數據庫進行監控及管理,這裏指的是監控4臺數據庫的狀態(服務可達、服務不可達狀態,在生產環境中,數據庫一旦出現故障,那將是災難性的,影響企業命運的。因此,生產環境中,假若有4臺數據庫服務器:雙主雙從,4臺數據庫服務器不可能同時出現故障,亦或者說2臺主數據庫一樣不可能同時出現故障。),若是說,當前正在寫入的主數據庫(主A)因爲硬件故障或者服務奔潰出現故障,Monitor 服務器將會立馬將虛擬 IP 192.168.20.254 切換到另一臺主數據庫(主B),這期間的時間,十分短暫,客戶基本不會有任何察覺,從庫亦是如此。

五、對於讀寫分離,咱們在進行應用服務部署過程當中,會進行手動配置(或者藉助第三方軟件實現),虛擬寫 IP :192.168.20.254,在單獨配置虛擬 讀IP:192.168.20.25二、192.168.20.253,作讀寫分離,其主要目的是負載均衡,下降服務器壓力。

3、主從同步配置詳解

    一、環境安裝

        a、數據庫規劃,這裏咱們安裝4臺MySQL數據庫和1臺Monitor服務器,配置以下:

        圖片.png

        b、虛擬IP規劃:

        圖片.png

        c、修改服務器 hosts 文件,將下面的內容粘貼進去(注意,每臺服務器都要添加):

             192.168.20.134 masterA

             192.168.20.128 masterB

             192.168.20.129 slaveA

             192.168.20.130 slaveB

             192.168.20.131 cluster-proxy

             [root@cluster-mysqla ~]# vim /etc/hosts

             圖片.png

        d、關閉firewalld:

             [root@cluster-mysqla ~]# systemctl stop firewalld

             [root@cluster-mysqla ~]# systemctl disable firewalld

        e、關閉selinux

             [root@cluster-mysqla ~]# setenforce 0

        f、配置yum源和epel源

             根據本身的須要進行配置,這裏不進行贅述

        g、服務器作時間同步

             同步網絡時間或者本身的時間服務器,這裏不進行贅述

    二、安裝MySQL

        關於MySQL的安裝,請參考小弟個人另外一篇文章:http://www.javashuo.com/article/p-stbwdeok-cp.html

    三、配置MySQL

        [root@cluster-mysqla ~]# vim /etc/my.cnf

                [mysqld]

                basedir = /usr/local/mysql
                datadir = /wdata/mysql/data
                tmpdir = /wdata/mysql/temp
                plugin-dir = /usr/local/mysql/plugin
                server_id  =  1
                socket = /wdata/mysql/data/mysql.sock
                pid-file = /wdata/mysql/data/mysql.pid
                explicit_defaults_for_timestamp = true
                lower_case_table_names = 1
                open_files_limit = 65535
                event_scheduler = 1
                log_slave_updates = 1

        [root@cluster-mysqlb ~]# vim /etc/my.cnf

                [mysqld]

                basedir = /usr/local/mysql
                datadir = /wdata/mysql/data
                tmpdir = /wdata/mysql/temp
                plugin-dir = /usr/local/mysql/plugin
                server_id  =  2
                socket = /wdata/mysql/data/mysql.sock
                pid-file = /wdata/mysql/data/mysql.pid
                explicit_defaults_for_timestamp = true
                lower_case_table_names = 1
                open_files_limit = 65535
                event_scheduler = 1
                log_slave_updates = 1

        [root@cluster-mysqlc ~]# vim /etc/my.cnf

                [mysqld]

                basedir = /usr/local/mysql
                datadir = /wdata/mysql/data
                tmpdir = /wdata/mysql/temp
                plugin-dir = /usr/local/mysql/plugin
                server_id  =  3
                socket = /wdata/mysql/data/mysql.sock
                pid-file = /wdata/mysql/data/mysql.pid
                explicit_defaults_for_timestamp = true
                lower_case_table_names = 1
                open_files_limit = 65535
                event_scheduler = 1
                log_slave_updates = 1

        [root@cluster-mysqld ~]# vim /etc/my.cnf

                [mysqld]

                basedir = /usr/local/mysql
                datadir = /wdata/mysql/data
                tmpdir = /wdata/mysql/temp
                plugin-dir = /usr/local/mysql/plugin
                server_id  =  4
                socket = /wdata/mysql/data/mysql.sock
                pid-file = /wdata/mysql/data/mysql.pid
                explicit_defaults_for_timestamp = true
                lower_case_table_names = 1
                open_files_limit = 65535
                event_scheduler = 1
                log_slave_updates = 1


        切記,在修改配置文件時,必定要加入級聯複製選項(即:log_slave_updates = 1)

        四、重啓4臺服務器的MySQL數據庫

            [root@cluster-mysqla ~]# service mysqld restart

        五、配置MySQL主從同步

            a、配置主主結構

            在mastera、masterb數據庫中建立主從同步所須要的用戶

            mysql> grant replication slave on *.* to slaveuser@"192.168.20.%" identified by "123456";

            mastera

            (1)、查看master狀態

            mysql> show master status;

            圖片.png

            (2)、設置主數據庫信息,包括主數據庫IP、主數據庫用戶名、主數據庫密碼、主數據庫日誌文件、主數據庫日誌文件偏移量

            mysql> change master to master_host="192.168.20.128",master_user="slaveuser",master_password="123456",master_log_file="mysql-bin.000007",master_log_pos=3766631;

            圖片.png

            (3)、啓動從庫

            mysql> start slave;

            圖片.png

            (4)、查看從庫狀態

            mysql> show slave status\G;

            圖片.png

            說明:

            一、master_host:主數據庫IP地址,這裏設置問masterb的IP地址

            二、master_log_file:主數據庫的日誌文件名稱,經過在 masterb 中使用 show master status; 查詢得到。

            三、master_log_file:著數據庫的日誌文件偏移量,也經過在 masterb 中使用 show master status; 查詢得到。

            masterb

            (1)、查看master狀態

            mysql> show master status;

            圖片.png

            (2)、設置主數據庫信息,包括主數據庫IP、主數據庫用戶名、主數據庫密碼、主數據庫日誌文件、主數據庫日誌文件偏移量

            mysql> change master to master_host="192.168.20.134",master_user="slaveuser",master_password="123456",master_log_file="mysql-bin.000005",master_log_pos=3766317;

            圖片.png

            (3)、啓動從庫

            mysql> start slave;

            圖片.png

            (4)、查看從庫狀態

            mysql> show slave status\G;

            圖片.png

            說明:

                在執行完 show slave status\G; 命令時,咱們會看到從庫當前的詳細信息,可是又三個地方須要特別注意,以下圖:

                圖片.png

                一、Slave_IO_Running 和 Slave_SQL_Running 的值必須爲 Yes ,不然將沒法進行主從同步

                     Slave_IO_Running:I/O線程監控

                     Slave_SQL_Running:SQL線程監控

                二、Master_UUID:這個值必須是惟一的,主數據庫、從數據庫的UUID不能相同,若是是克隆的服務器,這個UUID的值應該是相同的,此時,須要在MySQL數據目錄下修改 auto.cnf 中的內容便可(不知                                                    道怎麼修改的,可隨便改一位就行),如圖:

                     [root@cluster-mysqlc data]# vim auto.cnf

                     圖片.png

                三、Slave_SQL_Running_State 記錄SQL線程的狀態,通常當SQL線程爲 NO 或者 Connecting 時,這裏會提示出詳細的錯誤緣由,可根據這裏的提示,進行排錯。

                四、Slave_IO_Running 值爲 NO 時,通常爲主數據庫的 IP地址,用戶名、密碼設置有誤,從新設置並重啓 slave 可恢復正常。而 Slave_SQL_Running 值爲 NO 或者爲 Connecting 時,其出錯緣由比較豐富,                                            須要根據提示進行排錯。

            b、配置主從結構

            按照前面主主結構的配置模式,分別在 slavea 和 slaveb 中MySQL命令行中執行下面語句:

            mysql> change master to master_host="192.168.20.128",master_user="slaveuser",master_password="123456",master_log_file="mysql-bin.000007",master_log_pos=3766631;

            mysql> start  slave;

            mysql> show slave status\G;

            圖片.png

        c、驗證主從同步

        一、在 mastera 中建立games數據庫,在其餘數據庫服務器中查看是否存在。

        mysql> create database games;

        圖片.png

        二、在其餘三臺服務器中查看剛建立的數據庫是否存在

                                    masterb

        圖片.png

                                             slavea

        圖片.png

                                                slaveb

        圖片.png

        上三圖表示,由mastera向其餘三臺數據庫同步正常

        三、在masterb 中建立用戶mmmagent、monitor、discuz,在其餘三臺數據庫服務器中查看是否存在

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

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

        圖片.png

        四、在其餘三臺服務器中查看剛建立的帳號是否存在

                                                mastera

        圖片.png

                                                slavea

        圖片.png

                                                slaveb

        圖片.png

        上三圖表示,由masterb向其餘三臺數據庫同步正常

        主從同步到此,部署完成,下期,咱們開始本章核心環節,MMM配置。


未完待續,下期再見,敬請期待。。。。。。

相關文章
相關標籤/搜索