Linux集羣(三)-ipvsadm工具

ipvsadm是什麼

LVS由兩部分由ipvs與ipvsadm組成,ipvs是LVS的核心實現需要藉助管理工具ipvsadm定義LVS集羣規則,ipvs根據定義好的規則進行工作。

ipvsadm的相關文件

服務名:         ipvsadm.service
主程序:        /usr/sbin/ipvsadm
規則保存工具:  /usr/sbin/ipvsadm-save
規則重載工具:  /usr/sbin/ipvsadm-restore
配置文件:      /etc/sysconfig/ipvsadm-config

ipvsadm語法

管理集羣服務

ipvsadm -A|E -t|u|f service-address:port [-s scheduler] [-p [timeout]]
-A  創建一個LVS集羣
-E  修改一個LVS集羣
-C  清空LVS規則
-R  重載LVS規則,重載規則時需要利用重定向<
-S  保存
-Z  清空計數器
-L  查看LVS規則
    -n:        以數字形式輸出地址和端口號
    --exact:   擴展信息,精確值
    -c:        當前IPVS連接輸出
    --stats:   統計信息
    --rate :   輸出速率信息

ipvsadm -D -t|u|f service-address
-D  刪除

service-address:
    -t|u|f:創建LVS集羣服務爲tcp/udp/firewall mark服務
    -t: TCP協議的端口,VIP:TCP端口
    -u: UDP協議的端口,VIP:UDP端口
    -f:firewall MARK,標記,一個數字

[-s scheduler]:指定集羣的調度算法,默認爲wlc(加權最少鏈路)

管理集羣服務上的RealServer

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

server-address:
格式:rip[:port] 如省略port,不作端口映射

-a  添加一個RealServer到集羣中。
-d  刪除一個RealServer服務器
-r  指定將要添加的Realserver的IP地址。
-m  表示LVS集羣的工作模式爲LVS-NAT模式
-g  表示LVS集羣的工作模式爲LVS-DR模式,默認
-i  表示LVS集羣的工作模式爲LVS-TUN模式
-w  權重

實例

拓撲圖
image

LVS-NAT集羣

1.開啓調度器VS主機的包轉發功能

# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p

2.創建一個LVS-NAT集羣

在LVS主機上:
# ipvsadm -A -t 172.18.44.220:80 -s rr

3.添加RealServer

# ipvsadm -a -t 172.18.44.220:80 -m -r 192.168.7.201:80
# ipvsadm -a -t 172.18.44.220:80 -m -r 192.168.7.203:8080

4.檢驗

# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.18.44.220:80 rr
  -> 192.168.7.201:80             Masq    1      0          0         
  -> 192.168.7.203:8080           Masq    1      0          0 

5.保存ipvs

# ipvsadm-save -n > /etc/sysconfig/ipvsadm

6.測試

在外網的客戶機
# for ((i=1;i<=10;i++));do curl 172.18.44.220;done
nginx on RS1
nginx on RS2
nginx on RS1
nginx on RS2
nginx on RS1
nginx on RS2
nginx on RS1
nginx on RS2
nginx on RS1
nginx on RS2

7.調整下調度算法和RealServer權重

# ipvsadm -E -t 172.18.44.220:80 -s wrr
# ipvsadm -e -t 172.18.44.220:80 -m -r 192.168.7.201:80 -w 2
# ipvsadm -e -t 172.18.44.220:80 -m -r 192.168.7.203:8080 -w 1
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.18.44.220:80 wrr
  -> 192.168.7.201:80             Masq    2      0          0         
  -> 192.168.7.203:8080           Masq    1      0          0

8.測試

# for ((i=1;i<=10;i++));do curl 172.18.44.220;done
nginx on RS1
nginx on RS1
nginx on RS2
nginx on RS1
nginx on RS1
nginx on RS2
nginx on RS1
nginx on RS1
nginx on RS2
nginx on RS1

注意:LVS規則修改後會立即生效。

LVS-DR集羣

拓撲圖
image
LVS配置

#!/bin/bash
vip='192.168.7.250'
iface='eth0:1'
mask='255.255.255.255'
port='80'
rs1='192.168.7.201'
rs2='192.168.7.203'
scheduler='rr'
type='-g'

case $1 in
start)
    ifconfig $iface $vip netmask $mask
    iptables -F

    ipvsadm -A -t ${vip}:${port} -s $scheduler
    ipvsadm -a -t ${vip}:${port} -r ${rs1} $type
    ipvsadm -a -t ${vip}:${port} -r ${rs2} $type
    echo "The VS Server is Ready!"
    ;;
stop)
    ipvsadm -C
    ifconfig $iface down
    echo "The VS Server is Canceled!"
    ;;
*)
    echo "Usage: $(basename $0) start|stop"
    exit 1
    ;;
esac

RS配置(2臺)

#!/bin/bash
vip=192.168.7.250
mask='255.255.255.255'
dev=lo:1

case $1 in
start)
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    ifconfig $dev $vip netmask $mask
    #route add -host $vip dev $dev
    echo "The RS Server is Ready!"
    ;;
stop)
    ifconfig $dev down
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "The RS Server is Canceled!"
    ;;
*)
    echo "Usage: $(basename $0) start|stop"
    exit 1
    ;;
esac

客戶機

# for ((i=1;i<=10;i++));do curl 192.168.7.250;done
RS2
RS1
RS2
RS1
RS2
RS1
RS2
RS1
RS2
RS1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章