標籤:isa iter 結合 資料庫管理 利用 gen none host 時間
為什麼要使用MySQL高可用群集
- 在實際生產環境中,當普通的MySQL主從複製和讀寫分離不能滿足實際需求時,就需要考慮MySQL的高可用群集,出於安全形度考慮,當資料訪問量過大帶來主伺服器負載增大,當出現主伺服器宕機一個時,保證資料服務不會中斷的情況下,從伺服器會自動尋找另一主伺服器,而從伺服器也會像主伺服器一樣,當其中一個宕機時,依舊可以保證服務不會中斷。
MMM高可用架構
什麼是MMM?
- MMM(Master-Master replication manager for MySQL)是一套支援雙主故障切換和雙主日常管理的指令碼程式。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)複製,雖然叫做雙主複製,但是業務上同一時刻只允許對一個主進行寫入,另一台備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱,可以說MMM這套指令碼程式一方面實現了故障切換的功能,另一方面其內部附加的工具指令碼也可以實現多個slave的read負載平衡。
- MMM提供了自動和手動兩種方式移除一組伺服器中複寫延遲較高的伺服器的虛擬ip,同時它還可以備份資料,實現兩節點之間的資料同步等。由於MMM無法完全的保證資料一致性,所以MMM適用於對資料的一致性要求不是很高,但是又想最大程度的保證業務可用性的情境。對於那些對資料的一致性要求很高的業務,非常不建議採用MMM這種高可用架構。
MySQL-MMM優缺點
MMM工作原理
- MMM(Master-Master replication managerfor Mysql,Mysql主主複製管理器)是一套靈活的指令碼程式,基於perl實現,用來對mysql replication進行監控和故障遷移,並能管理mysql Master-Master複製的配置(同一時間只有一個節點是可寫的)。
MMM高可用架構說明
- mmm_mond:監控進程,負責所有的監控工作,決定和處理所有節點角色活動。此指令碼需要在監管機上運行。
- mmm_agentd:運行在每個mysql伺服器上的代理進程,完成監控的探針工作和執行簡單的遠端服務設定。此指令碼需要在被監管機上運行。
- mmm_control:一個簡單的指令碼,提供管理mmm_mond進程的命令。
mysql-mmm的監管端會提供多個虛擬IP(VIP),包括一個可寫VIP,多個可讀VIP,通過監管的管理,這些IP會綁定在可用mysql之上,當某一台mysql宕機時,監管會將VIP遷移至其他mysql。
- 在整個監管過程中,需要在mysql中添加相關授權使用者,以便讓mysql可以支援監理機的維護。授權的使用者包括一個mmm_monitor使用者和一個mmm_agent使用者,如果想使用mmm的備份工具則還要添加一個mmm_tools使用者。
實驗部署什麼是Mariadb?
- MariaDB資料庫管理系統是MySQL的一個分支,主要由開源社區在維護,採用GPL授權許可 MariaDB的目的是完全相容MySQL,包括API和命令列,使之能輕鬆成為MySQL的代替品。在儲存引擎方面,使用XtraDB(英語:XtraDB)來代替MySQL的InnoDB。
- MariaDB基於事務的Maria儲存引擎,替換了MySQL的MyISAM儲存引擎,它使用了Percona的 XtraDB,InnoDB的變體,分支的開發人員希望提供訪問即將到來的MySQL 5.4 InnoDB效能。這個版本還包括了 PrimeBase XT (PBXT) 和 FederatedX儲存引擎。
- 這裡我們為了實驗方便,不再一台一台伺服器去安裝MySQL,這樣將消耗大量時間,選擇利用Mariadb臨時代替MySQL,但實驗操作與MySQL伺服器相同。
實驗環境
伺服器 |
作業系統 |
IP地址 |
所需軟體 |
master1 |
centos7.3 x86_64 |
192.168.144.128 |
mariadb、MySQL-MMM |
master2 |
centos7.3 x86_64 |
192.168.144.145 |
mariadb、MySQL-MMM |
slave1 |
centos7.3 x86_64 |
192.168.144.141 |
mariadb、MySQL-MMM |
slave2 |
centos7.3 x86_64 |
192.168.144.129 |
mariadb、MySQL-MMM |
monitor |
centos7.3 x86_64 |
192.168.144.136 |
MySQL-MMM |
搭建YUM源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum clean all && yum makecache
安裝Mariadb
yum -y install mariadb-server mariadb
systemctl disable firewalld.service
systemctl stop firewalld.service
setenforce 0
vim /etc/my.cnf
[mysqld]log_error=/var/lib/mysql/mysql.errlog=/var/lib/mysql/mysql_log.loglog_slow_queries=/var/lib/mysql_slow_queris.logbinlog-ignore-db=mysql,information_schemacharacter_set_server=utf8log_bin=mysql_binserver_id=1 //這裡需要區分每台伺服器ID需不同log_slave_updates=truesync_binlog=1auto_increment_increment=2auto_increment_offset=1
設定主主同步master1同步master2
mysql>show master status;
MariaDB [(none)]> show master status;+------------------+----------+--------------+--------------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+--------------------------+| mysql_bin.000001 | 577 | | mysql,information_schema |+------------------+----------+--------------+--------------------------+1 row in set (0.00 sec)
- 在m1上為m2授予從的許可權,在m2上也要為m1授予從的許可權
mysql>grant replication slave on . to ‘replication‘@‘192.168.144.%‘ identified by ‘123456‘; //兩台主都執行,從不需要
mysql>change master to master_host=‘192.168.144.145‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000001‘,master_log_pos=577;
mysql>start slave; //主主之間開啟相互slave模式
mysql>flush privileges;
mysql>show slave status\G; //查看狀態
mater2同步master1
設定主從同步
- 兩台從伺服器只需要跟其中一台主伺服器同步,另外一台主伺服器也會自動同步。
mysql>change master to master_host=‘192.168.144.128‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000001‘,master_log_pos=577;
mysql>start slave;
mysql>show slave status\G;
- 主從同步此處不再贅述,詳細內容可參見MySQL主從同步服務詳解
在所有伺服器上安裝MySQL-MMM
yum -y install mysql-mmm*
cd /etc/mysql-mmm/
vi mmm_common.conf //所有主機上都要配置
- 切記,對於每台安裝了MySQL-MMM的伺服器都需要配置位址集區
<host default> cluster_interface ens33 pid_path /run/mysql-mmm-agent.pid bin_path /usr/libexec/mysql-mmm/ replication_user replication //MMM伺服器切換驗證 replication_password 123456 agent_user mmm_agent //MMM訪問資料庫代理驗證 agent_password 123456</host><host db1> //資料庫位址集區的設定 ip 192.168.144.128 mode master peer db2</host><host db2> ip 192.168.144.145 mode master peer db1</host><host db3> ip 192.168.144.141 mode slave</host><host db4> ip 192.168.144.129 mode slave</host><role writer> //設定僅可在主伺服器上寫入 hosts db1, db2 ips 192.168.144.200 //設定主伺服器虛擬IP mode exclusive</role><role reader> //設定僅可在從伺服器上讀取 hosts db3, db4 ips 192.168.144.201, 192.168.144.202 //設定從伺服器虛擬IP mode balanced</role>
vi /etc/mysql-mmm/mmm_agent.conf
this db1 //根據規划進行逐一調整
- 在所有資料庫伺服器上為mmm_agent授權,方便故障點切換
mysql>grant super, replication client, process on . to ‘mmm_agent‘@‘192.168.144.%‘ identified by ‘123456‘;
- 在所有資料庫上為mmm_moniter授權,讓monitor可以監控伺服器
mysql>grant replication client on . to ‘mmm_monitor‘@‘192.168.144.%‘ identified by ‘123456‘;
mysql>flush privileges;
systemctl start mysql-mmm-agent.service
systemctl enable mysql-mmm-agent.service 加入開機自啟動
在monitor上配置
cd /etc/mysql-mmm/ //改密碼
vi mmm_mon.conf
<monitor> ip 127.0.0.1 pid_path /run/mysql-mmm-monitor.pid bin_path /usr/libexec/mysql-mmm status_path /var/lib/mysql-mmm/mmm_mond.status ping_ips 192.168.144.128,192.168.144.145,192.168.144.141,192.168.144.129 //設定監控位址集區 auto_set_online 10 //設定自動上線時間10S······<host default> monitor_user mmm_monitor monitor_password 123456</host>
systemctl start mysql-mmm-monitor.service
mmm_control show
故障測試停止m1 確認 虛擬位址 200 是否移動到 m2 上。注意:主不會搶佔
mmm_control show db1(192.168.144.128) master/HARD_OFFLINE. Roles: db2(192.168.144.145) master/ONLINE. Roles: writer(192.168.144.200)
在m1伺服器上為監控機地址授權登入
mysql>grant all on . to ‘testdba‘@‘192.168.144.136‘ identified by ‘123456‘;
flush privileges;
在監控伺服器上登入
mysql -utestdba -p -h 192.168.144.200 //虛擬位址
MySQL高可用群集--MMM高可用架構