mysql-mmm高可用架构
生活随笔
收集整理的這篇文章主要介紹了
mysql-mmm高可用架构
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、說明
1、本文將介紹如何使用mysql-mmm搭建數(shù)據(jù)庫的高可用架構(gòu),MMM即Master-Master?Replication?Manager?for?MySQL(mysql主主復(fù)制管理器)關(guān)于mysql主主復(fù)制配置的監(jiān)控、故障轉(zhuǎn)移和管理的一套可伸縮的腳本套件(在任何時(shí)候只有一個(gè)節(jié)點(diǎn)可以被寫入),這個(gè)套件也能對居于標(biāo)準(zhǔn)的主從配置的任意數(shù)量的從服務(wù)器進(jìn)行讀負(fù)載均衡,所以你可以用它來在一組居于復(fù)制的服務(wù)器啟動虛擬ip,除此之外,它還有實(shí)現(xiàn)數(shù)據(jù)備份、節(jié)點(diǎn)之間重新同步功能的腳本。MySQL本身沒有提供replication?failover的解決方案,通過MMM方案能實(shí)現(xiàn)服務(wù)器的故障轉(zhuǎn)移,從而實(shí)現(xiàn)mysql的高可用。MMM不僅能提供浮動IP的功能,更可貴的是如果當(dāng)前的主服務(wù)器掛掉后,會將你后端的從服務(wù)器自動轉(zhuǎn)向新的主服務(wù)器進(jìn)行同步復(fù)制,不用手工更改同步配置。這個(gè)方案是目前比較成熟的解決方案(上面這段話從網(wǎng)上載錄)。至于mmm的具體介紹我這里就不多講了,詳情請看官網(wǎng):http://mysql-mmm.org。2、該方案的優(yōu)缺點(diǎn):優(yōu)點(diǎn):穩(wěn)定性高,可擴(kuò)展性好,高可用,當(dāng)主服務(wù)器掛掉以后,另一個(gè)主立即接管,其他的從服務(wù)器能自動切換,不用人工干預(yù)。缺點(diǎn):monitor節(jié)點(diǎn)是單點(diǎn),不過這個(gè)你也可以結(jié)合keepalived或者h(yuǎn)aertbeat做成高可用二、環(huán)境1、服務(wù)器列表| 服務(wù)器 | 主機(jī)名 | IP | serverID | mysql版本 | 系統(tǒng) |
| master1 | db1 | 172.28.26.101 | 101 | mysql5.5.15 | Centos?6.4 |
| master2 | db2 | 172.28.26.102 | 102 | mysql5.5.15 | Centos?6.4 |
| slave1 | db3 | 172.28.26.188 | 188 | mysql5.5.15 | Centos?6.4 |
| slave2 | db4 | 172.28.26.189 | 189 | mysql5.5.15 | Centos?6.4 |
| monitor | monitor | 172.28.26.103 | 無 | ? | Centos?6.4 |
| VIP | Role | description |
| 172.28.26.104 | write | 應(yīng)用配置的寫入VIP |
| 172.28.26.105 | read | 應(yīng)用配置的讀入VIP |
| 172.28.26.106 | read | 應(yīng)用配置的讀入VIP |
三、mysql的安裝1、只在master1上安裝即可,其他機(jī)器scp過去就好,最好用rsynctar -zxvf mysql-5.5.15.tar.gz cd mysql-5.5.15 cmake -DCMAKE_INSTALL_PREFIX:PATH=/data/mysql/navy1 -DMYSQL_DATADIR=/data/mysql/navy1/db -DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 make make install useradd mysql -s /sbin/nologin; cd /data/mysql/navy1; chown mysql:mysql db/ logs/ -R
?
vi?/data/mysql/navy1/my.cnf?(cp一份線上的配置文件修改一下)[mysqld_safe] log-error=/data/mysql/navy1/logs/mysqld.log pid-file=/data/mysql/navy1/logs/mysqld.pid [client] port = 3306 socket = /data/mysql/navy1/logs/mysql.sock [mysqld] port = 3306 socket = /data/mysql/navy1/logs/mysql.sock key_buffer = 384M max_allowed_packet = 1M table_cache = 512 sort_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 8M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size = 64M basedir=/data/mysql/navy1 datadir=/data/mysql/navy1/db thread_concurrency = 8 log-bin=mysql-bin binlog_format = mixed server-id = 101 max_connections=2048 character_set_server=utf8 wait_timeout=1800 interactive_timeout=1800 skip-show-database skip-name-resolve tmp_table_size = 512M max_heap_table_size = 512M binlog-ignore-db = mysql replicate-ignore-db = mysql binlog-ignore-db = information_schema replicate-ignore-db = information_schema binlog-ignore-db = performance_schema replicate-ignore-db = performance_schema binlog-ignore-db = test replicate-ignore-db = test innodb_data_home_dir = /data/mysql/navy1/db #innodb_data_file_path = ibdata1:4000M;ibdata2:10M:autoextend innodb_file_per_table=1 innodb_log_group_home_dir = /data/mysql/navy1/db innodb_buffer_pool_size = 2000M innodb_additional_mem_pool_size = 20M innodb_log_file_size = 100M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 2 innodb_lock_wait_timeout = 50 #default-storage-engine = MyISAM default-storage-engine = InnoDB [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [isamchk] key_buffer = 256M sort_buffer_size = 256M read_buffer = 2M write_buffer = 2M [myisamchk] key_buffer = 256M sort_buffer_size = 256M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout?
初始化數(shù)據(jù)庫:/data/mysql/navy1/scripts/mysql_install_db --user=mysql --basedir=/data/mysql/navy1 --datadir=/data/mysql/navy1/db/?
啟動數(shù)據(jù)庫:cd /data/mysql/navy1; /data/mysql/navy1/bin/mysqld_safe --defaults-extra-file=/data/mysql/navy1/my.cnf --user=mysql &?
2、其他三天機(jī)器的mysql的安裝僅需四步:A、把已經(jīng)安裝好的master上的mysql停掉,rsync到master2、和兩臺slave的對應(yīng)目錄下(/data/mysql/navy1)B、建用戶、改權(quán)限useradd mysql -s /sbin/nologin; cd /data/mysql/navy1; chown mysql:mysql db/ logs/ -RC、修改/data/mysql/navy1/my.cnf中的serverIDD、啟動數(shù)據(jù)庫:cd /data/mysql/navy1; /data/mysql/navy1/bin/mysqld_safe --defaults-extra-file=/data/mysql/navy1/my.cnf --user=mysql &?
四、主從配置(master1和master2配置成主主,slave1和slave2配置成master1的從):1、在master1上授權(quán):grant replication slave on *.* to slave@'172.28.26.102' identified by "123456"; grant replication slave on *.* to slave@'172.28.26.188' identified by "123456"; grant replication slave on *.* to slave@'172.28.26.189' identified by "123456";?
2、在master2上授權(quán):grant replication slave on *.* to slave@'172.28.26.101' identified by "123456"; grant replication slave on *.* to slave@'172.28.26.188' identified by "123456"; grant replication slave on *.* to slave@'172.28.26.189' identified by "123456";?
3、把master2、slave1和slave2配置成master1的從庫:A、在master1上執(zhí)行show?master?status?\G?獲取binlog文件和Position點(diǎn)mysql> show master status \G ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 3974 Current database: *** NONE *** *************************** 1. row *************************** File: mysql-bin.000024 Position: 107 Binlog_Do_DB: Binlog_Ignore_DB: mysql,information_schema,performance_schema,test,mysql,information_schema,performance_schema,test 1 row in set (0.00 sec)?
B、在master2、slave1和slave2執(zhí)行change master to master_host='172.28.26.101', master_Port=3306, master_user='slave', master_password='123456', master_log_file='mysql-bin.000024', master_log_pos=107; slave start;?
4、把master1配置成master2的從庫:A、在master2上執(zhí)行show?master?status?\G?獲取binlog文件和Position點(diǎn)mysql> show master status \G *************************** 1. row *************************** File: mysql-bin.000025 Position: 107 Binlog_Do_DB: navy Binlog_Ignore_DB: mysql,mysql,information_schema,performance_schema,test,mysql,information_schema,performance_schema,test 1 row in set (0.00 sec)?
B、在master1上執(zhí)行:change master to master_host='172.28.26.101', master_Port=3306, master_user='slave', master_password='123456', master_log_file='mysql-bin.000025', master_log_pos=107; slave start;?
5、在各個(gè)機(jī)器上執(zhí)行:mysql> show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.28.26.102 Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000025 Read_Master_Log_Pos: 107 Relay_Log_File: mysqld-relay-bin.000015 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000025 Slave_IO_Running: Yes Slave_SQL_Running: Yes?
如果Slave_IO_Running和Slave_SQL_Running都為yes,那么主從就已經(jīng)配置OK了?
五、mysql-mmm安裝1、db節(jié)點(diǎn):yum -y install mysql-mmm-agent?
2、monitor節(jié)點(diǎn):yum -y install mysql-mmm*?
六、mysql-mmm的配置:1、在4個(gè)db節(jié)點(diǎn)授權(quán):GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'172.28.26.%' IDENTIFIED BY '123456'; GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'172.28.26.%' IDENTIFIED BY '123456';?
2、修改配置文件vi?/etc/mysql-mmm/mmm_common.conf?(db、monitor一樣樣的)active_master_role writer <host default> cluster_interface eth1 pid_path /var/run/mysql-mmm/mmm_agentd.pid bin_path /usr/libexec/mysql-mmm/ replication_user slave replication_password 123456 agent_user mmm_agent agent_password 123456 </host> <host db1> ip 172.28.26.101 mysql_port 3306 mode master peer db2 </host> <host db2> ip 172.28.26.102 mysql_port 3306 mode master peer db1 </host> <host db3> ip 172.28.26.188 mysql_port 3306 mode slave peer db3 </host> <host db4> ip 172.28.26.189 mysql_port 3306 mode slave peer db4 </host> <role writer> hosts db1, db2 ips 172.28.26.104 mode exclusive </role> <role reader> hosts db3, db4 ips 172.28.26.105,172.28.26.106 mode balanced </role>?
PS:peer的意思是等同,表示db1與db2是同等的。
ips指定VIP
mode?exclusive?只有兩種模式:exclusive是排他,在這種模式下任何時(shí)候只能一個(gè)host擁有該角色
balanced模式下可以多個(gè)host同時(shí)擁有此角色。一般writer是exclusive,reader是balanced
vi?/etc/mysql-mmm/mmm_agent.conf?(master1、master2、slave1和slave2分別修改為:this?db1、db2、db3、db4)vi?/etc/mysql-mmm/mmm_mon.conf(僅monitor節(jié)點(diǎn)有)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 ping_ips 172.28.26.101,172.28.26.102 auto_set_online 10 # 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 monitor_password 123456 </host> debug 0?
七、mmm啟動1、db節(jié)點(diǎn):/etc/init.d/mysql-mmm-agent start echo "/etc/init.d/mysql-mmm-agent start" >> /etc/rc.local?
2、?monitor節(jié)點(diǎn):?
八、測試1、集群正常啟動:[root@monitor ~]# mmm_control show db1(172.28.26.101) master/ONLINE. Roles: writer(172.28.26.104) db2(172.28.26.102) master/ONLINE. Roles: db3(172.28.26.188) slave/ONLINE. Roles: reader(172.28.26.106) db4(172.28.26.189) slave/ONLINE. Roles: reader(172.28.26.105)?
2、停掉db1,看172.28.26.104是否漂移到db2上,db3、db4的主是否切換到db2[root@monitor ~]# mmm_control show db1(172.28.26.101) master/HARD_OFFLINE. Roles: db2(172.28.26.102) master/ONLINE. Roles: writer(172.28.26.104) db3(172.28.26.188) slave/ONLINE. Roles: reader(172.28.26.106) db4(172.28.26.189) slave/ONLINE. Roles: reader(172.28.26.105)mysql> show slave status \G Connection id: 5844 Current database: *** NONE *** *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.28.26.102 Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000025 Read_Master_Log_Pos: 107 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000025 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB:?
轉(zhuǎn)載于:https://blog.51cto.com/navyaijm/1230674
總結(jié)
以上是生活随笔為你收集整理的mysql-mmm高可用架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jbpm系列之五--使用decision
- 下一篇: IOS视频播放器的制作