LVS DR模式安装配置
目录前言
1 、 LVS 环境组网
2 、 ipvsadm 安装前准备
3 、 httpd 与 ipvsadm 下载
4 、 LVS 负载均衡配置
5 、真实 WEB 服务器配置及 arp 抑制
6 、 LVS 负载均衡测试
7 、附: arp 抑制参数
前言
本文主要讲解 centos5.x LVS DR 模式,环境搭建,理论知识请参考 LVS 中文官网
http://www.linuxvirtualserver.org/zh/index.html
1 、 LVS 环境组网
由于是使用的 VM 环境,自己 PC 当作客户机(即公网地址),调度器与服务器都是 VM 中虚拟机,所以客户和所有服务器之间都是物理直接相连网络 , 逻辑拓扑图如下:
2 、 ipvsadm 安装前准备(也可以使用 yum -y install ipvsadm 安装)
外部IP地址 内部IP地址 角色
10.0.0.30/24 192.168.1.1/24 LVS 调度器(虚拟机)
10.0.0.237/24 192.168.1.2/24 RS1 (虚拟机)
10.0.0.238/24 192.168.1.3/24 RS2 (虚拟机)
10.0.0.130/24 无 客户机(自己电脑)
注:实际应用中 RS1 RS2 没有外部地址,当前环境中,没有物理双网卡环境,都采用一个网卡配置多个 IP 地址。
3 、 httpd 与 ipvsadm 下载
1 )在各服务器上修改主机名:
# hostname LVS1
# hostname RS1
# hostname RS2
2 )在 RS1 RS2 上安装 httpd 服务
# yum install httpd -y
# /etc/init.d/httpd start
ps -ef|grephttpd
# yum install httpd –y
# /etc/init.d/httpdstart
ps -ef|grephttpd /var/www/html/index.html
Httpd 服务测试:
测试成功!
3 )下载 ipvsadm
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
我所使用的源包下载目录 /usr/local/src
我的 LVS 环境:
# cat/etc/redhat-release
CentOS release 5.8 (Final)
# uname -rm
2.6.18 -308.el5 x86_64
ipvsadm-1.26 对内核有要求,要求内核版本在 2.6.28 及以后的版本,如果符合了系统环境,还要安装依赖包 yum install -y wget make kernel-devel gcc gcc-c++ libnl* libpopt* popt-static。
我的内核版本不满足,使用 ipvsadm-1.24 。
# tar -zxfipvsadm-1.24.tar.gz
# ln -s /usr/src/kernels/2.6.18-348.12.1.el5-x86_64 /usr/src/linux /usr/src/kernels/2.6.18-348.12.1.el5-x86_64 RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP10.0.0.30:80 wrr persistent 20
-> 192.168.1.2:80 Route 1 0 0
-> 192.168.1.3:80 Route 1 0 0
由于有会话保持功能,接下来修改权重值
# ipvsadm -d -t10.0.0.30:80 -r 192.168.1.3:80 192.168.1.3:80 Route 2 0 0
-> 192.168.1.2:80 Route 1 0 0
再次进行测试:
7 、附: arp 抑制参数
arp 响应限制
1 ) arp_ignore:
定义对目标地址为本地 IP 的 ARP 询问不同的应答模式 0
0 - ( 默认值 ): 回应任何网络接口上对任何本地 IP 地址的 arp 查询请求
1 - 只回答目标 IP 地址是来访网络接口本地地址的 ARP 查询请求
2 - 只回答目标 IP 地址是来访网络接口本地地址的 ARP 查询请求 , 且来访 IP 必须在该网络接口的子网段内
3 - 不回应该网络界面的 arp 请求,而只对设置的唯一和连接地址做出回应
4-7 - 保留未使用
8 - 不回应所有(本地地址)的 arp 查询
2 ) arp_announce:
对网络接口上,本地 IP 地址的发出的, ARP 回应,作出相应级别的限制 : 确定不同程度的限制 , 宣布对来自本地源 IP 地址发出 Arp 请求的接口
0 - ( 默认 ) 在任意网络接口( eth0,eth1 , lo )上的任何本地地址
1 - 尽量避免不在该网络接口子网段的本地地址做出 arp 回应 . 当发起 ARP 请求的源 IP 地址是被设置应该经由路由达到此网络接口的时候很有用 . 此时会检查来访 IP是否为所有接口上的子网段内 ip 之一 . 如果改来访 IP 不属于各个网络接口上的子网段内 , 那么将采用级别 2 的方式来进行处理 .
2 - 对查询目标使用最适当的本地地址 . 在此模式下将忽略这个 IP 数据包的源地址并尝试选择与能与该地址通信的本地地址 . 首要是选择所有的网络接口的子网中外出访问子网中包含该目标 IP 地址的本地地址 . 如果没有合适的地址被发现 , 将选择当前的发送网络接口或其他的有可能接受到该 ARP 回应的网络接口来进行发送 .
LVS脚本:
vi lvs #!/bin/sh
#
# Startup script for the Keepalived daemon
#
# processname: keepalived
# pidfile: /var/run/keepalived.pid
# config: /etc/keepalived/keepalived.conf
# chkconfig: - 21 79
# description: Start and stop Keepalived
# Source function library
. /etc/rc.d/init.d/functions
# Source configuration file (we set KEEPALIVED_OPTIONS there)
. /etc/sysconfig/keepalived
RETVAL=0
prog="keepalived"
start() {
echo -n $"Starting $prog: "
daemon keepalived ${KEEPALIVED_OPTIONS}
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}
stop() {
echo -n $"Stopping $prog: "
killproc keepalived
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
}
reload() {
echo -n $"Reloading $prog: "
killproc keepalived -1
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
fi
;;
status)
status keepalived
;;
*)
echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"
exit 1
esac
exit $RETVAL
#########
centos 7
/usr/lib/systemd/system/keepalived.service
#####
Description=LVS and VRRP High Availability Monitor
After=syslog.target network.target
Type=forking
KillMode=process
EnvironmentFile=-/etc/sysconfig/keepalived
ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
WantedBy=multi-user.target
#####
##########################################
realServer脚本:
vi realserver
#!/bin/bash
#
# Add for chkconfig
# chkconfig: 2345 70 30
# description: RealServer's script
# processname: realserver.sh
VIP=192.168.1.1
# Source function library.
. /etc/init.d/functions
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
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
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $VIP >/dev/null 2>&1
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 "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
页:
[1]