LVS配置文档

LVS+Heartbeat实现高可用负载平衡群集

 

 

 

LVS Master

 

IP172.16.0.5

IP:  192.168.1.1

 

VIP172.16.0.111

LVS Slave

 

IP172.16.0.6

IP:  192.168.1.2

 

WEB1

 

IP172.16.0.10

 

VIP172.16.0.111

WEB2

IP:172.16.0.20

VIP:172.16.0.111

工作原理:
当客户当访问网站的时候,会访问VIP所在的调度器LVS Master(当Master挂掉,访问Slave),LVS MasterSlave)会根据算法选择合适的WEB服务器,随后将请求包中的目的MAC改写为目的服务器的MAC,并将此包(单播,多播,广播)给服务器(服务器上面设定了和LVS一样的VIP,但是由于不进行ARP解析,所以不会产生IP地址冲突问题),服务器接收到请求后,经过处理将结果直接返回给客户机,而不再经过LVS调度器。

软件包需求:
yum   -y  install   ipvsadm
yum   -y  install   heartbeat*
yum   -y  install   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:添加服务,-ttcp协议, -s rr:设置轮转算法, -p:设置保持时间
$ipv -A -t $vip:80 -s rr -p 600
#DR模式添加负载均衡服务器
#-a添加服务器, -ttcp协议, -rroute -gDR模式, -iTUN -mNAT
$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)
#设置网卡ipvip和路由
/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)
#设置网卡ipvip和路由
/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.cfharesourcesauthkeysldirectord.cf等配置文件:
rpm   -q   heartbeat  -d                        #查找配置文件所在位置
[root@localhost ~]# cp -a /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/
[root@localhost ~]# cp -a /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/
[root@localhost ~]# cp -a /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/
[root@localhost ~]# find /  -name ldirectord.cf/etc/ha.d/ldirectord.cf
[root@localhost ~]# 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监听端口
#baud  19200                     #串口通讯波特率
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.cflidrectord文件名称

authkeys设置:
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!
#123表示认证算法,这里启用了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上面启动服务:
[root@lvs_1 ~]# export LANGUAGE=C       #如果不更改编码启动ldirectord会报错[root@lvs_1 ~]# export LC_ALL=C         #最好还是定义到/etc/profile文件中
[root@lvs_1 ~]# service heartbeat start
[root@lvs_1 ~]# /etc/ha.d/resource.d/ldirectord star

web服务器上面启动服务:
[root@lvs_1 ~]# Service httpd start

lvs_1上面查看LVS状态:
[root@lvs_1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.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是否能够正常切换:
[root@lvs_2 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.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重新启动后,能否夺回资源:
[root@lvs_1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.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






 


 

 


 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章