您好,登錄后才能下訂單哦!
接上期,MySQL主從同步我們已經部署完成,接下來,我們開始部署本期的核心---MMM高可用集群
四、MMM高可用集群部署
1、安裝依賴包
由于mmm 是用perl語言寫的腳本程序,因此需要在5臺服務器中分別安裝 perl 和 perl-CPAN
[root@cluster-mysqlb ~]# yum -y install perl perl-CPAN
2、yum 安裝 mmm
a、在4臺 MySQL 服務器中安裝 mysql-mmm-agent
[root@cluster-mysqla ~]# yum -y install gcc gcc-c++ mysql-mmm-agent
b、在 monitor 服務器中安裝 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-monitor 配置文件
如圖,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
如圖:
(1)、字段解釋
active_master_role writer #主動的master角色標示,所有數據庫服務器都需要開啟 read_only 參數,而對于 Write 服務器,監控服務器會自動將 read_only 屬性關閉,也就是將其值設為1 <host default> cluster_interface eth0 #集群網絡接口 pid_path /run/mysql-mmm-agent.pid #mmm-agent進程pid文件路徑 bin_path /usr/libexec/mysql-mmm/ #可執行文件路徑 replication_user slaveuser #復制用戶 replication_password 123456 #復制用戶的密碼 agent_user mmmagent #代理用戶 agent_password 123456 #代理用戶的密碼 </host> <host mastera> #這里寫 mastera 的主機名 ip 192.168.20.134 #mastera 的 IP 地址 mode master #角色模式:master 表示主庫 peer masterb #與 mastera 同等的主庫的主機名稱,也就是說向 mastera 同步數據的數據庫的主機的名稱,因此為 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 的從數據庫,因此為 slave </host> <host slaveb> #這里的屬性同 slavea mode slave </host> <role writer> #Write 角色配置 hosts mastera, masterb #具有寫操作的主機名稱,這里的配置可以寫單個,也可以寫多個,寫單個的時候,可以避免在網絡延遲過大時切換Write,但是當master出現故障時,就無法進行write了,只能對外提供read操作了 ips 192.168.20.254 #對外提供寫操作的虛擬 IP 地址 mode exclusive #模式,exclusive 表示只允許存在一個主數據庫,也就是只能寫 一個虛擬 IP 地址 </role> <role reader> #read 角色配置 hosts slavea, slaveb #對外提供 read 操作的服務器的主機的名稱,這里也可以寫master進來,寫進來時,master也對外提供 read 操作 ips 192.168.20.253, 192.168.20.252 #對外提供 read 操作的虛擬 IP 地址,為了實現負載均衡,這里的虛擬 IP 地址至少應該和 read 數據庫服務器數量相同 mode balanced #模式,balanced 表示負載均衡 </role> |
(2)、mmm_common.conf配置文件修改
如果在服務器中有多張網卡,則需要在 cluster_interface 字段中指定網卡名稱
按照上面的格式修改公共配置文件,修改完后復制到其他4臺服務器中
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
如圖,改配置文件只需要修改圖中標示部分,因此,如果服務器是 mastera ,就改為 this mastera ,如果服務器是 masterb ,就改為 this masterb ,以此類推
(4)、修改 mysql-mmm-monitor 的配置文件 mmm_mon.conf
[root@cluster-proxy mysql-mmm]# vim mmm_mon.conf
如上圖,字段解釋
include mmm_common.conf #調用 mmm_common.conf 配置文件 <monitor> ip 192.168.20.131 #監控主機 IP 地址 pid_path /run/mysql-mmm-monitor.pid #監控進程 pid 文件目錄 bin_path /usr/libexec/mysql-mmm #可執行文件目錄 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臺數據庫服務器的 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 #監控用戶 monitor_password 123456 #監控用戶密碼 </host> debug 0 |
按照上面的格式,配置好 mmm_mond.conf
b、啟動 mmm 服務
在4臺 MySQL 服務器中啟動 mysql-mmm-agent 服務
[root@cluster-mysqla mysql-mmm]# mmm_agentd start
在監控服務器中驅動 mysql-mmm-monitor 服務
[root@cluster-proxy mysql-mmm]# mmm_mond start
c、在 monitor 服務器查看其他4臺服務器的狀態
[root@cluster-proxy mysql-mmm]# mmm_control show
如上圖,表示4臺數據庫服務器配置 mmm 配置 OK。
d、測試虛擬 IP 地址是否能夠 ping 通
如果能夠 ping 通,說明 mysql-mmm 部署成功,如果無法 ping 通,則說明在主機上虛擬 IP 地址沒有設置成功,這時候,我們需要在 5 臺數據庫服務器上執行以下命令
[root@cluster-mysqla mysql-mmm]# perl -MCPAN -e shell
如圖:
cpan[1]> install Net::ARP
如果在執行 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 安裝即可
執行完上述命令之后,在分別在4臺服務器中執行下列命令
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
執行上面命令之后,在 ping 虛擬 IP 地址,ping 測試 OK,能夠 ping 通
最后,在查看4臺數據庫服務器的狀態
[root@cluster-proxy mysql-mmm]# mmm_control checks all
如圖:
如果全是 OK ,說明我們的 mysql-mmm 服務部署成功
上面的地2列的意思分別是:
ping:ping 測試,可以 ping 通時 OK,否則,請按照上述操作檢查
mysql:mysql server 在線時 OK,否則,請檢查 mysql server 是否有停止
rep_threadh:復制線程正在運行時 OK,否則請排查復制線程未運行的原因,常見可能原因為:1、監控和復制所用的用戶名、密碼錯誤;2、主從同步出現故障
rep_backlog:復制擠壓的日志很少時 OK,否則可能是服務器處理速度太慢或者數據量太大
e、mmm_control 名詞解釋
如圖:
check:查看指定 host 或者所有主機的指定狀態或者所有狀態
show:查看當前集群狀態
set_online:把 host 的狀態由AWAITING_RECOVERY或者ADMIN_OFFLINE恢復到ONLINE
set_offline:把 host 的狀態手動設置為ADMIN_OFFLINE,并且會停止mysql復制
mode:打印當前monitor的運行模式
set_active:切換monitor進程為主動模式
set_passive:切換monitor進程為被動模式
set_manual:切換monitor進程為手動模式
move_role:將write角色切換到其他主機
f、測試mysql-mmm在服務故障情況下是否能夠自動切換,這里值提供方法
測試方法為:
停止 mastera 的 mysql 服務,查看 writer(192.168.20.254) 是否能夠切換到 masterb,隨后開啟 mastera 的 mysql 服務,在手動停止 masterb 的 mysql 服務,查看 writer(192.168.20.254) 是否能夠切換到 mastera ,如果都能,則說明,我們的mysql-mmm集群部署時OK的,如果不能,請檢查mmm_common.conf配置文件是否有錯。當然還有其他測試思路,這里就不一一列舉了。
五、連接MMM集群
部署完 mysql-mmm 集群,這時候我們就迫不及待的想要用我們現有的應用服務去連接
首先,我們在mastera新建一個MySQL賬號game
mysql> grant all privileges on *.* to game@"%" identified by "123456";
mysql> flush privileges;
然后,我們在我們的應用服務器上連接虛擬 IP(192.168.20.254、192.168.20.253、192.168.20.252)
a、連接192.168.20.254創建一個數據庫
[root@weba ~]# mysql -h292.168.20.254 -ugame -p123456
MySQL [(none)]> create database web;
b、連接192.168.20.253、192.168.20.252查看剛才創建的數據庫是否存在
[root@webb ~]# mysql -h292.168.20.253 -ugame -p123456
[root@webb ~]# mysql -h292.168.20.252 -ugame -p123456
有圖可見,我們連接192.168.20.254創建的數據庫,在連接192.168.20.253和192.168.20.252后也能看得到,說明一切OK
注意:連接192.168.20.254時,最好能夠切換 mastera 和 masterb 進行連接建庫測試,在這期間有可能會出現以下報錯:
1209 - The MySQL server is running with the --read-only option so it cannot execute this statement
出現這個錯誤原因是,mmm 將主數據庫設置成了只讀模式,我們只需要執行 set global read_only=0; 即可
到此為止,我們的MySQL主從同步+MMM高可用集群部署完成,我們也列舉了一些在部署過程中可能會踩到的坑,但是,在線上部署中,需要具體問題具體分析,所以,在以后的生活中,小弟還會和大佬們共同成長。
對于以上部署過程,若有疑問,可參照 官方安裝文檔 。
本節完。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。