MySQL 高可用性keepalived+mysql

生產環境中一臺mysql 主機存在單點故障,因此咱們要確保 mysql 的高可用性,即兩臺 MySQLhtml

服務器若是其中有一臺 MySQL 服務器掛掉後,另一臺能立馬接替其進行工做。mysql

MySQL 的高可用方案通常有以下幾種:linux

keepalived+雙主,MHAPXCMMMHeartbeat+DRBD 等,比較經常使用的是 keepalived+雙主, MHA PXCgit

本節主要介紹了利用 keepalived 實現 MySQL 數據庫的高可用。github

Keepalived+mysql 雙主來實現MySQL-HA,咱們必須保證兩臺MySQL 數據庫的數據徹底同樣,基本思路是兩臺 MySQL 互爲主從關係,經過 Keepalived 配置虛擬 IP,實現當其中的一臺MySQL 數據庫宕機後,應用可以自動切換到另一臺 MySQL 數據庫,保證系統的高可用。拓撲環境sql

OScentos6.5 x86_64數據庫

Mysql 版本:mysql 5.5.38centos

Keepalived: keepalived-1.2.20 Mysql-vip:192.168.1.100 Mysql-master1:192.168.1.101 Mysql-master2:192.168.1.102緩存

1、配置兩臺 mysql 主主同步服務器

 blob.png

 

該過程的第一部分就是 master 記錄二進制日誌。在每一個事務更新數據完成以前,master 二日誌記錄這些改變。MySQL 將事務寫入二進制日誌。在事件寫入二進制日誌完成後,master通知存儲引擎提交事務。

下一步就是slave master binary log 拷貝到它本身的中繼日誌。首先,slave 開始一個工做線程——I/O 線程I/O 線程在master 上打開一個普通的鏈接,而後開始 binlog dump processBinlog  dump  process master 的二進制日誌中讀取事件,若是已經同步了 master,它會睡眠並等待 master 產生新的事件。I/O 線程將這些事件寫入中繼日誌。

SQL slave threadSQL 從線程)處理該過程的最後一步。SQL 線程從中繼日誌讀取事件,並重放其中的事件而更新 slave 的數據,使其與 master 中的數據一致。只要該線程與 I/O 線程保持一致,中繼日誌一般會位於 OS 的緩存中,因此中繼日誌的開銷很小。


主主同步就是兩臺機器互爲主的關係,在任何一臺機器上寫入都會同步。若 mysql 主機開啓了防火牆,須要關閉防火牆或建立規則。

1、修改 MySQL 配置文件

兩臺 MySQL 均要開啓 binlog 日誌功能,開啓方法:在 MySQL 配置文件[MySQLd]段中加上log-bin=MySQL-bin 選項,兩臺 MySQL server-ID 不能同樣,默認狀況下兩臺 MySQL serverID 都是 1,需將其中一臺修改成 2 便可。

master1 中有關複製的配置以下:

log-bin = mysql-bin binlog_format = mixed server-id = 1

relay-log = relay-bin

relay-log-index = slave-relay-bin.index auto-increment-increment = 2

auto-increment-offset = 1

重啓 mysqld 服務

#service mysqld restart

master2 中有關複製的配置以下:

log-bin = mysql-bin binlog_format = mixed server-id = 2

relay-log = relay-bin

relay-log-index = slave-relay-bin.index auto-increment-increment = 2

auto-increment-offset = 2

重啓 mysqld 服務

#service mysqld restart

注:master1 master2 只有 server-id 不一樣和 auto-increment-offset 不一樣。

mysql 中有自增加字段,在作數據庫的主主同步時須要設置自增加的兩個相關配置:

auto_increment_offset auto_increment_increment

auto-increment-increment 表示自增加字段每次遞增的量,其默認值是 1。它的值應設爲整個結構中服務器的總數,本案例用到兩臺服務器,因此值設爲 2

auto-increment-offset 是用來設定數據庫中自動增加的起點(即初始值),由於這兩能服務器都設定了一次自動增加值 2,因此它們的起點必須得不一樣,這樣才能避免兩臺服務器數據同步時出現主鍵衝突,

注:能夠在 my.cnf 文件中添加binlog_do_db=數據庫名」配置項(能夠添加多個)來指定要同步的數據庫

2、將 master1 設爲 master2 的主服務器

master1 主機上建立受權帳戶,容許在 master2(192.168.1.102)主機上鍊接

blob.png

查看 master1 的當前 binlog 狀態信息

 blob.png


master2 上將 master1 設爲自已的主服務器並開啓 slave 功能。


設置防火牆:

blob.png

設置防火牆:

#iptables I INPUT –p tcp –dport 3306 –j ACCEPT #service iptables save

查看從的狀態,mysql>show slave status\G;如下兩個值必須爲 yes,表明從服務器能正常鏈接主服務器

能正常鏈接主服務器

Slave_IO_Running:Yes 

Slave_SQL_Running:Yes


blob.png

3、將 master2 設爲 master1 的主服務器


master2 主機上建立受權帳戶,容許在 master1(192.168.1.101)主機上鍊接


blob.png


查看 master2 的當前 binlog 狀態信息

blob.png

master1 上將 master2 設爲自已的主服務器並開啓 slave 功能。

blob.png

設置防火牆:

#iptables I INPUT –p tcp –dport 3306 –j ACCEPT #service iptables save

查看從的狀態,如下兩個值必須爲 yes,表明從服務器能正常鏈接主服務器Slave_IO_Running:Yes

Slave_SQL_Running:Yes

blob.png





4、測試主主同步

master1 上建立要同步的數據庫如 test_db,並在 test_db 中建立一張測試表如 tab1

blob.png

查看 master2 主機是否同步了 master1 上的數據變化

blob.png

從上圖能夠看出master2 同步了 master 的數據變化

master2 主機上向 tab1 表中插入數據

blob.png

查看 master1 主機是否同步了 master2 上的數據變化

blob.png


如今任何一臺MySQL 上更新數據都會同步到另外一臺MySQLMySQL 同步完成。

注:若主 MYSQL 服務器已經存在,只是後期才搭建從 MYSQL 服務器,在置配數據同步前應先將主 MYSQL 服務器的要同步的數據庫拷貝到從 MYSQL 服務器上如先在主 MYSQL 上備份數據庫,再用備份在從MYSQL 服務器上恢復

下面咱們就完成keepalived 的高可用性。

keepalived 是集羣管理中保證集羣高可用的一個軟件解決方案,其功能相似於 heartbeat,用來防止單點故障

keepalived 是以 VRRP 協議爲實現基礎的VRRP 全稱 Virtual Router Redundancy Protocol,即虛擬路由冗餘協議

虛擬路由冗餘協議,能夠認爲是實現路由器高可用的協議,即將 N 臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個 master 和多個 backupmaster 上面有一個對外提供服務的 vipmaster 會發組播組播地址爲 224.0.0.18,當 backup 收不到 vrrp 包時就認 master 宕掉了,這時就須要根據 VRRP 的優先級選舉一個 backup  master。這樣的話就能夠保證路由器的高可用了。

keepalived 主要有三個模塊,分別是 core check vrrpcore 模塊爲 keepalived 的核心, 負責主進程的啓動、維護以及全局配置文件的加載和解析。check 負責健康檢查,包括常見的各類檢查方式。vrrp 模塊是來實現 VRRP 協議的。

2、keepalived 的安裝配置

1、在 master1 master2 上安裝軟件包 keepalived

安裝 keepalived 軟件包與服務控制


在編譯安裝 Keepalived 以前,必須先安裝內核開發包 kernel-devel 以及 openssl-develpopt-devel 等支持庫。


若沒有安裝則經過rpm yum 工具進行安裝編譯安裝 Keepalived

blob.png

相關文章
相關標籤/搜索