MySQL FailOver(官方自帶,free)

爲何

傳統複製和GTIDs切換的缺點 python

當replication故障出現以後,最頭疼是replication架構的調整 mysql

一旦master down了,就須要配置某一臺slave做爲master sql

slave上開啓二進制日誌文件,寫操做配置成新的slave。 數據庫

若是架構是MSS,新的relay提高爲master,後面的slave都須要change master to host,binlog-file,postion。還得保證數據的一致性,因此所要花費的時間很長 緩存

 

GTIDs只須要change master to new_host,可是在每臺機器都要執行 服務器

 

因此咱們使用mysql自帶的fail-over,而且提供它提供python API。後期能夠整合到自動運維平臺中去 架構

 

下載與安裝軟件

MySQL Utilities https://dev.mysql.com/downloads/utilities/ 運維

##maintaining and administering MySQL servers ide

Connector/Python https://dev.mysql.com/downloads/connector/python/ post

## a standardized database driver for Python platforms and development

yum install mysql-connector-python-2.1.3-1.el6.x86_64.rpm mysql-utilities-1.5.6-1.el6.noarch.rpm -y

 

服務搭建:

環境準備

monitor     server1     192.168.88.121        ##監控最好有獨立的服務器

master     server2     192.168.88.122

slave     server3     192.168.88.123

slave     server4     192.168.88.124

監控機須要鏈接到MS上,獲取運行狀態

受權: 基本的:super, replication,slave,reload,

有些時候,當多個程序運行mysql failover,##監控避免單點

create,insert,drop,select (--force不然failed,一旦出錯就會中止複製)

 

grant create,insert,drop,select,super,replication slave,reload on *.* to repm@192.168.88.121 identified by '123' with grant option;

 

檢測受權是否成功

show grants for 'repm'@'192.168.88.121'

在monitor測試mysql -urepmon -predhat -h 192.168.88.122

 

配置文件

##刪除skip-slave-start

+++增長配置

#add fail-over

report-host=本身IP                 ##向監控端報告本身的IP

master-info-repository=table            ##將主機信息保存在表中

relay-log-info-repository=table        ##將中繼信息保存在表中

+++

將相應的replication配置的緩存文件保存到數據表中,通常的狀況下,slave它的master的相關信息以及複製當前的信息保存在master.info和relay-log.info,用處:在從新啓動mysqld,mysql將自動啓動slave,而主機的信息和複製的信息就經過這兩個文件中的信息來獲取

 

若是想自動化監控複製和切換,故障出現,就得從新指定master和binlog,position,若是保存在文件中的話,可能監控端須要相關的權限操做文件,因此能夠在mysql的表中,這樣修改的,也能夠實時生效

注意:若是把master和relay-info保存在mysql的表,mysql鎖建立的表是Myisam表,可是官方建議使用Innodb存儲引擎,5.6以後呢默認時innodb,避免Myisam的自動修復功能

 

修改完成重啓mysqld。

注意下mysql數據庫中slave_master_info slave_relay_log_info兩張表

 

啓動監控端:

mysqlfailover --master=repmon:redhat@192.168.88.122 --discover-slaves-login=repmon:redhat

--master指定M,後接"用戶名:密碼@host"

--discover-slaves-login自動發現slave。後接鏈接slave的用戶名和密碼

--log=file.log        ##指定日誌

--failover-mode    ##auto(default,沒有slave可選就退出),elect(在制定的slave選取),fail(用於監控,沒有failover)

 

#####

GTID Executed Set

c09756b8-a7e7-11e5-9468-000c29df5442:1-24

 

WARNING: Errant transaction(s) found on slave(s).

Replication Health Status

+-----------------+-------+---------+--------+------------+---------+

| host | port | role | state | gtid_mode | health |

+-----------------+-------+---------+--------+------------+---------+

| 192.168.88.122 | 3306 | MASTER | UP | ON | OK |

| 192.168.88.123 | 3306 | SLAVE | UP | ON | OK |

| 192.168.88.124 | 3306 | SLAVE | UP | ON | OK |

+-----------------+-------+---------+--------+------------+---------+

#####

如今測試功能

停掉master,看slave是否接管master,並調整架構

/etc/init.d/mysqld stop

下面是monitor上的調整信息

Failed to reconnect to the master after 3 attemps.

 

Failover starting in 'auto' mode...

# Candidate slave 192.168.88.123:3306 will become the new master.

# Checking slaves status (before failover).

# Preparing candidate for failover.

# Creating replication user if it does not exist.

# ERROR: ERROR: Cannot grant replication slave to replication user.

# Stopping slaves.

# Performing STOP on all slaves.

# Switching slaves to new master.

# Disconnecting new master as slave.

# Starting slaves.

# Performing START on all slaves.

# Checking slaves for errors.

# Failover complete.

# Discovering slaves for master at 192.168.88.123:3306

######新的架構

b89f9be8-a8af-11e5-9980-000c29ccacd8:1-2 [...]

 

Transactions executed on the servers:

+-----------------+-------+---------+--------+------------+---------+

| host | port | role | state | gtid_mode | health |

+-----------------+-------+---------+--------+------------+---------+

| 192.168.88.123 | 3306 | MASTER | UP | ON | OK |

| 192.168.88.124 | 3306 | SLAVE | UP | ON | OK |

+-----------------+-------+---------+--------+------------+---------+

####

在新的master(server3)上測試插入以後數據時候同步

 

可是當原來的master(server2) 恢復會正常的時候,mysql failover是不可以自動發現,並調整爲原來的架構的。

因此要把master添加到集羣,只能手動的調整

> change master to

> master_host='192.168.88.123',

> master_user='rep',

> master_password='redhat',

> master_auto_position=1;

此時監控端又能夠檢測到server2了

相關文章
相關標籤/搜索