wxyfj 发表于 2019-1-4 07:28:22

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]
查看完整版本: LVS配置文档