LVS+KEEPALIVED(1/3)

LVS

准备三台虚拟机,一台当做LVS,另外两台当做real server

实验前先做一个软链接

ln -s /usr/src/kernels/(uname -r)/  /usr/src/linux

#如果没有/usr/src/kernels/uname -r 路径,很可能是因为缺少kernel-develop-(uname -r) 软件包, 可通过 yum install kernel-devel -y 安装

编译安装ipvsadm

wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

yum install libnl* popt * -y

tar zxf ipvsadm-1.26.tar.gz

cd ipvsadm-1.26

make

make install 

lsmod | grep ip_vs

/sbin/ipvsadm  或者  modprobe ip_vs    #动态加载ip_vs模块

cd ../

lsmod | grep ip_vs

 配置ipvsadm

ipvsadm -C

ipvsadm --set 30 5 60    #--set tcp tcpfin udp           set connection timeout values

ipvsadm -A -t 10.0.0.10:80 -s wrr

ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.8:80 -g -w 1

ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.9:80 -g -w 1

# 此处都是临时操作,重启电脑配置全无,需要编写脚本

LVS的调度算法

    固定(静态)调度方法:rr,wrr,dh,sh

    动态调度算法:wlc,lc,lblc,lblcr,SED,NQ

一般的网络服务,如HTTP、Mail、MySQL等,常用的LVS调度算法为:

ipvsadm命令参数

1.定义集群服务格式:
(1).添加集群服务:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
              [-p [timeout]] [-M netmask]
-A:                  表示添加一个新的集群服务
-E:                  编辑一个集群服务
-t:                  表示tcp协议
-u:                  表示udp协议
-f:                  表示firewall-Mark,防火墙标记
service-address:     集群服务的IP地址,即VIP
-s                    指定调度算法
-p                    持久连接时长,如#ipvsadm -Lcn ,查看持久连接状态
-M                    定义掩码
ipvsadm -D -t|u|f service-address      删除一个集群服务
ipvsadm -C                             清空所有的规则
ipvsadm -R                             重新载入规则
ipvsadm -S [-n]                        保存规则

2.向集群服务添加RealServer规则:
(1).添加RealServer规则
ipvsadm -a|e -t|u|f service-address -r server-address
              [-g|i|m] [-w weight]
-a                 添加一个新的realserver规则
-e                 编辑realserver规则
-t                 tcp协议
-u                 udp协议
-f                 firewall-Mark,防火墙标记
service-address    realserver的IP地址
-g                 表示定八义为LVS-DR模型
-i                 表示定义为LVS-TUN模型
-m                 表示定义为LVS-NAT模型
-w                 定义权重,后面跟具体的权值
. /etc/init.d/functions

VIP=10.0.0.10
PORT=80
RIP=(
10.0.0.8
10.0.0.9
10.0.0.82
)

start(){
        ifconfig eth0:0 $VIP/24 up
        route add -host $VIP dev eth0
ipvsadm -C
ipvsadm --set 30 5 60
ipvsadm -A -t $VIP:$PORT -s rr -p 20
for ((i=0;i<${#RIP[*]};i++))
do
ipvsadm -a -t $VIP:$PORT -r ${RIP[$i]} -g -w 1
done
}
stop(){
        ipvsadm -C
        ifconfig eth0:0 down
        route del -host $VIP dev eth0
}
case "$1" in
        start)
                start
                echo "ipvs is started"
                ;;
        stop)
                stop
                echo "ipvs is stopped"
               ;;
        restart)
                stop
                echo "ipvs is stopped"
                start
                echo "ipvs is started"
                ;;
        *)
                echo "Usage:$0 {start|stop|restart}"
        esac

每台real server端执行

yum install httpd -y
echo "10.0.0.8" < /var/www/html/index.html
#为了区分俩台real server的内容,另一台写入10.0.0.9
ifconfig
lo:0 10.0.0.10/32 up route add -host 10.0.0.10 dev lo

抑制ARP响应方法如下:

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

# 1 - 只回答目标IP地址是来访问接口本地地址的ARP查询请求
# 2 - 对查询目标使用最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择能与该地址通信的本地地址,首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址呗发现,将选择当前发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送,限制了使用本地的VIP地址作为有限的网络接口

 测试:

 客服端访问 VIP

页面会显示其中一个 real server上的内容,重复访问,页面会切换到另一个real server上的内容,实现负载均衡

原文地址:https://www.cnblogs.com/cnxy168/p/11502892.html