溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql雙主+keepalived

發(fā)布時間:2020-06-23 10:52:39 來源:網(wǎng)絡(luò) 閱讀:658 作者:craftsman666 欄目:MySQL數(shù)據(jù)庫

環(huán)境

OS: centos7
Mysql 版本: mysql 5.7
Keepalived: keepalived-1.2.20
Mysql-vip:192.168.41.100
Mysql-master1:192.168.41.10
Mysql-master2:192.168.41.11
實驗環(huán)境關(guān)閉防火墻規(guī)則firewall-cmd


一、配置兩臺mysql互為主從
mysql雙主+keepalived
該過程的第一部分就是 master 記錄二進制日志。在每個事務(wù)更新數(shù)據(jù)完成之前, master 在
二日志記錄這些改變。MySQL 將事務(wù)寫入二進制日志。在事件寫入二進制日志完成后, master
通知存儲引擎提交事務(wù)。
下一步就是 slave 將 master 的 binary log 拷貝到它自己的中繼日志。首先, slave 開始一個工
作線程——I/O 線程。I/O 線程在 master 上打開一個普通的連接,然后開始 binlog dump process。
Binlog dump process 從 master 的二進制日志中讀取事件,如果已經(jīng)同步了 master,它會睡
眠并等待 master 產(chǎn)生新的事件。 I/O 線程將這些事件寫入中繼日志。
SQL slave thread(SQL 從線程)處理該過程的最后一步。 SQL 線程從中繼日志讀取事件,并
重放其中的事件而更新 slave 的數(shù)據(jù),使其與 master 中的數(shù)據(jù)一致。 只要該線程與 I/O 線程
保持一致,中繼日志通常會位于 OS 的緩存中,所以中繼日志的開銷很小。主主同步就是兩臺機器互為主的關(guān)系,在任何一臺機器上寫入都會同步。

1、修改mysql配置文件
兩臺mysql均要開啟binlog日志功能,兩臺的server-id不能一樣:
master1配置如下:
[mysqld]
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服務(wù)
systemctl restart mysqld

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 服務(wù)
systemctl restart mysqld


注: master1 和 master2 只有 server-id 不同和 auto-increment-offset 不同。
mysql 中有自增長字段,在做數(shù)據(jù)庫的主主同步時需要設(shè)置自增長的兩個相關(guān)配置:
auto_increment_offset 和 auto_increment_increment。
auto-increment-increment 表示自增長字段每次遞增的量,其默認值是 1。 它的值應(yīng)設(shè)為整個
結(jié)構(gòu)中服務(wù)器的總數(shù),本案例用到兩臺服務(wù)器,所以值設(shè)為 2。
auto-increment-offset 是用來設(shè)定數(shù)據(jù)庫中自動增長的起點(即初始值),因為這兩能服務(wù)器都
設(shè)定了一次自動增長值 2,所以它們的起點必須得不同,這樣才能避免兩臺服務(wù)器數(shù)據(jù)同步
時出現(xiàn)主鍵沖突


2、將 master1 設(shè)為 master2 的主服務(wù)器
在 master1 主機上創(chuàng)建授權(quán)賬戶,允許在 master2(192.168.41.11)主機上連接
mysql雙主+keepalived

在 master2 上將 master1 設(shè)為自已的主服務(wù)器并開啟 slave 功能。
mysql雙主+keepalived
查看從的狀態(tài), mysql>show slave status\G;以下兩個值必須為 yes,代表從服務(wù)器能正常連接主
服務(wù)器
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
3、 將 master2 設(shè)為 master1 的主服務(wù)器
在 master2 主機上創(chuàng)建授權(quán)賬戶,允許在 master1(192.168.41.10)主機上連接
mysql雙主+keepalived
在 master1 上將 master2 設(shè)為自已的主服務(wù)器并開啟 slave 功能。
mysql雙主+keepalived
show slave status\G 查看從的狀態(tài),以下兩個值必須為 yes,代表從服務(wù)器能正常連接主服務(wù)器
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
4、測試主主同步
在 master1 上創(chuàng)建要同步的數(shù)據(jù)庫如 test_db,并在 test_db 中創(chuàng)建一張測試表如 tab1
mysql雙主+keepalived
查看 master2 主機是否同步了 master1 上的數(shù)據(jù)變化
mysql雙主+keepalived
在 master2 主機上向 tab1 表中插入數(shù)據(jù)
mysql雙主+keepalived
查看 master1 主機是否同步了 master2 上的數(shù)據(jù)變化
mysql雙主+keepalived
現(xiàn)在任何一臺 MySQL 上更新數(shù)據(jù)都會同步到另一臺 MySQL, MySQL 同步完成。
注: 若主 MYSQL 服務(wù)器已經(jīng)存在,只是后期才搭建從 MYSQL 服務(wù)器,在置配數(shù)據(jù)同步前應(yīng)
先將主 MYSQL 服務(wù)器的要同步的數(shù)據(jù)庫拷貝到從 MYSQL 服務(wù)器上(如先在主 MYSQL 上備
份數(shù)據(jù)庫,再用備份在從 MYSQL 服務(wù)器上恢復)


下面我們就完成 keepalived 的高可用性。
keepalived 是集群管理中保證集群高可用的一個軟件解決方案,其功能類似于 heartbeat,用
來防止單點故障
keepalived 是以 VRRP 協(xié)議為實現(xiàn)基礎(chǔ)的, VRRP 全稱 Virtual Router Redundancy Protocol,即
虛擬路由冗余協(xié)議。
虛擬路由冗余協(xié)議,可以認為是實現(xiàn)路由器高可用的協(xié)議,即將 N 臺提供相同功能的路由
器組成一個路由器組,這個組里面有一個 master 和多個 backup, master 上面有一個對外提
供服務(wù)的 vip, master 會發(fā)組播(組播地址為 224.0.0.18),當 backup 收不到 vrrp 包時就認
為 master 宕掉了,這時就需要根據(jù) VRRP 的優(yōu)先級來選舉一個 backup 當 master。這樣的話
就可以保證路由器的高可用了。
keepalived 主要有三個模塊,分別是 core 、 check 和 vrrp。 core 模塊為 keepalived 的核心,
負責主進程的啟動、維護以及全局配置文件的加載和解析。 check 負責健康檢查,包括常見
的各種檢查方式。 vrrp 模塊是來實現(xiàn) VRRP 協(xié)議的。

二、 keepalived 的安裝配置
1、在 master1 和 master2 上安裝軟件包 keepalived
安裝 keepalived 軟件包與服務(wù)控制
在編譯安裝 Keepalived 之前,必須先安裝內(nèi)核開發(fā)包 kernel-devel 以及 openssl-devel、
popt-devel 等支持庫。
mysql雙主+keepalived

編譯安裝 Keepalived
mysql雙主+keepalived
注意: 如不知道 keepalived 需要哪些依賴包,可到下載后的源碼解壓目錄下查看 INSTALL 文
件內(nèi)容, +
注意:centos6 執(zhí)行 make install 操作之后,會自動生成/etc/init.d/keepalived 腳本文件,但還需要手動添加
為系統(tǒng)服務(wù),這樣就可以使用 service、 chkconfig 工具來對 keepalived 服務(wù)程序進行管理了。
centos7:不要加----with-kernel-dircentos6加
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/3.10.0-327.el7.x86_64/ && make && make install
Master2 主機也完成 keepalived 安裝,與 master1 一樣,安裝過程略
2、 修改 Keepalived 的配置文件
keepalived 只有一個配置文件 keepalived.conf,里面主要包括以下幾個配置區(qū)域,分別是
global_defs、 vrrp_instance 和 virtual_server。
global_defs: 主要是配置故障發(fā)生時的通知對象以及機器標識。
vrrp_instance: 用來定義對外提供服務(wù)的 VIP 區(qū)域及其相關(guān)屬性。
virtual_server:虛擬服務(wù)器定義
master1 主機上的 keepalived.conf 文件的修改:
vi /etc/keepalived/keepalived.conf:

! Configuration File for keepalived //!表示注釋
global_defs {
router_id MYSQL-1 //表示運行 keepalived 服務(wù)器的一個標識
}
vrrp_instance VI_1 {
state BACKUP //指定 keepalived 的角色, 兩臺配置此處均是 BACKUP,設(shè)為 BACKUP 將
根據(jù)優(yōu)先級決定主或從
interface eth0 //指定 HA 監(jiān)測網(wǎng)絡(luò)的接口
virtual_router_id 51 //虛擬路由標識,這個標識是一個數(shù)字(取值在 0-255 之間,用來區(qū)
分多個 instance 的 VRRP 組播),同一個 vrrp 實例使用唯一的
標識,確保和 master2 相同,同網(wǎng)內(nèi)不同集群此項必須不同,否
則發(fā)生沖突。
priority 100 //用來選舉 master 的,要成為 master,該項取值范圍是 1-255(在此范圍
之外會被識別成默認值 100) ,此處 master2 上設(shè)置為 50
advert_int 1 //發(fā) VRRP 包的時間間隔,即多久進行一次 master 選舉(可以認為是健
康查檢時間間隔)
nopreempt //不搶占, 即允許一個 priority 比較低的節(jié)點作為 master,即使有 priority
更高的節(jié)點啟動
authentication { //認證區(qū)域,認證類型有 PASS 和 HA(IPSEC),推薦使用 PASS(密碼
只識別前 8 位)
auth_type PASS
auth_pass 1111
}virtual_ipaddress { //VIP 區(qū)域,指定 vip 地址
192.168.1.100
}
}
virtual_server 192.168.1.100 3306 { //設(shè)置虛擬服務(wù)器,需要指定虛擬 IP 地址和服務(wù)端
口, IP 與端口之間用空格隔開
delay_loop 2 //設(shè)置運行情況檢查時間,單位是秒
lb_algo rr //設(shè)置后端調(diào)度算法,這里設(shè)置為 rr,即輪詢算法
lb_kind DR //設(shè)置 LVS 實現(xiàn)負載均衡的機制,有 NAT、 TUN、 DR 三個模式可選
persistence_timeout 60 //會話保持時間,單位是秒。這個選項對動態(tài)網(wǎng)頁是非常有用
的,為集群系統(tǒng)中的 session 共享提供了一個很好的解決方
案。 有了這個會話保持功能,用戶的請求會被一直分發(fā)到某個服務(wù)
節(jié)點,直到超過這個會話的保持時間。
protocol TCP //指定轉(zhuǎn)發(fā)協(xié)議類型,有 TCP 和 UDP 兩種
real_server 192.168.1.101 3306 { //配置服務(wù)節(jié)點 1,需要指定 real server 的真實 IP 地
址和端口, IP 與端口之間用空格隔開
注: master 2 上此處改為 192.168.1.102(即 master2 本機 ip)
weight 3 //配置服務(wù)節(jié)點的權(quán)值,權(quán)值大小用數(shù)字表示,數(shù)字越大,權(quán)值越高,
設(shè)置權(quán)值大小為了區(qū)分不同性能的服務(wù)器
notify_down /etc/keepalived/bin/mysql.sh //檢測到 realserver 的 mysql 服務(wù) down
后執(zhí)行的腳本
TCP_CHECK {
connect_timeout 3 //連接超時時間
nb_get_retry 3 //重連次數(shù)
delay_before_retry 3 //重連間隔時間
connect_port 3306 //健康檢查端口
}
}
}

master1 主機上有關(guān) keepalived.conf 文件的具體配置如下:
mysql雙主+keepalived

啟動keepalived
systemctl start keepalived.service
ps -aux |grep keep

Master2 主機上的 keepalived.conf 文件的修改:
mysql雙主+keepalived
啟動keepalived服務(wù)
systemctl start keepalived.service
3、 #mkdir /etc/keepalived/bin
vi /etc/keepalived /bin/mysql.sh,內(nèi)容如下:
mysql雙主+keepalived
Master2 主機完成相同的操作
4、測試
在 master1 和 master2 分別執(zhí)行 ip addr show dev eth0 命令查看 master1 和 master2 對 VIP
(群集虛擬 IP)的控制權(quán)。
Master1 主的查看結(jié)果:
mysql雙主+keepalived
Master2 主的查看結(jié)果:
mysql雙主+keepalived
從上圖可以看出 master1 是主服務(wù)器, master2 為備用服務(wù)器。
停止 MySQL 服務(wù),看 keepaliv ed 健康檢查程序是否會觸發(fā)我們編寫的腳本
停止 master1 主機的 mysql 服務(wù)
mysql雙主+keepalived
Master2 主的查看結(jié)果:
mysql雙主+keepalived
這說明在主服務(wù)上停止 MySQL 服務(wù),觸發(fā)了我們編寫的腳本,進行自動故障切換。
MySQL 遠程登錄測試
我們找一臺安裝有 MySQL 客戶端,然后登錄 VIP,看是否能登錄,在登錄之前兩臺 MySQL
服務(wù)器都要授權(quán)允許從遠程登錄。例如:
grant all on . to root@'%' identified by '123456';
在客戶端上測試登錄(把干才關(guān)閉master1啟動):
mysql雙主+keepalived
上圖顯示說明在客戶端訪問 VIP 地址,由 master1 主機提供響應(yīng)的,因為 master1 當前是主
服務(wù)器, 將 master1 的 mysql 服務(wù)停止, 在客戶端執(zhí)行 show variables like ‘server_id’;
mysql雙主+keepalived
上圖顯示說明在客戶端的查詢請求是由 master2 主機響應(yīng)的。故障切換成功。
總結(jié):
Keepalived+mysql 雙主一般來說,中小型規(guī)模的時候,采用這種架構(gòu)是最省事的。
在 master 節(jié)點發(fā)生故障后,利用 keepalived 的高可用機制實現(xiàn)快速切換到備用節(jié)點。
在這個方案里,有幾個需要注意的地方:
1.采用 keepalived 作為高可用方案時,兩個節(jié)點最好都設(shè)置成 BACKUP 模式,避免因為意外
情況下(比如腦裂)相互搶占導致往兩個節(jié)點寫入相同數(shù)據(jù)而引發(fā)沖突;
2.把兩個節(jié)點的 auto_increment_increment(自增步長)和 auto_increment_offset(自增起
始值)設(shè)成不同值。其目的是為了避免 master 節(jié)點意外宕機時,可能會有部分 binlog 未能
及時復制到 slave 上被應(yīng)用,從而會導致 slave 新寫入數(shù)據(jù)的自增值和原先 master 上沖突了,
因此一開始就使其錯開;當然了,如果有合適的容錯機制能解決主從自增 ID 沖突的話,也
可以不這么做;
3.slave 節(jié)點服務(wù)器配置不要太差,否則更容易導致復制延遲。作為熱備節(jié)點的 slave 服務(wù)器,
硬件配置不能低于 master 節(jié)點;
4.如果對延遲問題很敏感的話,可考慮使用 MariaDB 分支版本,或者直接上線 MySQL 5.7 最
新版本,利用多線程復制的方式可以很大程度降低復制延遲;

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI