lvs筆記之nat&dr模型簡單實現
lvs
集群
實現
負載均衡
nat
ipvsadm使用說明
-A: 添加一個集群服務 -t: tcp -u: udp -f: firewall mark, 通常用于將兩個或以上的服務綁定為一個服務進行處理時使用 例如httpd和https iptables mongo表一起使用 service-address: -t IP:port -u ip:port -f firewall_mark -s 調度方法,默認為wlc -p timeout: persistent connection, 持久連接 -E 修改定義過的集群服務 -D -t|u|f service-address:刪除指定的集群服務 RS相關: -a:向指定的Cluster services中添加RS -t|-u|-f service-address:指明將RS添加至哪個Cluster Service中 -r: 指定RS,可包含{IP[:port]},只有支持端口映射的LVS類型才允許此處使用跟集群服務中不同的端口 LVS類型: -g: Gateway模式,就是DR模型(默認) -i: ipip模式,TUN模型 -m: masquerade地址偽裝自動完成后半段的原地址轉換,NAT 指定RS權重: -w # 省略權重為1 -e: 修改指定的RS屬性 -d -t|u|f service-address -r server-address:從指定的集群服務中刪除某RS -C :清空集群服務配置 保存規則: ipvsadm-save ipvsadm -S 載入指定的規則: ipvsadm-restore ipvsadm -R 查看ipvs規則: -L [options] -n: 數字格式顯示IP地址 -c: 顯示連接數相關信息 --stats: 顯示統計數據 --rate: 速率 --exact:顯示統計數據的精確值 --timeout: 超時時間 -Z: 計數器清零;
lvs-nat的簡單實現
實驗拓撲如下圖:
如圖所示lvs-nat實現對后端2臺real server(搭建apache httpd服務)進行負載均衡。
step1:
1、按照拓撲所示配置好IP地址 2、director需要準備兩塊網卡(一塊公網網卡配置vip,一塊內網網卡配置dip) 3、后端兩臺real server準備一塊網卡(內網網卡)配置rip,注意網關需要指向dip
step2各節點網絡設置如下:
以下是director上的配置: [root@localhost ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:37:63:02 brd ff:ff:ff:ff:ff:ff inet 192.168.2.146/24 brd 192.168.2.255 scope global dynamic eno16777736 valid_lft 4229sec preferred_lft 4229sec inet6 fe80::20c:29ff:fe37:6302/64 scope link valid_lft forever preferred_lft forever 3: eno33554984: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:37:63:0c brd ff:ff:ff:ff:ff:ff inet 192.168.253.153/24 brd 192.168.253.255 scope global eno33554984 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe37:630c/64 scope link valid_lft forever preferred_lft forever [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE="Ethernet" BOOTPROTO="static" IPADDR=192.168.2.146 NETMASK=255.255.255.0 DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" NAME="eno16777736" UUID="ee2e45b1-4b9c-41cb-8507-de93e3827896" DEVICE="eno16777736" ONBOOT="yes" [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno33554984 TYPE="Ethernet" BOOTPROTO="static" IPADDR=192.168.253.153 NETMASK=255.255.255.0 DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" NAME="eno33554984" DEVICE="eno33554984" ONBOOT="yes"
以下是rs1、和rs2的配置:
注意real server的網關要指向dip
step3在real server上進行如下操作:
以下是real server1上進行的操作: # yum install httpd -y &> /dev/null && echo success || echo failure #RS1安裝httpd success #安裝成功 #route add default gw 192.168.253.153 #設置默認網關為Director的DIP # echo "<h1>This is Real Server 1 </h1>" > /var/www/html/index.html #添加測試網頁 #systemctl start httpd #啟動httpd服務 以下是real server2上進行的操作: # yum install httpd -y &> /dev/null && echo success || echo failure #RS1安裝httpd success #安裝成功 #route add default gw 192.168.253.153 #設置默認網關為Director的DIP # echo "<h1>This is Real Server 2 </h1>" > /var/www/html/index.html #添加測試網頁 #systemctl start httpd #啟動httpd服務
step4在director上進行操作:
# yum install ipvsadm -y #安裝ipvsadm [root@localhost ~]# curl 192.168.253.169 #測試rs是否可以服務 <h1>This is Real Server 1 </h1> [root@localhost ~]# curl 192.168.253.168 #測試rs是否可以服務 <h1>This is Real Server 2 </h1> [root@localhost ~]# vim /etc/sysctl.conf #編輯內核文件開啟內核路由轉發 # System default settings live in /usr/lib/sysctl.d/00-system.conf. # To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file # # For more information, see sysctl.conf(5) and sysctl.d(5). net.ipv4.ip_forward = 1 #添加該項設置 [root@localhost ~]# sysctl -p #對剛才的修改進行立即生效 net.ipv4.ip_forward = 1 #可見已經生效 [root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward #查看是否開啟路由轉發功能 1 #開啟 [root@localhost ~]# ipvsadm -A -t 192.168.2.146:80 -s rr [root@localhost ~]# ipvsadm -a -t 192.168.2.146:80 -r 192.168.253.169 -m [root@localhost ~]# ipvsadm -a -t 192.168.2.146:80 -r 192.168.253.168 -m [root@localhost ~]# 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.2.146:80 rr -> 192.168.253.168:80 Masq 1 0 0 -> 192.168.253.169:80 Masq 1 0 0 [root@localhost ~]# curl http://192.168.2.146 <h1>This is Real Server 2 </h1> [root@localhost ~]# curl http://192.168.2.146 <h1>This is Real Server 1 </h1>
測試:
踩過的坑1
在實驗過程中遇到了瀏覽器訪問vip失敗,但是director上curlvip卻可以的情況后來排查發現real server開啟了兩塊網卡(一塊外網,一塊內網,瀏覽器可以通過外網ip訪問real server上的web服務),當我只啟用了內網網卡時,瀏覽器成功訪問vip。
因此當你實驗失敗時請從以下兩點排查:
1、real server是否啟用了多塊網卡,如果是請禁用多余的 只啟用內網網卡。并且把網關指向dip
2 關閉iptables和selinux(或者設置合適的規則)
lvs-dr實現
實驗拓撲如下:
后端兩臺real server搭建httpd服務(默認已搭建完成并啟動),各節點iptables和selinux均已關閉
step1在director上執行如下操作:
#ifconfig eno16777736:0 192.168.2.11/32 broadcast 192.168.2.11 up #route add -host 192.168.2.11 dev eno16777736:0
step2在real server1上執行如下操作:
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #echo 1 > /proc/sys/net/ipv4/conf/eno16777736/arp_ignore # echo 2 > /proc/sys/net/ipv4/conf/eno16777736/arp_announce #添加如上內核參數,注意要在director節點添加ipvs規則前做此步操作 #ifconfig lo:0 192.168.2.11/32 broadcast 192.168.2.11 up #route add -host 192.168.2.11 dev lo:0 #echo "<h1>This is Real Server 1 </h1>" > /var/www/html/index.html
step3在real server2上執行如下操作:
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #echo 1 > /proc/sys/net/ipv4/conf/eno16777736/arp_ignore # echo 2 > /proc/sys/net/ipv4/conf/eno16777736/arp_announce #添加如上內核參數,注意要在director節點添加ipvs規則前做此步操作 #ifconfig lo:0 192.168.2.11/32 broadcast 192.168.2.11 up #route add -host 192.168.2.11 dev lo:0 #echo "<h1>This is Real Server 2 </h1>" > /var/www/html/index.html
step4在director節點執行如下操作:
#ipvsadm -A -t 192.168.2.11:80 -s rr #ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.117 -g #ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.135 -g
測試:
![]()
以上lvs-dr模型簡單實現到此為止
總結
lvs特點是模型工作原理比較復雜,但是其服務配置卻非常簡單,lvs集群的配置難點主要集中在對模型的理解上,對網絡的配置及排錯上。
這僅僅只是lvs的簡單實現后期會與其他集群服務配合進行更復雜的拓撲。
原創文章,作者:Net17_desperado,如若轉載,請注明出處:http://www.www58058.com/65441