一、簡(jiǎn)介
1. Keepalived
- Keepalived 是一個(gè)基于 VRRP (虛擬路由冗余協(xié)議)可用來(lái)實(shí)現(xiàn)服務(wù)高可用性的軟件方案,避免出現(xiàn)單點(diǎn)故障。Keepalived一般用來(lái)實(shí)現(xiàn)輕量級(jí)高可用性,且不需要共享存儲(chǔ),一般用于兩個(gè)節(jié)點(diǎn)之間,常見有LVS+Keepalived、Nginx+Keepalived組合。
2. LVS
-
LVS (Linux Virtual Server)是一個(gè)高可用性虛擬的服務(wù)器集群系統(tǒng)。本項(xiàng)目在1998年5月由章文嵩博士成立,是中國(guó)國(guó)內(nèi)最早出現(xiàn)的自由軟件項(xiàng)目之一。
LVS主要用于多服務(wù)器的負(fù)載均衡,作用于網(wǎng)絡(luò)層。LVS構(gòu)建的服務(wù)器集群系統(tǒng)中,前端的負(fù)載均衡層被稱為Director Server;后端提供服務(wù)的服務(wù)器組層被稱為Real Server。通過(guò)下圖可以大致了解LVS的基礎(chǔ)架構(gòu)。 - 本文中將利用LVS實(shí)現(xiàn)MySQL的讀寫負(fù)載均衡,Keepalived避免節(jié)點(diǎn)出現(xiàn)單點(diǎn)故障。
3. MySQL雙主復(fù)制
二、安裝配置
- 192.168.245.66:Keepalived + LVS Master
192.168.245.88:Keepalived + LVS Slave
192.168.245.22:MySQL Replication Master
192.168.245.33:MySQL Replication Master
192.168.245.100:VIP(虛擬IP)
192.168.245.11:Web服務(wù)器(測(cè)試用)
三、服務(wù)器192.168.245.66配置Keepalived + LVS Master
1. 安裝LVS
yum -y install ipvsadm
2. 下載安裝Keepalived
yum install -y gcc
yum install -y kernel-devel openssl openssl-devel
wget -q http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
tar -zxvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure && make && make install
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
chkconfig --add keepalived
chkconfig --level 345 keepalived on
3. Keepalived配置文件修改
vim /etc/keepalived/keepalived.conf
- 修改內(nèi)容如下
! Configuration File for keepalived
global_defs {
router_id LVS1
}
vrrp_instance VI_1 {
state MASTER #指定instance初始狀態(tài),實(shí)際根據(jù)優(yōu)先級(jí)決定.backup節(jié)點(diǎn)不一樣
interface ens33 #虛擬IP所在網(wǎng)卡通過(guò) ifconfig可以查看
virtual_router_id 51 #VRID,相同VRID為一個(gè)組,決定多播MAC地址
priority 100 #優(yōu)先級(jí),另一臺(tái)改為90.backup節(jié)點(diǎn)不一樣
advert_int 1 #檢查間隔
authentication {
auth_type PASS #認(rèn)證方式,可以是pass或ha
auth_pass 1111 #認(rèn)證密碼
}
virtual_ipaddress {
192.168.245.100 #VIP
}
}
virtual_server 192.168.245.100 3306 {
delay_loop 6 #服務(wù)輪詢的時(shí)間間隔
lb_algo wrr #加權(quán)輪詢調(diào)度,LVS調(diào)度算法 rr|wrr|lc|wlc|lblc|sh|sh
lb_kind DR #LVS集群模式 NAT|DR|TUN,其中DR模式要求負(fù)載均衡器網(wǎng)卡必須有一塊與物理網(wǎng)卡在同一個(gè)網(wǎng)段
#nat_mask 255.255.255.0
persistence_timeout 50 #會(huì)話保持時(shí)間
protocol TCP #健康檢查協(xié)議
## Real Server設(shè)置,3306就是MySQL連接端口
real_server 192.168.245.22 3306 {
weight 3 ##權(quán)重
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 192.168.245.33 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
4. 啟動(dòng)Keepalived
systemctl start keeplived
5. 查看虛擬網(wǎng)卡添加是否成功
ip a
- 如圖會(huì)出現(xiàn)虛擬網(wǎng)卡

四、服務(wù)器192.168.245.88配置Keepalived + LVS Slave
1. 安裝LVS
yum -y install ipvsadm
2. 下載安裝Keepalived
yum install -y gcc
yum install -y kernel-devel openssl openssl-devel
wget -q http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
tar -zxvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure && make && make install
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
chkconfig --add keepalived
chkconfig --level 345 keepalived on
3. Keepalived配置文件修改
vim /etc/keepalived/keepalived.conf
- 修改內(nèi)容如下
! Configuration File for keepalived
global_defs {
router_id LVS1
}
vrrp_instance VI_1 {
state BACKUP #指定instance初始狀態(tài),實(shí)際根據(jù)優(yōu)先級(jí)決定.backup節(jié)點(diǎn)不一樣
interface ens33 #虛擬IP所在網(wǎng)卡通過(guò) ifconfig可以查看
virtual_router_id 51 #VRID,相同VRID為一個(gè)組,決定多播MAC地址
priority 90 #優(yōu)先級(jí),另一臺(tái)改為90.backup節(jié)點(diǎn)不一樣
advert_int 1 #檢查間隔
authentication {
auth_type PASS #認(rèn)證方式,可以是pass或ha
auth_pass 1111 #認(rèn)證密碼
}
virtual_ipaddress {
192.168.245.100 #VIP
}
}
virtual_server 192.168.245.100 3306 {
delay_loop 6 #服務(wù)輪詢的時(shí)間間隔
lb_algo wrr #加權(quán)輪詢調(diào)度,LVS調(diào)度算法 rr|wrr|lc|wlc|lblc|sh|sh
lb_kind DR #LVS集群模式 NAT|DR|TUN,其中DR模式要求負(fù)載均衡器網(wǎng)卡必須有一塊與物理網(wǎng)卡在同一個(gè)網(wǎng)段
#nat_mask 255.255.255.0
persistence_timeout 50 #會(huì)話保持時(shí)間
protocol TCP #健康檢查協(xié)議
## Real Server設(shè)置,3306就是MySQL連接端口
real_server 192.168.245.22 3306 {
weight 3 ##權(quán)重
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
real_server 192.168.245.33 3306 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
4. 啟動(dòng)Keepalived
systemctl start keeplived
5. 查看虛擬網(wǎng)卡添加是否成功
ip a
- 由于Master上已經(jīng)有虛擬網(wǎng)卡了,Slave上是不顯示的,只有當(dāng)Master出現(xiàn)故障時(shí)Slave才會(huì)有

五、在數(shù)據(jù)服務(wù)器編寫RealServer的網(wǎng)絡(luò)配置腳本
-
兩個(gè)數(shù)據(jù)服務(wù)器192.168.245.22和192.168.245.33進(jìn)行同樣操作。
1.添加RealServer腳本
vim /etc/init.d/realserver
#!/bin/sh
VIP=192.168.245.100
. /etc/rc.d/init.d/functions
case "$1" in
# 禁用本地的ARP請(qǐng)求、綁定本地回環(huán)地址
start)
/sbin/ifconfig lo down
/sbin/ifconfig lo up
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
/sbin/sysctl -p >/dev/null 2>&1
/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 up # 在回環(huán)地址上綁定VIP,設(shè)定掩碼,與Direct Server上自身的IP保持通信
/sbin/route add -host $VIP dev lo:0
echo "LVS-DR real server starts successfully.\n"
;;
stop)
/sbin/ifconfig lo:0 down
/sbin/route del $VIP >/dev/null 2>&1
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "LVS-DR real server stopped.\n"
;;
status)
isLoOn=`/sbin/ifconfig lo:0 | grep "$VIP"`
isRoOn=`/bin/netstat -rn | grep "$VIP"`
if [ "$isLoON" == "" -a "$isRoOn" == "" ]; then
echo "LVS-DR real server has run yet."
else
echo "LVS-DR real server is running."
fi
exit 3
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
2. 修改腳本權(quán)限并啟動(dòng)realserver
chmod +x /etc/init.d/realserver
echo "/etc/init.d/realserver" >> /etc/rc.d/rc.local
service realserver start
3. 查看虛擬網(wǎng)卡
ip a
- 出現(xiàn)虛擬網(wǎng)卡

六、查看LVS集群狀態(tài)
ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.245.100:3306 wrr persistent 50
-> 192.168.245.22:3306 Route 1 0 0
-> 192.168.245.33:3306 Route 1 0 0
七、測(cè)試
在WEB服務(wù)器(192.168.245.11)上,添加測(cè)試文件mysql.php
<?php
/**
* Created by PhpStorm.
* User: wen
* Date: 7/22/2020
* Time: 5:00 PM
*/
$servername = "192.168.245.100";
$username = "root";
$password = "123123";
$dbname = "test";
// 創(chuàng)建連接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢測(cè)連接
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}{
echo "連接成功";
}
$sql = "INSERT INTO activity (admin_id, user_id, name)
VALUES ('1', '122', 'keepalived1')";
if ($conn->query($sql) === TRUE) {
echo "新記錄插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
- 在瀏覽器訪問 http://192.168.245.11/mysql.php 即可進(jìn)行測(cè)試。