LVS ( Linux Virtual Server ) 集羣由3部分組成,最前端是負載均衡層( Load Balancer ),中間是服務器羣組層 ( Server Array ) ,底端是數據共享層 ( Share Storage )html
VS/NAT 即 Virtual Server via Nitwork Address Translation 網絡地址翻譯技術實現虛擬服務器前端
VS/TUN 即 Virtual Server via IP Tunneling 經過IP隧道技術實現虛擬服務器算法
VS/DR 即 Virtual SErver via Direct Routing 直接路由技術實現虛擬服務器vim
http://sbexr.rabexc.org/latest/sources/ac/22ff6f9bd1bf8c.html 靜態調度 1. rr Round Robin 輪詢調度 2. wrr weight 加權 以權重之間的比例實如今各主機之間進行調度 3. sh source hashing 源地址散列 主要實現會話綁定,可以將此前創建的session信息保留 4. dh Destination hashing 目標地址散列 把同一個IP地址的請求,發送給同一個server 5. mh maglev hashing scheduling 磁懸浮哈希調度 動態調度 1. lc Least-Connection 最少鏈接 2. wlc Weighted Least-Connection Scheduling 加權最少鏈接 3. sed Shortest Expected Delay 最短時間望延遲 4. nq never queue 永不排隊(改進的sed) 5. lblc Locality-Based Least Connection 基於局部性的最少鏈接 6. lblcr Locality-Based Least Connections withReplication 帶複製的基於局部性最少連接 7. fo weighted failover scheduling 加權故障轉移調度算法 8. ovf weighted overflow scheduling 加權溢出調度 ip_vs_fo found in Linux kernels: 3.18–3.19, 4.0–4.18, 4.19-rc+HEAD ip_vs_ovf found in Linux kernels: 4.3–4.18, 4.19-rc+HEAD ip_vs_mh found in Linux kernels: 4.18, 4.19-rc+HEAD
地址規劃bash
主負載調度器 Director Server Hostname DR1 eth1: 192.168.12.130 eth1:1 192.168.12.200 Virtual IP eth2: 10.10.10.11 備負載調度器 Director Server Hostname DR2 eth1: 192.168.12.131 eth1:1 192.168.12.200 Virtual IP eth2 10.10.10.12 Real server 1 Hostname rs1 eth1 192.168.12.132 eth2 10.10.10.13 Real server 2 Hostname rs2 eth1 192.168.12.133 eth2 10.10.10.14
yum -y install keepalived ipvsadm服務器
chkconfig --level 2345 keepalived on網絡
systemctl enable keepalivedsession
在DR1和DR2打開ip_forward負載均衡
cat <<EOF >> /etc/sysctl.conf
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.conf
oop
vim /etc/sysconfig/keepalived
修改 KEEPALIVED_OPTIONS="-D -d -S 0"
或用命令修改 sed -i 's/KEEPALIVED_OPTIONS=.*/KEEPALIVED_OPTIONS="-D -d -S 0"/' /etc/sysconfig/keepalived
修改配置文件 /etc/rsyslog.conf
cat >> /etc/rsyslog.conf << EOF
#keepalived -S 0
local0.* /var/log/keepalived.log
EOF
重啓日誌服務 service rsyslog restart 檢查 /var/log/keepalived.log 文件是否存在
touch /etc/sysconfig/modules/ipvs.modules chmod 755 /etc/sysconfig/modules/ipvs.modules cat << EOF > /etc/sysconfig/modules/ipvs.modules #!/bin/bash ipvs_modules_dir="/usr/lib/modules/\`uname -r\`/kernel/net/netfilter/ipvs" for i in \`ls \$ipvs_modules_dir | sed -r 's#(.*).ko.*#\1#'\`; do /sbin/modinfo -F filename \$i &> /dev/null if [ \$? -eq 0 ]; then /sbin/modprobe \$i fi done EOF sh /etc/sysconfig/modules/ipvs.modules 查看內核支持的ipvs模塊 grep -i ip_vs /boot/config-`uname -r` 查看內核已加載的ipvs模塊 lsmod | grep ip_vs
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc # 設置報警郵件,每行一個 failover@firewall.loc # 須要開啓本機sendmail服務 sysadmin@firewall.loc } notification_email_from Keepalived@localhost # 設置郵件發送地址 smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL # 表示Keepalived 服務器的一個標識.發郵件時顯示在郵件主題中的信息 } # vrrp 實例定義部分 vrrp_instance VI_1 { state MASTER # 指定Keepalived 角色,BACKUP表示備用 interface eth1 # 指定 HA監測網絡的接口 virtual_router_id 51 # 虛擬路由標識,同一個 vrrp_instancd下, MASTER AND BACKUP 必須是一致的 priority 100 # 定義優先級,數字越大,優先級越高 在同一個 vrrp_instancd下. MASTER 優先級必須大於 BACKUP advert_int 1 # 主備同步檢查時間間隔,時間爲秒 authentication { # 設置驗證類型和密碼 auth_type PASS # 設置驗證類型 主要有 PAS S和 AH 兩種 auth_pass 1111 # 設置驗證密碼 在同一個 vrrp_instancd下 } virtual_ipaddress { 192.168.12.200 # 虛擬IP,能夠設置多個,每行一個 } } # 虛擬服務器定義部分 virtual_server 192.168.12.200 80 { delay_loop 6 # 設置運行狀況檢查時間,單位爲秒 lb_algo rr # 設置負載調度算法 rr 即輪詢算法 lb_kind DR # 設置 LVS 負載均衡機制 NAT TUR DR nat_mask 255.255.255.0 persistence_timeout 50 # 會話保持時間 註釋掉此行纔會輪詢. 這個選項對動態網頁很是有用,爲集羣session 共享提供了很好的解決方案, 有了這個會話保持功能,用戶的 # 請求會被一直髮到某個服務節點, 直到超過這個會話保持時間. 須要注意的是這個會話保持時間是最大無響應超時時間,也就是說,用戶在操做動態 # 頁面時, 若是在50秒內沒有執行任何操做, 那麼接下來的操做會被分發到另外的節點, 可是若是用戶一直在動態頁面, 則不受50秒時間限制 protocol TCP # 指定轉發協議 TCP UDP兩種 real_server 192.168.12.132 80 { weight 3 # 權重 數字越大, 權重越高 TCP_CHECK { connect_timeout 3 nb_get_retry 3 # 重試次數 delay_before_retry 3 # 重試間隔 } } real_server 192.168.12.133 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
配置完成後將此文件複製到備用 Director Server , 進行如下修改便可
將 state MASTER 改成 state BACKUP
priority 100 更改成一個較小的值,這裏改成80
在 LVS 的 DR 和 TUN 模式下,用戶的訪問請求到達 Real Server 後, 是直接返回給用戶的, 再也不通過前端的 Director Server ,所以 ,須要在每一個Real server 節點上增長虛擬的 VIP 地址,
這樣數據才能直接返回給用戶.增長 VIP 地址的操做能夠經過建立腳本的方式來實現.
建立文件 /etc/init.d/lvsrs
touch /usr/bin/lvsrs
chmod 755 /usr/bin/lvsrs
vi /usr/bin/lvsrs
腳本內容以下
#!/bin/bash # description : Start Real Server VIP=192.168.12.200 . /etc/rc.d/init.d/functions case "$1" in start) echo " Start LVS of Real Server " /usr/sbin/ip addr add ${VIP}/28 dev lo 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 ;; stop) /usr/sbin/ip addr del ${VIP}/28 dev lo echo " close LVS Director server " echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce ;; *) echo "Usage: $0 {start|stop}" exit 1 esac
在主 備Director Server 上分別啓動 Keepalived 服務
/etc/init.d/keepalived start
在兩個 Real server 上執行以下腳本
/etc/init.d/lvsrs start