Ubuntu 上ipvsadm负载均衡(DR模式,以80端口为例)

说明:3台服务器,ip分别为:10.0.1.2  10.0.1.3  10.0.1.4  虚拟ip:10.0.1.10


ipvsadm服务器(10.0.1.2)

$ sudo apt-get install ipvsadm

$ sudo ifconfig eth0:0 10.0.1.10 netmask 255.255.255.255 broadcast 10.0.1.10

$ sudo ip a (查看设置是否生效)

$ sudo route add -host 10.0.1.10 dev eth0:0

$ sudo route -n  (查看设置是否生效)

$ sudo ipvsadm -A -t 10.0.1.10:80 -s rr   (注rr为轮询模式)

$ sudo ipvsadm -a -t 10.0.1.10:80 -r 10.0.1.3:80 -g

$ sudo ipvsadm -a -t 10.0.1.10:80 -r 10.0.1.4:80 -g

$ sudo ipvsadm --save  (保存ipvsadm设置)

$ sudo ipvsadm -l (查看ipvsadm设置)

$ sudo ipvsadm -C  (清除ipvsadm设置)

$ sudo ipvsadm -a  (增加real服务器,如:$ sudo ipvsadm -a -t 10.0.1.10:80 -r 10.0.1.3:80 -g)

$ sudo ipvsadm -d   (删除real服务器,如:$ sudo ipvsadm -d -t 10.0.1.10:80 -r 10.0.1.3:80)

设置开机自启动:

$ sudo vi /etc/rc.local  (在exit 0上面)

按a或i进入编辑模式

ipvsadm -A -t 10.0.1.10:80 -s rr   (注rr为轮询模式)

ipvsadm -a -t 10.0.1.10:80 -r 10.0.1.3:80 -g

ipvsadm -a -t 10.0.1.10:80 -r 10.0.1.4:80 -g

ipvsadm --save

按Esc键退出编辑模式

:wq (保存并退出)



ipvsadm客户端(10.0.1.3)


$ sudo ifconfig lo:0 10.0.1.10 netmask 255.255.255.255 broadcast 10.0.1.10

$ sudo ip a (查看设置是否生效)

$ sudo route add -host 10.0.1.10 dev lo:0

$ sudo route -n  (查看设置是否生效)

$ sudo echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore

$ sudo echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

$ sudo echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

$ sudo echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce


# vi /etc/sysctl.conf 

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

:wq


# sysctl -p


设置开机自启动:

$ sudo vi /etc/rc.local  (在exit 0上面)

按a或i进入编辑模式

ifconfig lo:0 10.0.1.10 netmask 255.255.255.255 broadcast 10.0.1.10

按Esc键退出编辑模式

:wq (保存并退出)


ipvsadm客户端(10.0.1.4)


# ifconfig lo:0 10.0.1.10 netmask 255.255.255.255 broadcast 10.0.1.10

# ip a (查看设置是否生效)

# route add -host 10.0.1.10 dev lo:0

# route -n  (查看设置是否生效)

# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore

# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce


# vi /etc/sysctl.conf 

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

:wq


# sysctl -p



设置开机自启动:

# vi /etc/rc.local  (在exit 0上面)

按a或i进入编辑模式

ifconfig lo:0 10.0.1.10 netmask 255.255.255.255 broadcast 10.0.1.10

按Esc键退出编辑模式

:wq (保存并退出)


验证:


在2主机上分别建2个页面1.html  内容写各自主机ip

 

http://10.0.1.10/1.html

第一次会显示10.0.1.3

第二次会显示10.0.1.4



ipvsadm调度算法:


一、轮叫调度(Round-Robin Scheduling) rr
轮叫调度(Round Robin Scheduling)算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。

二、加权轮叫调度(Weighted Round-Robin Scheduling) wrr
加权轮叫调度(Weighted Round-Robin Scheduling)算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为1。假设服务器A的权值为1,B的 权值为2,则表示服务器B的处理性能是A的两倍。加权轮叫调度算法是按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服 务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。

三、最小连接调度(Least-Connection Scheduling) lc
最小连接调度(Least-Connection Scheduling)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务 器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中止或超时,其连接数减一。

四、加权最小连接调度(Weighted Least-Connection Scheduling)wlc
加权最小连接调度(Weighted Least-Connection Scheduling)算法是最小连接调度的超集,这个是ipvsadm的默认算法。各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。