003.MMM雙主-雙從讀寫分離部署
阿新 • • 發佈:2018-11-05
一 前期規劃
1.1 主機規劃
1.2 虛擬IP規劃
1.3 使用者列表
1.4 整體架構
1.4 hosts修改
1 [[email protected] ~]# vi /etc/sysconfig/network 2 NETWORKING=yes 3 HOSTNAME=Master01 4 [[email protected] ~]# vi /etc/hosts 5 Master01 172.24.8.10 6 Master02 172.24.8.11 7 Slave01 172.24.8.12 8 Slave02 172.24.8.13 9 Monitor 172.24.8.20提示:所有主機新增對應的hostname和hosts,此步驟非必須,為方便之後簡化配置,建議修改hosts。
1.5 NTP配置
略,具體可參考筆記NTP-《003.NTP客戶端配置》。 提示:針對高可用的優化,建議所有節點均配置NTP服務。二 部署MySQL
2.1 安裝MySQL
略,具體可參考MySQL主從複製-《MySQL高可用主從複製部署》。 提示:除去monitor節點外所有節點均需要部署。三 雙主複製部署
3.1 master01 my.cf配置
1 [[email protected] ~]# vi /etc/my.cnf 2 [mysqld] 3 …… 4 server-id=1 #設定主伺服器master的id 5 log-bin=mysql-bin #配置二進位制變更日誌命名格式 6 replicate-wild-ignore-table=mysql.% 7 replicate-wild-ignore-table=test.% 8 replicate-wild-ignore-table=information_schema.% 9 sync-binlog=1 #每條自動更新,安全性高,預設是0 10 auto_increment_increment=2 #欄位一次遞增多少 11 auto_increment_offset=1 #自增欄位的起始值 12 log_slave_updates #當一個主故障,另一個立即接管 13 read_only=1注意: master開啟二進位制日誌後預設記錄所有庫所有表的操作,可以通過配置來指定只記錄指定的資料庫甚至指定的表的操作,具體在mysql配置檔案的[mysqld]可新增修改如下選項: 方法一:
1 # 不同步哪些資料庫 2 binlog-ignore-db = mysql 3 binlog-ignore-db = test 4 binlog-ignore-db = information_schema 5 # 只同步哪些資料庫,除此之外,其他不同步 6 binlog-do-db = mysqltest方法二: 建議採用以下方式配置過濾:
1 replicate-wild-ignore-table=mysql.% #從庫配置不同步表 2 replicate-wild-do-table=test.% #從庫配置需要同步的表提示:不要在主庫使用binlog-ignore-db和binlog-do-db,也不要在從庫使用replicate-wild-ignore和replicate-wild-do-table。
3.2 Master02 my.cf配置
1 [[email protected] ~]# service mysqld start 2 [[email protected] ~]# mysql -uroot -px120952576 3 mysql> grant replication slave on *.* to 'repl_user'@'172.24.8.%' identified by 'x12345678';
#建立用於複製的賬號
4 mysql> grant replication client on *.* to 'mmm_monitor'@'172.24.8.%' identified by 'x12345678';
#建立用於監控MySQL服務健康的賬號
5 mysql> grant super,replication client,process on *.* to 'mmm_agent'@'172.24.8.%' identified by 'x12345678';
#建立用於切換隻讀模式、同步Master資訊的賬號 6 mysql> grant select,insert,update,delete,create,drop on *.* to 'mmm_test'@'172.24.8.%' identified by 'x120952576' with grant option; #建立之後用於讀寫分離測試的賬號 7 mysql> flush privileges; 8 [[email protected] ~]# service mysqld restart 9 [[email protected] ~]# mysql -uroot -px120952576 10 mysql> show master status;master01: file:mysql-bin.000001 position:120 注意:讀寫分離對於用於super或者all privileges許可權的使用者無效,需要建立普通使用者進行測試。
3.4 Master02建立賬號
略,同3.3 Master01建立賬號同樣操作即可。1 [[email protected] ~]# service mysqld restart 2 [[email protected] ~]# mysql -uroot -px120952576 3 mysql> show master status;master02: file:mysql-bin.000001 position:120
3.5 啟動雙主複製
提示:如果Master01和Master02已經存在資料,則在開啟主備複製之前,需要將Master01和Master02手動同步一次(/var/lib/mysql整個目錄打包tar.gz),具體方法略。 注意:本實驗都是重新安裝的MySQL,可直接啟動同步。1 [[email protected] ~]# mysql -uroot -px120952576 2 Enter password: 3 mysql> change master to master_host='172.24.8.11', 4 -> master_user='repl_user', 5 -> master_password='x12345678', 6 -> master_log_file='mysql-bin.000001', 7 -> master_port=3306, 8 -> master_log_pos=120; 9 mysql> start slave; 10 mysql> show slave status\G #檢視slave狀態略
3.3 啟動Master02的slave功能
1 [[email protected] ~]# mysql -uroot -px120952576 2 mysql> change master to master_host='172.24.8.10', 3 -> master_user='repl_user', 4 -> master_password='x12345678', 5 -> master_log_file='mysql-bin.000001', 6 -> master_log_pos=120; 7 mysql> start slave; 8 mysql> show slave status\G #檢視slave狀態略 提示: slave的I/O和SQL執行緒都已經開始執行,而且Seconds_Behind_Master不再是NULL。日誌的位置增加了,意味著一些事件被獲取並執行了。如果你在master上進行修改,你可以在slave上看到各種日誌檔案的位置的變化,同樣,你也可以看到資料庫中資料的變化。
四 其他節點配置
4.1 所有Slave節點配置配置
1 [[email protected] ~]# scp /etc/my.cnf [email protected]:/etc/ 2 [[email protected] ~]# scp /etc/my.cnf [email protected]:/etc/ 3 [[email protected] ~]# vi /etc/my.cnf 4 [mysqld] 5 …… 6 server-id=3 #設定主伺服器Slave01的id 7 [[email protected] ~]# vi /etc/my.cnf 8 [mysqld] 9 …… 10 server-id=4 #設定主伺服器Slave02的id提示:從Master01將複製my.cnf至所有節點(除去monitor外),並修改相應的server id。
4.2 所有Slave節點建立賬號
1 [[email protected] ~]# service mysqld start 2 [[email protected] ~]# mysql -uroot -px120952576 3 mysql> grant replication slave on *.* to 'repl_user'@'172.24.8.%' identified by 'x12345678'; #建立用於複製的賬號 4 mysql> grant replication client on *.* to 'mmm_monitor'@'172.24.8.%' identified by 'x12345678'; #建立用於監控MySQL服務健康的賬號 5 mysql> grant super,replication client,process on *.* to 'mmm_agent'@'172.24.8.%' identified by 'x12345678';
#建立用於切換隻讀模式、同步Master資訊的賬號 6 mysql> grant select,insert,update,delete,create,drop on *.* to 'mmm_test'@'172.24.8.%' identified by 'x120952576' with grant option; #建立之後用於讀寫分離測試的賬號 7 mysql> flush privileges;提示:Slave02如上操作。
4.2 Slave節點配置Master01為主
1 [[email protected] ~]# service mysqld restart 2 [[email protected] ~]# mysql -uroot -px120952576 3 mysql> change master to master_host='172.24.8.10', 4 -> master_user='repl_user', 5 -> master_password='x12345678', 6 -> master_log_file='mysql-bin.000001', 7 -> master_log_pos=120; 8 mysql> start slave; 9 mysql> show slave status\G #檢視slave狀態略 提示:Slave02如上操作。 注意:讀寫分離對於用於super或者all privileges許可權的使用者無效,需要建立普通使用者進行測試。
五 安裝MMM元件
5.1 監控Monitor節點安裝MMM
1 [[email protected] tmp]# wget http://mirrors.ustc.edu.cn/epel/epel-release-latest-6.noarch.rpm 2 [[email protected] tmp]# rpm -ivh epel-release-latest-6.noarch.rpm 3 [[email protected] ~]# yum -y install mysql-mmm*
5.2 其他節點安裝MMM
1 [[email protected] ~]# wget http://mirrors.ustc.edu.cn/epel/epel-release-latest-6.noarch.rpm 2 [[email protected] ~]# rpm -ivh epel-release-latest-6.noarch.rpm 3 [[email protected] ~]# yum -y install mysql-mmm-agent注意:
- MMM元件在常規YUM中不包含,需要安裝epel源;
- 除monitor節點外其他節點只需要安裝mysql-mmm-agent即可。
提示:若yum安裝出現以下報錯,建議在所有節點改用編譯安裝,操作見附1-附2:
附1 新增安裝Perl指令碼
1 [[email protected] ~]# cat install.sh 2 #!/bin/bash 3 wget http://xrl.us/cpanm --no-check-certificate 4 mv cpanm /usr/bin 5 chmod 755 /usr/bin/cpanm 6 cat > /root/list << EOF 7 install Algorithm::Diff 8 install Class::Singleton 9 install DBI 10 install DBD::mysql 11 install File::Basename 12 install File::stat 13 install File::Temp 14 install Log::Dispatch 15 install Log::Log4perl 16 install Mail::Send 17 install Net::ARP 18 install Net::Ping 19 install Proc::Daemon 20 install Thread::Queue 21 install Time::HiRes 22 EOF 23 for package in `cat /root/list` 24 do 25 cpanm $package 26 done
附2 編譯安裝
1 [[email protected] tmp]# wget http://mysql-mmm.org/_media/:mmm2:mysql-mmm-2.2.1.tar.gz 2 [[email protected] tmp]# mv \:mmm2\:mysql-mmm-2.2.1.tar.gz mysql-mmm-2.2.1.tar.gz 3 [[email protected] tmp]# tar -zxvf mysql-mmm-2.2.1.tar.gz 4 [[email protected] tmp]# cd mysql-mmm-2.2.1/ 5 [[email protected] mysql-mmm-2.2.1]# make install注意,注意,注意: 通常使用以上編譯安裝也會失敗,強烈建議使用yum安裝,但yum安裝必須使得MySQL版本為mysql-community-server-5.6.37(或以上)!
5.3 目錄構成
六 配置MMM
6.1 Master01的mmm_agent配置
1 [[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf 2 include mmm_common.conf 3 this db1提示:設定db1的配置資訊,此db1名字可自定義,但必須和mmm_common.conf 中一致。
6.2 Master01的mmm_common配置
1 [[email protected] ~]# vi /etc/mysql-mmm/mmm_common.conf 2 active_master_role writer 3 #當設定為writer的時候,需要在所有MySQL節點設定“read_only=1”,則MMM會本劇每個節點的角色進行動態判斷,當MMM的角色設定<role writer>時候,則會自動新增“set global read_only=0”操作,即開啟寫許可權。 4 <host default> 5 cluster_interface eth0 #設定網路介面,不能為子介面。 6 pid_path /var/run/mysql-mmm/mmm_agentd.pid #設定PID檔案路徑 7 bin_path /usr/libexec/mysql-mmm/ #設定MMM可執行檔案路徑 8 replication_user repl_user #設定複製的使用者名稱 9 replication_password x12345678 #設定複製的使用者名稱的密碼 10 agent_user mmm_agent #設定更改只讀操作的使用者 11 agent_password x12345678 #設定更改只讀操作使用者的密碼 12 </host> 13 14 <host db1> #設定db1的配置資訊,此db1名字可自定義,但必須和mmm_agent.conf中一致。 16 ip 172.24.8.10 #設定db1的物理IP 17 mode master #設定db1角色為Master 18 peer db2 #設定db1對等的主機名,即db2和db1均為Master 19 </host> 20 21 <host db2> #類似db1的設定 22 ip 172.24.8.11 23 mode master 24 peer db1 25 </host> 26 27 <host db3> #類似db1的設定 28 ip 172.24.8.12 29 mode slave #設定db3的角色為Slave 30 </host> 31 32 <host db4> #類似db1的設定 33 ip 172.24.8.13 34 mode slave #設定db4的角色為Slave 35 </host> 36 37 <role writer> #設定可寫角色 38 hosts db1, db2 #設定可執行寫操作的主機 39 ips 172.24.8.100 #設定可寫的虛擬IP 40 mode exclusive #設定角色的模式為互斥,互斥角色只有一個IP,並且同一時間只能分配一個主機。 41 </role> 42 43 <role reader> #設定只讀角色 44 hosts db1, db2, db3, db4 #設定只讀角色的主機 45 ips 172.24.8.101, 172.24.8.102, 172.24.8.103, 172.24.8.104 46 #設定可讀的虛擬IP,可以有多個。 47 mode balanced
#設定角色的模式為負載均衡,在負載均衡角色中,可以有多個IP,這些IP被均衡地、動態地分配給多個MySQL主機。
49 </role>
6.3 Master01的mysql-mmm-agent配置
1 [[email protected] ~]# vi /etc/default/mysql-mmm-agent 2 ENABLED=1注意:使用yum安裝則不需要配置mysql-mmm-agent ,預設已經添加了ENABLED=1。
6.4 其他節點配置
1 [[email protected] ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/ 2 [[email protected] ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/ 3 [[email protected] ~]# scp /etc/mysql-mmm/mmm_common.conf [email protected]:/etc/mysql-mmm/ 4 [[email protected] ~]# scp /etc/default/mysql-mmm-agent [email protected]://etc/default/ 5 [[email protected] ~]# scp /etc/default/mysql-mmm-agent [email protected]://etc/default/ 6 [[email protected] ~]# scp /etc/default/mysql-mmm-agent [email protected]://etc/default/提示:所有節點的mysql-mmm-agent和mmm_common.conf內容一致,從Master01複製即可,Monitor不需要配置agent。
1 [[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf 2 include mmm_common.conf 3 this db2 4 [[email protected] ~]## vi /etc/mysql-mmm/mmm_agent.conf 5 include mmm_common.conf 6 this db3 7 [[email protected] ~]## vi /etc/mysql-mmm/mmm_agent.conf 8 include mmm_common.conf 9 this db4
6.5 管理Monitor節點配置
1 [[email protected] ~]# vi /etc/mysql-mmm/mmm_mon.conf 2 include mmm_common.conf 3 <monitor> 4 ip 127.0.0.1 #為了安全,只設置本機監聽,mmm_mond預設監聽的埠為9988 6 pid_path /var/run/mysql-mmm/mmm_mond.pid #設定mmm_mond程序pid檔案位置 8 bin_path /usr/libexec/mysql-mmm #mmm可執行檔案路徑 10 status_path /var/lib/mysql-mmm/mmm_mond.status #mmm叢集的狀態檔案 12 ping_ips 172.24.8.10, 172.24.8.11, 172.24.8.12, 172.24.8.13 13 #用於測試的IP,只要其中有一個地址能ping通,代表網路正常,不要寫入本機(即Monitor)IP。 14 auto_set_online 60 #設定是否自動上線,若大於0,抖動的主機在抖動時間範圍過後,自動上線。 16 …… 17 </monitor> 18 19 <host default> 20 monitor_user mmm_monitor #設定mmm_monitor賬號。 22 monitor_password x12345678 #設定mmm_monitor密碼。 24 </host> 25 debug 0 #mmm管理器的執行模式,1為debug模式,0為正常模式。注意:mmm-mon.conf只需要在監控管理Monitor節點上配置即可。
七 MMM叢集的啟動
7.1 管理監控Monitor節點啟動
1 [[email protected] ~]# /etc/init.d/mysql-mmm-monitor start 2 [[email protected] ~]# chkconfig mysql-mmm-monitor on
7.2 所有agent節點啟動
1 [[email protected] ~]# /etc/init.d/mysql-mmm-agent start 2 [[email protected] ~]# chkconfig mysql-mmm-agent on 3 [[email protected] ~]# /etc/init.d/mysql-mmm-agent start 4 [