mysql高可用+keepalived

生產環境中一臺mysql主機存在單點故障,因此咱們要確保mysql的高可用性,即倆臺mysql服務器若是其中有一臺mysql服務器掛掉後,另一臺就能馬上接替進行工做。mysql

MYSQL的高可用方案通常有linux

Keepalived+雙主,MHA,PXC,MMM,Heartbeat+DRBD等 比較經常使用的是keepalived+雙主MHAPXC算法

此次主要介紹利用keepalived實現MYSQL數據庫的高可用。sql

基本思路:倆臺MYSQL互爲主從關係(雙主),經過keepalived配置配置虛擬IP,實現當其中一臺mysql掛機後,應用可以自動切換到另一臺MYSQL數據庫,保證系統的高可用。數據庫

操做系統 Centos7.2後端

MYSQL版本  5.7緩存

Keepalivedkeepalived-1.2服務器

Mysql-vip192.168.0.100網絡

Mysql-master1192.168.0.7session

Mysql-slave1192.168.0.6

截圖01.png



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

下一步就是slavemasterbinary log拷貝到它本身的中繼日誌。首先,slave開始一個工做線程--I/O線程。I/O線程在master上打開一個普通的鏈接,而後開始binlog dump process

Binlog dump process master的二進制日誌中讀取事件。 I/O線程將這些事件寫入中繼日誌。

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

主主同步就是倆臺機器互爲主從關係,在任何一臺機器上寫入都會同步。

1:修改MYSQL配置文件

倆臺mysql均要開啓binlog 日誌功能,開啓方法:在MYSQL配置文件加上

Log-bin=MYSQL-bin選項,倆臺mysqlserver-ID不能同樣,默認狀況下server-ID都是1,須要其中slave修改成2便可。

一:master1中有關配置以下

basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
server_id = 1
socket = /usr/local/mysql/mysql.sock
log-error = /usr/local/mysql/data/mysqld.err
log-bin=mysql-bin
binlog_format=mixed
relay-log=relay-bin
relay-log-index=slave-relay-bin.index
auto-increment-increment=2
auto-increment-offset=1

截圖01.png

重啓mysql服務

Master2中有關複製配置以下

[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
server_id = 2
socket = /usr/local/mysql/mysql.sock
log-error = /usr/local/mysql/data/mysqld.err
log-bin=mysql-bin
binlog_format=mixed
relay-log=relay-bin
relay-log-index=slave-relay-bin.index
auto-increment-increment=2
auto-increment-offset=2

截圖03.png

重啓mysqld服務

二:將master1設爲master2的主服務器

master1主機上建立受權帳戶,容許在master2192.168.0.6)主機上鍊接

mysql> grant replication slave on *.* to 'rep@192.168.0.7' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)

查看master1的當前binlog狀態信息

截圖06.png

slave上將master設爲本身的主服務器並開啓slave功能

mysql>change,master,to,master_host='192.168.0.6',master_user='rep',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=451;
Query OK, 0 rows affected, 2 warnings (0.04 sec)

截圖07.png

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

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

 Slave_IO_Running: Yes

 Slave_SQL_Running: Yes

mysql> show slave status\G;

截圖08.png

三,master2設爲master1的主服務器

slave主機上建立受權帳戶,容許在master192.168.0.6)主機上鍊接

mysql> grant replication slave on *.* to 'rep'@'192.168.0.6' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

查看slave的當前binlog狀態信息

mysql> show master  status;

截圖11.png

master上將slave設爲本身的主服務器並開啓slave功能

mysql>change,master,to ,master_host='192.168.0.7',master_user='rep',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.03 sec)

截圖12.png

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

截圖13.png

四:測試主主同步

master上建立數據庫 chai 看看slave是否同步

主的服務器

截圖14.png

從的服務器驗證已經同步過來

截圖15.png

如今任何一臺MYSQL上更新數據同步到另外一臺mysql 同步完成

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

接着完成keepalived的高可用性

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

keepalived的工做原理是VRRP(Virtual Router Redundancy Protocol)虛擬路由冗餘協議。
VRRP中有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。
VRRP路由器是指運行VRRP的路由器,是物理實體,虛擬路由器是指VRRP協議建立的,是邏輯概念。一組VRRP路由器協同工做,共同構成一臺虛擬路由器。 Vrrp中存在着一種選舉機制,用以選出提供服務的路由即主控路由,其餘的則成了備份路由。當主控路由失效後,備份路由中會從新選舉出一個主控路由,來繼續工做,來保障不間斷服務。

keepalived安裝配置

1 masterslave上安裝軟件包keepalived

安裝keepalived軟件包和服務控制

在編譯安裝keepalived以前,必須安裝內核開發包 kernel-devel 以及 openssl-devel popt-devel 等支持

截圖16.png

若沒有安裝經過rom或者yum工具安裝

編譯安裝keepalived

使用指定的linux內核位置對keepalived進行配置,並將安裝路徑制定爲根目錄,這樣就無需額外建立鏈接文件,配置完成 依次執行make make install 進行安裝

截圖17.png

使用keepalived服務

執行make install操做以後 會自動生成/etc/init.d/keepalived腳本文件,可是須要手動添加爲系統服務,這樣就可使用server chkconfig 工具對keepalived服務進程管理了

截圖18.png

2修改keepalived配置文件

keepalived 只有一個配置文件 keepalived.conf,裏面主要包括如下幾個配置區域,分別是

global_defsvrrp_instance virtual_server

global_defs:主要是配置故障發生時的通知對象以及機器標識。

vrrp_instance:用來定義對外提供服務的 VIP 區域及其相關屬性。

virtual_server:虛擬服務器定義

master1 主機上的 keepalived.conf 文件的修改:

vi /etc/keepalived/keepalived.conf:

! Configuration File for keepalived //!表示註釋

global_defs {

router_id MYSQL-1 //表示運行 keepalived 服務器的一個標識

}

vrrp_instance VI_1 {

 state BACKUP //指定 keepalived 的角色,兩臺配置此處均是 BACKUP,設爲 BACKUP 將根據

優先級決定主或從

 interface eth0 //指定 HA 監測網絡的接口

virtual_router_id 51 //虛擬路由標識,這個標識是一個數字(取值在 0-255 之間,用來區分多個

instance VRRP 組播),同一個 vrrp 實例使用惟一的標識,

確保和 master2 相同,同網內不一樣集羣此項必須不一樣,不然發

生衝突。

 priority 100 //用來選舉 master 的,要成爲 master,該項取值範圍是 1-255(在此範圍

以外會被識別成默認值 100,此處 master2 上設置爲 50

advert_int 1 //VRRP 包的時間間隔,即多久進行一次 master 選舉(能夠認爲是健康查

檢時間間隔)

nopreempt //不搶佔,即容許一個 priority 比較低的節點做爲 master,即便有 priority 更高

的節點啓動

 authentication { //認證區域,認證類型有 PASS HAIPSEC),推薦使用 PASS(密碼

只識別前 8 位)

auth_type PASS

auth_pass 1111

 }

virtual_ipaddress { //VIP 區域,指定 vip 地址

 192.168.0.100

 }

}

virtual_server 192.168.0.100 3306 { //設置虛擬服務器,須要指定虛擬 IP 地址和服務端口,

IP 與端口之間用空格隔開

delay_loop 2 //設置運行狀況檢查時間,單位是秒

lb_algo rr //設置後端調度算法,這裏設置爲 rr,即輪詢算法

lb_kind DR //設置 LVS 實現負載均衡的機制,有 NATTUNDR 三個模式可選

persistence_timeout 60 //會話保持時間,單位是秒。這個選項對動態網頁是很是有用的,

爲集羣系統中的 session 共享提供了一個很好的解決方案。

有了這個會話保持功能,用戶的請求會被一直分發到某個服務節點,

直到超過這個會話的保持時間。

 protocol TCP //指定轉發協議類型,有 TCP UDP 兩種

real_server 192.168.1.101 3306 { //配置服務節點 1,須要指定 real server 的真實 IP 地址和

端口,IP 與端口之間用空格隔開

注:slave 上此處改成 192.168.0.7(slave 本機 ip)

weight 3 //配置服務節點的權值,權值大小用數字表示,數字越大,權值越高,設置權

值大小爲了區分不一樣性能的服務器

notify_down /etc/keepalived/bin/mysql.sh //檢測到 realserver mysql 服務 down 後執行的

腳本

TCP_CHECK {

connect_timeout 3 //鏈接超時時間

nb_get_retry 3 //重連次數

delay_before_retry 3 //重連間隔時間

connect_port 3306//健康檢查端口

 }

 }

}

啓動 keepalived 服務

#/etc/init.d/keepalived start

3master1 master2 上都添加此檢測腳本,做用是當 mysql 中止工做時自動關閉本機的

keepalived,從而實現將故障機器踢出(因每臺機器上 keepalived 只添加了本機爲 realserver.

mysqld 正常啓動起來後,要手動啓動 keepalived 服務。

#mkdir /etc/keepalived/bin
vi /etc/keepalived/bin/mysql.sh,內容以下:

截圖19.png

4、測試

master slave 分別執行 ipaddr show dev eno16777736 命令查看 masterslave VIP

(羣集虛擬 IP)的控制權。

Master1 主的查看結果:

截圖20.png

Slave查看結果  並在master中止mysql  查看IP地址是否飄逸

截圖21.png

總結:

Keepalived+mysql 雙主通常來講,中小型規模的時候,採用這種架構是最省事的。

master 節點發生故障後,利用 keepalived 的高可用機制實現快速切換到備用節點。

在這個方案裏,有幾個須要注意的地方:

1.採用 keepalived 做爲高可用方案時,兩個節點最好都設置成 BACKUP 模式,避免由於意外

狀況下(好比腦裂)相互搶佔致使往兩個節點寫入相同數據而引起衝突;

2.把兩個節點的 auto_increment_increment(自增步長)和 auto_increment_offset(自增起

始值)設成不一樣值。其目的是爲了不 master 節點意外宕機時,可能會有部分 binlog 未能

及時複製到 slave 上被應用,從而會致使 slave 新寫入數據的自增值和原先 master 上衝突了,

所以一開始就使其錯開;固然了,若是有合適的容錯機制能解決主從自增 ID 衝突的話,也能夠不這麼作;

3.slave 節點服務器配置不要太差,不然更容易致使複製延遲。做爲熱備節點的 slave 服務器,

硬件配置不能低於 master 節點;

4.若是對延遲問題很敏感的話,可考慮使用 MariaDB 分支版本,或者直接上線 MySQL 5.7

新版本,利用多線程複製的方式能夠很大程度下降複製延遲;

相關文章
相關標籤/搜索