先來看看架構,如下圖:
部署
1.修改hosts
在所有的伺服器中執行相同的操作。
vim /etc/hosts
192.168.137.10 master192.168.137.20 backup192.168.137.30 slave192.168.137.40 monitor
2.添加mysql使用者
只需要在所有的資料庫端執行即可,監控端不需要。
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.137.%' IDENTIFIED BY 'mmm_monitor'; GRANT SUPER,REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.137.%' IDENTIFIED BY 'mmm_agent';flush privileges;
注意:repl使用者在搭建主從服務的時候已經建立好了。
3.安裝監視軟體
注意:監控端全部安裝,但是監控端只需要用到mysql-mmm-monitor,mysql-mmm-agent不需要啟動。
資料庫端只需要安裝mysql-mmm-agent
1.在監控伺服器執行
wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm –ivh epel-release-6-8.noarch.rpmyum –y install mysql-mmm*
2.在資料庫伺服器上執行,每個資料庫伺服器上都要執行
wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmrpm –ivh epel-release-6-8.noarch.rpmyum -y install mysql-mmm-agent
路徑說明:
4.設定檔
db伺服器設定檔:mmm_agent.conf,mmm_common.conf
監控伺服器的設定檔:mmm_mon.conf,mmm_common.conf
(該檔案所有伺服器一樣)
配置db伺服器
1.修改master伺服器
vim /etc/mysql-mmm/mmm_common.conf
active_master_role writer ###積極的master角色的標示,所有的db伺服器都需要開啟read_only參數,對於writer伺服器監控代理會自動將read_only屬性關閉。<host default> cluster_interface eth0 #####群集的網路介面 pid_path /var/run/mysql-mmm/mmm_agentd.pid ####pid路徑 bin_path /usr/libexec/mysql-mmm/ #####可執行檔路徑 replication_user repl #######複製使用者 replication_password repl #######複製使用者密碼 agent_user mmm_agent #######代理使用者,用於更改唯讀操作 agent_password mmm_agent #######代理使用者密碼</host><host master> ##########master1的host名 ip 192.168.137.10 #####master1的ip mode master ########角色屬性,master代表是主 peer backup ########與master1對等的伺服器的host名,也就是master2的伺服器host名</host><host backup> ####和master的概念一樣 ip 192.168.137.20 mode master peer master</host><host slave> #####從庫的host名,如果存在多個從庫可以重複一樣的配置 ip 192.168.137.30 ####從的ip mode slave #####slave的角色屬性代表當前host是從</host><role writer> ####writer角色配置 hosts master,backup ####能進行寫操作的伺服器的host名,如果不想切換寫操作這裡可以只配置master,這樣也可以避免因為網路延時而進行write的切換,但是一旦master出現故障那麼當前的MMM就沒有writer了只有對外的read操作。 ips 192.168.137.100 #####對外提供的寫操作的虛擬IP mode exclusive #####exclusive代表只允許存在一個主,也就是只能提供一個寫的IP</role><role reader> #####read角色配置 hosts backup,slave ######對外提供讀操作的伺服器的host名,當然這裡也可以把master加進來 ips 192.168.137.120,192.168.137.130,192.168.137.140 ###對外提供讀操作的虛擬ip,這兩個ip和host不是一一對應的,並且ips也hosts的數目也可以不相同,如果這樣配置的話其中一個hosts會分配兩個ip mode balanced ###balanced代表負載平衡</role>
同時將這個檔案拷貝到其它的伺服器包括監控伺服器,配置不變
scp /etc/mysql-mmm/mmm_common.conf slave:/etc/mysql-mmm/scp /etc/mysql-mmm/mmm_common.conf backup:/etc/mysql-mmm/scp /etc/mysql-mmm/mmm_common.conf monitor:/etc/mysql-mmm/
2.代理檔案配置
vim /etc/mysql-mmm/mmm_agent.conf
注意:這個配置只配置db伺服器,監控伺服器不需要配置,this後面的host名改成當前伺服器的host命令,master2和slave也改成對應的伺服器的host名。
3.啟動代理進程
chkconfig mysql-mmm-agent on
service mysql-mmm-agent start
每台db伺服器上都需要啟動
配置監控伺服器
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf<monitor> ip 127.0.0.1 pid_path /var/run/mysql-mmm/mmm_mond.pid bin_path /usr/libexec/mysql-mmm status_path /var/lib/mysql-mmm/mmm_mond.status #####群集的狀態檔案,也就是執行mmm_control show操作的顯示來源。 ping_ips 192.168.137.10,192.168.137.20,192.168.137.30 ######被監控的db伺服器的ip地址 auto_set_online 0 ####設定自動online的時間,預設是超過60s就將它設定為online,預設是60s,這裡將其設為0就是立即online # 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 mmm_monitor ####監控db伺服器的使用者 monitor_password mmm_monitor ####監控db伺服器的密碼</host>debug 0 #######debug 0正常模式,1為debug模式
注意:設定檔中的注釋是為了便於理解,在部署的時候最好把注釋去掉以免因為注釋造成的潛在影響。
啟動監控進程
chkconfig mysql-mmm- monitor onservice mysql-mmm-monitor start
注意:無論是在db端還是在監控端如果有對設定檔進行修改操作都需要重啟代理進程和監控進程。
操作分析
記錄檔
記錄檔往往是分析錯誤的關鍵,所以要善於利用記錄檔進行問題分析。
db端:/var/log/mysql-mmm/mmm_agentd.log
監控端:/var/log/mysql-mmm/mmm_mond.log
命令檔案
mmm_agentd :db代理進程的開機檔案
mmm_mond :監控進程的開機檔案
mmm_backup :備份檔案
mmm_restore :還原檔案
mmm_clone
mmm_control:監控操作命令檔案
db伺服器端只有mmm_agentd程式,其它的都是在monitor伺服器端。
mmm_control用法
mmm_control程式可以用於監控群集狀態、切換writer、設定online\offline操作等。
Valid commands are: help - show this message ###協助資訊 ping - ping monitor ###ping當前的群集是否正常 show - show status ####群集線上狀態檢查 checks [<host>|all [<check>|all]] - show checks status #####執行監控檢查操作 set_online <host> - set host <host> online ####將host設定為online set_offline <host> - set host <host> offline ###將host設定為offline mode - print current mode. ####列印輸出當前的mode set_active - switch into active mode. set_manual - switch into manual mode. set_passive - switch into passive mode. move_role [--force] <role> <host> - move exclusive role <role> to host <host> ####移除writer伺服器為指定的host伺服器 (Only use --force if you know what you are doing!) set_ip <ip> <host> - set role with ip <ip> to host <host>
1.檢查所有的db伺服器叢集狀態
[root@monitor mysql-mmm]# mmm_control checks allmaster ping [last change: 2016/06/07 16:31:24] OKmaster mysql [last change: 2016/06/07 16:31:24] OKmaster rep_threads [last change: 2016/06/07 16:31:24] OKmaster rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is nullslave ping [last change: 2016/06/07 16:31:24] OKslave mysql [last change: 2016/06/07 16:31:24] OKslave rep_threads [last change: 2016/06/07 16:31:24] OKslave rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is nullbackup ping [last change: 2016/06/07 16:31:24] OKbackup mysql [last change: 2016/06/07 16:31:24] OKbackup rep_threads [last change: 2016/06/07 16:31:24] OKbackup rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is null
檢查項包括:ping、mysql是否正常運行、複製線程是否正常等
2.檢查群集環境線上狀況
[root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120) master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)
3.對指定的host執行offline操作
[root@monitor mysql-mmm]# mmm_control set_offline backupOK: State of 'backup' changed to ADMIN_OFFLINE. Now you can wait some time and check all roles![root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ADMIN_OFFLINE. Roles: master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.120), reader(192.168.137.130)
4.對指定的host執行onine操作
[root@monitor mysql-mmm]# mmm_control set_online backupOK: State of 'backup' changed to ONLINE. Now you can wait some time and check its new roles![root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/REPLICATION_FAIL. Roles: master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.120), reader(192.168.137.130)[root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120) master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)
5.執行write切換
1.查看當前的slave對應的master
[root@slave ~]# mysql -uroot -proot -e 'show slave status \G;'Warning: Using a password on the command line interface can be insecure.*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.137.10 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000073 Read_Master_Log_Pos: 1461 Relay_Log_File: mysql-relay-bin.000006 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000073 Slave_IO_Running: Yes Slave_SQL_Running: Yes
2.writer切換,要確保mmm_common.conf檔案中的writer屬性有配置對應的host,否則無法切換
[root@monitor mysql-mmm]# mmm_control move_role writer backupOK: Role 'writer' has been moved from 'master' to 'backup'. Now you can wait some time and check new roles info![root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120), writer(192.168.137.100) master(192.168.137.10) master/ONLINE. Roles: slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)
3.save從庫自動切換到了新的master
[root@slave ~]# mysql -uroot -proot -e 'show slave status \G;'Warning: Using a password on the command line interface can be insecure.*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.137.20 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000039 Read_Master_Log_Pos: 120 Relay_Log_File: mysql-relay-bin.000002 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000039 Slave_IO_Running: Yes Slave_SQL_Running: Yes
其它處理問題
如果不想讓writer從master切換到backup(包括主從的延時也會導致寫VIP的切換),那麼可以在配置/etc/mysql-mmm/mmm_common.conf
時,去掉<role write>中的backup
<role writer> ####writer角色配置 hosts master ###這裡只配置一個Hosts ips 192.168.137.100 #####對外提供的寫操作的虛擬IP mode exclusive #####exclusive代表只允許存在一個主,也就是只能提供一個寫的IP</role>
這樣的話當master出現故障了writer寫操作不會切換到backup伺服器,並且slave也不會指向新的master,此時當前的MMM之前對外提供寫服務。
總結
主從的延時會導致寫VIP的切換。
1.對外提供讀寫的虛擬IP是由monitor程式控制。如果monitor沒有啟動那麼db伺服器不會被分配虛擬ip,但是如果已經分配好了虛擬ip當monitor程式關閉了原先分配的虛擬ip不會立即關閉外部程式還可以串連訪問(只要不重啟網路),這樣的好處就是對於monitor的可靠性要求就會低一些,目前還不知道能維持多長的時間,但是如果這個時候其中的某一個db伺服器故障了就無法處理切換,也就是原先的虛擬ip還是維持不變,掛掉的那台DB的虛擬ip會變的不可訪問。
2.agent程式受monitor程式的控制處理write切換,從庫切換等操作。如果monitor進程關閉了那麼agent進程就起不到什麼作用,它本身不能處理故障。
3.monitor程式負責監控db伺服器的狀態,包括Mysql資料庫、伺服器是否運行、複製線程是否正常、主從延時等;它還用於控制agent程式處理故障。
4.monitor會每隔幾秒鐘監控db伺服器的狀態,如果db伺服器已經從故障變成了正常,那麼monitor會自動在60s之後將其設定為online狀態(預設是60s可以設為其它的值),有監控端的設定檔參數“auto_set_online”決定,叢集伺服器的狀態有三種分別是:HARD_OFFLINE→AWAITING_RECOVERY→online
5.預設monitor會控制mmm_agent會將writer db伺服器read_only修改為OFF,其它的db伺服器read_only修改為ON,所以為了嚴謹可以在所有的伺服器的my.cnf檔案中加入read_only=1由monitor控制來控制writer和read,root使用者和複製使用者不受read_only參數的影響
以上就是本文的全部內容,希望本文對大家學習mysql有所協助。