搭建 mysql-mmm 高可用群集
阿新 • • 發佈:2018-07-16
body repo ffffff db2 控制 cati 相同 onf 同步 搭建 mysql-mmm 高可用群集
MMM 簡介 :
MMM(Master-Master replication manager for MySQL)是一套支持雙主故障切換和雙主日常管理的腳本程序。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)復制,雖然叫做雙主復制,但是業務上同一時刻只允許對一個主進行寫入,另一臺備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱,可以說MMM這套腳本程序一方面實現了故障切換的功能,另一方面其內部附加的工具腳本也可以實現多個slave的read負載均衡。
MMM提供了自動和手動兩種方式移除一組服務器中復制延遲較高的服務器的虛擬ip,同時它還可以備份數據,實現兩節點之間的數據同步等。由於MMM無法完全的保證數據一致性,所以MMM適用於對數據的一致性要求不是很高,但是又想最大程度的保證業務可用性的場景。對於那些對數據的一致性要求很高的業務,非常不建議采用MMM這種高可用架構。
優點:
1 穩定和成熟的開源產品,經過了時間的考驗 核心技術是mysql自己的技術,只是使用腳本程序來控制,所以在原理上比較容易理解,而且管理能夠更智能化。
2 安裝簡單,配置簡單,使用簡單
3 功能強大 (HA,failover,tools套件,cluster模式可以一個monitor管理多個mmm組)
缺點:
1 由於架構裏只有一個寫入點,所以擴展性是有限的,但是對一般中型企業夠用了。
解決方案:對於大應用可以采取垂直拆分到多個mmm架構的方式,使用mmm cluster來管理。
2 對於讀寫分離和讀負載均衡還是要程序來開發或者使用其他工具完成。
MMM 高可用架構 :
-
mmm_mond:監控進程,負責所有的監控工作,決定和處理所有節點角色活動。此腳本需要在監管機上運行。
-
mmm_agentd:運行在每個mysql服務器上的代理進程,完成監控的探針工作和執行簡單的遠端服務設置。此腳本需要在被監管機上運行。
-
mmm_control:一個簡單的腳本,提供管理mmm_mond進程的命令。
本案實例 :
主機名 | 系統 | 主要軟件 | IP | 虛擬IP |
---|---|---|---|---|
mysql-master1 | CentOS 7.3 x86_64 | mmm | 192.168.217.129 | 192.168.217.100 |
mysql-master2 | CentOS 7.3 x86_64 | mmm | 192.168.217.130 | 192.168.217.100 |
mysql-slave1 | CentOS 7.3 x86_64 | mmm | 192.168.217.131 | 192.168.217.200 |
mysql-slave2 | CentOS 7.3 x86_64 | mmm | 192.168.217.132 | 192.168.217.210 |
monitor | CentOS 7.3 x86_64 | mmm | 192.168.217.133 |
安裝 MMM 在所有服務器上安裝 :
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #配置ALI雲源,然後安裝epel-release源。
yum clean all && yum makecache #刪除緩存 下載到本地電腦緩存
yum -y install epel-release #安裝epel 源 用於安裝 mmm
yum -y install mysql-mmm* #安裝 mmm 服務 在所有服務器上安裝
配置 MySQL 服務器 :
-
配置所有的 mysql ,server-id 不同之外其他都相同 :
vim /etc/my.cnf
[mysqld]
user = mysql #管理用戶
basedir = /usr/local/mysql #工作目錄
datadir = /usr/local/mysql/data #數據庫文件
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid #pid 進程文件
socket = /usr/local/mysql/mysql.sock #鏈接數據庫
server-id = 1
binlog-ignore-db=mysql,information_schema #不需要同步的數據庫名稱
log_slave_updates=true #從服務器更新二進制日誌
sync_binlog=1 #同步二進制日誌
auto_increment_increment=2 #字段一次遞增值
auto_increment_offset=1 #自增字段的起始值
log-error=/usr/local/mysql/data/mysql_error.log #錯誤日誌
general_log=ON #開啟通用日誌
general_log_file=/usr/local/mysql/data/mysql_general.log
log_bin=mysql-bin #二進制日誌
slow_query_log=ON #開啟慢查詢日誌
slow_query_log_file=mysql_slow_query.log
long_query_time=1
-
把配置文件復制到其它3臺數據庫服務器上並啟動服務器
scp /etc/my.cnf [email protected]:/etc/ #對方有權限的用戶和IP地址 輸入yes 、密碼進行復制 systemctl restart mysqld.service #修改所有數據庫的 server-id 重啟服務
-
配置主主復制 :
mysql -u root -p #進入數據庫
在m1上為m2授予從的權限,在m2上也要為m1授予從的權限
mysql>grant replication slave on *.* to ‘replication‘@‘192.168.217.%‘ identified by ‘123456‘;
mysql>show master status; #記錄日誌文件名稱和 位置值,在兩臺主上查看。
mysql>change master to master_host=‘192.168.217.129‘,
master_user=‘replication‘,master_password=‘123456‘,
master_log_file=‘mysql-bin.000001‘,master_log_pos=1104;
註意 指向的IP地址、日誌名稱、偏移量 ,不要搞錯
mysql>start slave; #開啟同步
mysql>show slave status\G; #查看鏈接狀態
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上兩臺主都執行,從不需要 。可以在主服務器上創建數據庫 、在另一臺主服務器查看、刪除,做測試。
-
配置兩臺從服務器 :
指向隨便一臺主服務器即可
mysql>change master to master_host=‘192.168.217.129‘,
master_user=‘replication‘,master_password=‘123456‘,
master_log_file=‘mysql-bin.000001‘,master_log_pos=1104;
註意 指向的IP地址、日誌名稱、偏移量 ,不要搞錯
start slave;
show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
測試主從、主主、同步 情況
所有主機上都要配置 MMM
-
配置 mysql-master1 :
cd /etc/mysql-mmm/ vim mmm_common.conf …… <host default> cluster_interface ens32 #網卡名稱 …… replication_user replication #主從授權用戶 replication_password 123456 agent_user mmm_agent #代理用戶 agent_password 123456 .... <host db1> ip 192.168.217.129 #主服務器 mode master peer db2 </host> .... <host db2> ip 192.168.217.130 #主服務器 mode master peer db1 </host> .... <host db3> ip 192.168.217.131 #從服務器 mode slave </host> .... <host db4> ip 192.168.217.132 #從服務器 mode slave </host> .... <role writer> hosts db1, db2 ips 192.168.217.100 #主服務器虛擬IP地址 mode exclusive </role> .... <role reader> hosts db3, db4 ips 192.168.217.200, 192.168.217.210 #從服務器虛擬IP地址 mode balanced </role>
scp mmm_common.conf [email protected]:/etc/mysql-mmm/ scp mmm_common.conf [email protected]:/etc/mysql-mmm/ scp mmm_common.conf [email protected]:/etc/mysql-mmm/ scp mmm_common.conf [email protected]:/etc/mysql-mmm/
配置 monitor 服務器上 :
cd /etc/mysql-mmm/
vim mmm_mon.conf
……
ping_ips 192.168.217.129,192.168.217.130,192.168217.131,192.168.217.132 #數據庫服務器地址
auto_set_online 10 #設置自動在線時間
……
<host default>
monitor_user mmm_monitor #監控用戶
monitor_password 123456
</host>
在所有數據庫授權和修改 :
在所有數據庫上為mmm_agent授權
mysql>grant super, replication client, process on *.* to ‘mmm_agent‘@‘192.168.217.%‘ identified by ‘123456‘;
在所有數據庫上為mmm_moniter授權
mysql>grant replication client on *.* to ‘mmm_monitor‘@‘192.168.217.%‘ identified by ‘123456‘;
flush privileges; #刷新
修改所有數據庫的mmm_agent.conf文件
vim /etc/mysql-mmm/mmm_agent.conf
this db1 #/根據規mmm_common.conf 配置中<host db1> 對應的IP地址 修改
在所有數據庫服務器上啟動代理服務
systemctl start mysql-mmm-agent.service #開啟代理服務
systemctl enable mysql-mmm-agent.service #開機自啟動
配置 monitor 服務器上 :
systemctl start mysql-mmm-monitor.service #啟動監控服務
mmm_control show #查看各節點的情況
db1(192.168.217.129) master/ONLINE. Roles: writer(192.168.217.100)
db2(192.168.217.130) master/ONLINE. Roles:
db3(192.168.217.131) slave/ONLINE. Roles: reader(192.168.217.200)
db4(192.168.217.132) slave/ONLINE. Roles: reader(192.168.217.210)
mmm_control checks all #各種OK 說明運轉正常
mmm_control move_role writer db2 #手動指定活躍服務器 註意:不會搶占
mmm_control show #查看各節點的情況
db1(192.168.217.129) master/ONLINE. Roles:
db2(192.168.217.130) master/ONLINE. Roles: writer(192.168.217.100)
db3(192.168.217.131) slave/ONLINE. Roles: reader(192.168.217.200)
db4(192.168.217.132) slave/ONLINE. Roles: reader(192.168.217.210)
測試 :關閉 mysql-master1 服務 ,查看 mysql-master2 會不會搶占 。註意:等待一段時間查看 。
關閉 mysql-slave1 服務 ,mysql-slave1 虛擬IP會自動漂移到mysql-slave2上 ,mysql-slave2上會有兩個地址 。
搭建 mysql-mmm 高可用群集