LVS配置文档
LVS+Heartbeat实现高可用负载平衡群集
LVS Master
IP:172.16.0.5
IP: 192.168.1.1
VIP:172.16.0.111
LVS Slave
IP:172.16.0.6
IP: 192.168.1.2
WEB1
IP:172.16.0.10
VIP:172.16.0.111
WEB2
IP:172.16.0.20
VIP:172.16.0.111
工作原理:
当客户当访问网站的时候,会访问VIP所在的调度器LVS Master(当Master挂掉,访问Slave),LVS Master(Slave)会根据算法选择合适的WEB服务器,随后将请求包中的目的MAC改写为目的服务器的MAC,并将此包(单播,多播,广播)给服务器(服务器上面设定了和LVS一样的VIP,但是由于不进行ARP解析,所以不会产生IP地址冲突问题),服务器接收到请求后,经过处理将结果直接返回给客户机,而不再经过LVS调度器。
软件包需求:
yum -yinstall ipvsadm
yum -yinstall heartbeat*
yum -yinstall heartbeat
在LVS Master 上面编写所需脚本:
Vim/opt/vip.sh
#!/bin/bash
#设置脚本所需变量
vip=172.16.0.111
lvs_1=172.16.0.5
web1=172.16.0.10
web2=172.16.0.20
ip=/sbin/ifconfig
ipv=/sbin/ipvsadm
ips=/sbin/ipvsadm-save
ro=/sbin/route
path=/etc/sysconfig/ipvsadm
mask=255.255.255.255
#利用case语句编写脚本
case $1 in
start)
#配置vip
$ip eth0:1 $vip broadcast $vip netmask $mask
#添加路由
$ro add -host $vip dev eth0:1
#以轮转算法开启服务,并设置连接保持时间为600s
#-A:添加服务,-t:tcp协议, -s rr:设置轮转算法, -p:设置保持时间
$ipv -A -t $vip:80 -s rr -p 600
#以DR模式添加负载均衡服务器
#-a添加服务器, -t:tcp协议, -r:route, -g:DR模式, -i:TUN, -m:NAT
$ipv -a -t $vip:80 -r $web1:80 -g
$ipv -a -t $vip:80 -r $web2:80 –g
#储存ipvsadm配置
$ips $path
echo "Start OK!!!"
;;
stop)
#清空ipvsadm设置
$ipv –C
#删除路由
$ro del -host $vip dev eth0:1
echo "Stop OK!!!"
;;
*)
echo "If you want to use this script,Please enter start or stop "
exit 1
esac
#为脚本添加可执行权限
chmod +x /opt/vip.sh
在web服务器上编写脚本:
Vim /opt/vip.sh
#!/bin/bash
#设置环境所需变量
vip=172.16.0.111
web1=172.16.0.10
case $1 in
start)
#设置网卡ip,vip和路由
/sbin/ifconfig eth0 $web1
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255
/sbin/route add -host $vip dev lo:0
#关闭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
echo "start OK"
;;
stop)
#开始arp响应
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
/sbin/route del -host $vip dev lo:0
echo "Stop OK"
;;
*)
echo "If you want to use this script,Please enter start or stop"
;;
esac
#为脚本添加可执行权限
chmod +x /opt/web1.sh
编写web2所需脚本
Vim /opt/vip.sh
#!/bin/bash
#设置环境所需变量
vip=172.16.0.111
web2=172.16.0.20
case $1 in
start)
#设置网卡ip,vip和路由
/sbin/ifconfig eth0 $web2
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255
/sbin/route add -host $vip dev lo:0
#关闭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
echo "start OK"
;;
stop)
#开始arp响应
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
/sbin/route del -host $vip dev lo:0
echo "Stop OK"
;;
*)
echo "If you want to use this script,Please enter start or stop"
;;
esac
#为脚本添加可执行权限
chmod +x /opt/web1.sh
复制ha.cf、haresources、authkeys、ldirectord.cf等配置文件:
rpm -q heartbeat-d #查找配置文件所在位置
# cp -a /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/
# cp -a /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/
# cp -a /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/
# find /-name ldirectord.cf/etc/ha.d/ldirectord.cf
# cp -a /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf
/etc/ha.d/
ha.cf 配置:
debugfile /var/log/ha-debug #debug日志路径 #
logfile /var/log/ha-log #heartbeat日志路径
logfacility local0
keepalive 2 #心跳检测时间间隔
#initdead 120 #指定heartbeat首次启动时的死亡时间
deadtime 20 #心跳死亡时间
warntime 10 #心跳延迟时间
udpport 694 #heartbeat监听端口
#baud19200 #串口通讯波特率
ucast eth1 192.168.1.2 #采用单播来通知心跳,Ip地址为对端Ip
auto_failback on #主节点重新启动后是否主动拿回资源
#watchdog /dev/watchdog #需要softdog支持,系统故障1分钟后自动重启
node lvs_1 #主调度器主机名与uname –n必须一致
node lvs_2 #辅调度器主机名与uname –n必须一致
ping 172.16.0.1 #检测服务器是否正常
haresources 配置:
lvs_1 IPaddr::172.16.0.111/32 ldirectord::ldirectord.cf
lvs_1:主调度器主机名
172.16.0.111: vip
lidrectord.cf:lidrectord文件名称
authkeys设置:
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!
#1、2、3表示认证算法,这里启用了md5算法
#修改完authkeys文件必须将文件权限修改为600
ldirectord.cf配置:
checktimeout=3 #服务器超时时间checkinterval=1 #检测服务器的间隔时间fallback=127.0.0.1:80 #当服务器全部挂掉后重定向的地址autoreload=yes #修改ldirectord.cf后自动加载quiescent=yes #virtual=172.16.0.111:80 #vip和端口
real=172.16.0.10:80 gate #web服务器地址和端口,gate代表DR
real=172.16.0.20:80 gate #web服务器地址和端口,gate代表DR
fallback=127.0.0.1:80 gate #如果服务器全部挂掉重定向到本机
service=http #服务类型为http
request="haha.html" #检测服务器时用到的文件名
receive="Test Page" #检测服务器时文件中的内容
virtualhost=some.domain.com.au
scheduler=rr #启用轮叫调度算法
persistent=600 #连接保持时间
#netmask=255.255.255.255
protocol=tcp #协议类型
checktype=negotiate #调度器检测服务器的类型
checkport=80 #指定监听端口
#需要在服务器的网页文件主目录中创建haha.html文件内容为Test Page 用于调度器检测服务器是否存在
修改主机名和/etc/hosts文件:
vim /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=lvs_1
vim /etc/hosts
172.16.0.5 lvs_1
172.16.0.6 lvs_2
#LVS Slave 与LVS Master 一样修改只是主机名需要改为lvs_2
在lvs上面启动服务:
# export LANGUAGE=C #如果不更改编码启动ldirectord会报错# export LC_ALL=C #最好还是定义到/etc/profile文件中
# service heartbeat start
# /etc/ha.d/resource.d/ldirectord star
在web服务器上面启动服务:
# Service httpd start
在lvs_1上面查看LVS状态:
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP172.16.0.111:80 rr persistent 600
-> 172.16.0.20:80 Route 1 0 0
-> 172.16.0.10:80 Route 1 0 0
#发现两个web服务器权重都为1,说明正常
停掉lvs_1查看lvs_2是否能够正常切换:
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP172.16.0.111:80 rr persistent 600
-> 172.16.0.20:80 Route 1 0 0
-> 172.16.0.10:80 Route 1 0 0
#发现lvs_2可以自动切换,说明lvs配置没有问题
最后检测lvs_1重新启动后,能否夺回资源:
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP172.16.0.111:80 rr persistent 600
-> 172.16.0.20:80 Route 1 0 0
-> 172.16.0.10:80 Route 1 0 0
页:
[1]