Keepalived+LVS+MySQL雙主復(fù)制實(shí)現(xiàn)讀寫負(fù)載均衡及高可用實(shí)戰(zhàn)教程

一、簡(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();
?>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容