MySQL FailOver(官方自帶,free)


為什么

傳統復制和GTIDs切換的缺點

當replication故障出現之后,最頭疼是replication架構的調整

一旦master down了,就需要配置某一台slave作為master

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

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

## 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了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM