设为首页 收藏本站
查看: 1557|回复: 0

[经验分享] 较全的LVS和HA文档

[复制链接]

尚未签到

发表于 2017-4-18 11:05:02 | 显示全部楼层 |阅读模式
拓扑结构图

vip :
192.168.1.198
虚拟ip
master:192.168.1.196
主分发服务器
slave:
192.168.1.197
备份分发服务器
real1:
192.168.1.191
响应服务器1
real2:
192.168.1.192
响应服务器2
  实现以下目的
一)配置基于DR模式简单Lvs
集群配置基于隧道模式Lvs
二)集群配置基于高可用Lvs+heartbeat
三)双机lvs-ha
  一、配置基于DR模式Lvs集群
  1、下载ipvsadm管理程序
ipvsadm-*.tar.gz

  tar zxvf ipvsadm-*.tar.gz
cd ipvsadm-*
make && make install

注意在make时可能会出现很多错误的信息,请按照如下操作就可以心编译正常
ln -s /usr/src/kernels/2.6.9-22.EL-i686//usr/src/linux

  cd ipvsadm-*
  make && make install
我机器是centos4
所以我yum安装
yum -y install ipvsadm
# ipvs
管理器

yum -y installlibnet
#
库文件
yum -y install e2fsprogs
#
库文件
yum -y installheartbeat
# linux-ha

yum –y installheartbeat-ldirectord
  cp/usr/share/doc/heartbeat-2.1.*/ha.cf /etc/ha.d/
cp/usr/share/doc/heartbeat-2.1.*/authkeys /etc/ha.d/
cp/usr/share/doc/heartbeat-2.1.*/haresources /etc/ha.d/
cp /usr/share/doc/heartbeat-ldirectord-2.1.*/ldirectord.cf/etc/ha.d/
  2、配置VIP脚本
  [iyunv@ct1 ~]# more/etc/init.d/lvsdr-basic
#!/bin/sh
#
# This script willbe executed *after* all the other init scripts.
# You can put yourown initialization stuff in here if you don’t
# want to do thefull Sys V style init stuff.
  VIP=192.168.1.198
RIP1=192.168.1.191
RIP2=192.168.1.192
###########################
# ifconfig a
#
#/sbin/ifconfigeth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
#
############################
  #/sbin/route add-host $VIP dev eth0:0
#echo “1″> /proc/sys/net/ipv4/ip_forward
  /etc/rc.d/init.d/functions
  case “$1″in
  start)
  echo “startLVS of DirectorServer”
#Set the Virtual IPAddress
  /sbin/ifconfigeth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
  /sbin/route add-host $VIP dev eth0:1
  #Clear IPVS Table
  /sbin/ipvsadm -C
  #Set Lvs
  /sbin/ipvsadm -A -t$VIP:80 -s rr
  /sbin/ipvsadm -a -t$VIP:80 -r $RIP1:80 -g
  /sbin/ipvsadm -a -t$VIP:80 -r $RIP2:80 -g
  #Run Lvs
  /sbin/ipvsadm
  ;;
  stop)
  echo “closeLVS Directorserver”
  /sbin/ipvsadm -C
  ;;
  *)
echo “Usage:$0 {start|stop}”
  exit 1
  esac
  下例是其他类似的lvsdr配置文件

more /etc/init.d/lvsDR
#!/bin/sh
# description: start LVS   of  Directorserver
VIP=192.168.1.198
RIP1=192.168.1.191

RIP2=192.168.1.192
  . /etc/rc.d/init.d/functions
  case “$1″ in
    start)
        echo ” start LVS  ofDirectorServer”
       # set the Virtual  IP Address
       /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask255.255.255.255 up
       /sbin/route add -host $VIP dev eth0:0
       #Clear IPVS table
       /sbin/ipvsadm -C
      #set LVS
      /sbin/ipvsadm -A -t $VIP:80 -s rr  (如果需要session保持添加-p 默认保持300)
      /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
      /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
      #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -g
      #Run LVS
      /sbin/ipvsadm
      #end

  ;;
    stop)
        echo “close LVS Directorserver”
        /sbin/ipvsadm -C
        ;;
    *)
        echo “Usage: $0 {start|stop}”
        exit 1
esac
  隧道模式
tun
more /etc/init.d/tunlvs
#!/bin/sh
# description: start LVS   of  Directorserver
VIP=192.168.1.198
RIP1=192.168.1.191

RIP2=192.168.1.192

. /etc/rc.d/init.d/functions

  case “$1″ in
    start)
        echo ” start LVS  ofDirectorServer”
       # set the Virtual  IP Address
       /sbin/ifconfig tunl0 $VIP broadcast $VIP netmask255.255.255.255 up
       /sbin/route add -host $VIP dev tunl0
       #Clear IPVS table
       /sbin/ipvsadm -C
      #set LVS
      /sbin/ipvsadm -A -t $VIP:80 -s rr
      /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
      /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
      #/sbin/ipvsadm -a -t $VIP:80 -r $RIP3:80 -i
      #Run LVS
      /sbin/ipvsadm
      #end
  ;;
    stop)
        echo “close LVS Directorserver”
        ifconfig tunl0 down
        /sbin/ipvsadm -C
        ;;
    *)
        echo “Usage: $0 {start|stop}”
        exit 1
esac
  (-s rr 是使用了轮叫算法,可以自行选择相应的算法,更改rr就可以了,ipvsadm -h查看帮助。-g 是使用lvs工作DR直接路由模式,也可自行修改)
如果有多个realserver直接添加就可以了,之后启动此脚本就可以了。
NAT
用法本来是因为网络IP地址不足而把内部保留IP地址通过映射转换成公网地址的一种上网方式(原地址NAT)。如果把NAT的过程稍微变化,就可以成为负载均衡的一种方式。原理其实就是把从客户端发来的IP包的IP头目的地址在DR上换成其中一台REAL SERVERIP地址并发至此REALSERVER,而REAL SERVER则在处理完成后把数据经过DR主机发回给客户端,DR在这个时候再把数据包的原IP地址改为DR接口上的IP地址即可。期间,无论是进来的流量,还是出去的流量,都必须经过DR
隧道模式则类似于VPN的方式,使用网络分层的原理,在从客户端发来的数据包的基础上,封装一个新的IP头标记(不完整的IP头,只有目的IP部)发给REAL SERVERREAL SERVER收到后,先把DR发过来的数据包的头给解开,还原其数据包原样,处理后,直接返回给客户端,而不需要再经过DR
直接路由模式比较特别,很难说和什么方面相似,前2种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。其原理为,DRREAL SERVER都使用同一个IP对外服务。但只有DRARP请求进行响应,所有REALSERVER对本身这个IPARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的REAL SERVER,把目的MAC地址改为REAL SERVERMAC并发给这台REALSERVER。这时REAL SERVER收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于DR要对二层包头进行改换,所以DRREALSERVER之间必须在一个广播域,也可以简单的理解为在同一台交换机上。
 
 
3、配置realserver脚本

  #!/bin/bash
#description : start realserver
VIP=192.168.1.198
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/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
sysctl -p
#end
此脚本使realserver不响应arp请求,将此脚本分别在realserver上执行就可以了。Ok后写入rc.local
  测试:分别启动realserver上的httpd服务
realserver1 执行  echo “191″  /var/www/html/index.html
realserver2 执行  echo “192″  /var/www/html/index.html
  打开浏览器输入http://192.168.1.198  应该可以分别看到:191 192.
  以上是最简单的lvs   一个dr 2real 2个配置文件,几个rpm包。
我们需要的是高可用,主备drmaster down bak自动接管, master启动后bak交出管理权。
现在我们开始配置这样的lvs
   集群配置基于高可用Lvs+heartbeat
  主服务器配置: 
1-
修改/etc/hosts文件
192.168.1.196           ct1
192.168.1.197           ct2
192.168.1.191                    xxx
192.168.1.192                    xxxx
1-       
修改haresources文件
ct1 IPaddr::192.168.1.198 lvsdr-basic ldirectord   
a.
定义主服务器和主服务器eth0虚拟ip,
b.
定义heartbeat启动监控的服务 ldirectord  , lvsdr-basic
3-
修改authkeys文件  修改权限 chmod 600 authkeys
   auth 1
   1 crc
4-
修改ha.cf
           debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
deadtime 20
initdead 20
#bcast   eth1                                               
eth1上发送心跳广播
ucast eth1 192.168.2.20
auto_failback on
node    ct1
node    ct2
ping_group group1 192.168.1.196 192.168.1.197
respawn root /usr/lib/heartbeat/ipfail     
apiauth ipfail gid=root uid=root

  authkeys
这个配置文件非常简单,就是在auth选择一个值。每个值对应一种算法,这个算法是在主节点和从节点间数据校验用的。这个配置文件权限必须是0600
  chmod 0600 authkeys
配置文件的值如下:
auth 3
1 crc
#2 sha1 HI!
#3 md5 Hello!
haresources
这个文件配置的是节点要管理的资源也就你的高可用服务,这些资源在主节点down调时候,从节点就会开启这些资源。Heartbeat认为
你配置资源名称 start/stop
就可以开启/停止这些资源。所以让你的资源支持start/stop。其实这你只需要对你的应用服务作个脚本,脚本接受start参数就会启动应用服务,接受stop参数就会停止服务。个人建议,你什么都不要做,就把应用程序名当作资源名就可以了,启动资源名的时候就自动启动你的服务了。而在down机的时候,所有的程序都死了,根本就不需要heartbeat调用
你配置资源名称stop
命令来结束程序。
在文件中找到:
#node1  10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
这一项,去掉#号,根据格式配置你的资源。第一字段(Node1):主节点名称(必须uname –n的保持一致);第二字段(10.0.0.170):对外虚拟服务IP;第三字段(Filesystem::/dev/sda1::/data1::ext2):Filesystem表示资源名称,/dev/sda1表示资源启动时的第一个参数,/data1表示第二个参数,/ext2表示第三个参数,依此类推。
  ha.cf
这个配置文件比较复杂。我只配了关键的几项:
debugfile /var/log/ha-debug
说明:调试日志文件文件,取默认值
logfile /var/log/ha-log
说明:系统运行日志文件,取默认值
logfacility local0
说明:日志等级,取默认值
keepalive 1
说明:心跳频率,自己设定。1:表示1秒;200ms:表示200毫秒
deadtime 10
说明:节点死亡时间阀值,就是从节点在过了10后还没有收到心跳就认为主节点死亡,自己设定
warntime 5
说明:发出警告时间,自己设定
udpport 28855
说明:心跳信息传递的udp端口,自己设定
#bcast   eth0        # Linux
说明:采用udp广播播来通知心跳,建议在副节点不只一台时使用
ucast eth0 xxx
说明:采用网卡eth0udp单播来通知心跳,eth0IP
#mcast eth0 225.0.0.1 694 1 0
说明:采用udp多播播来通知心跳,建议在副节点不只一台时使用
auto_failback off
说明:主节点重启成功后,资源是自动拿回到主节点还是等到副节点down调后拿回资源
node heartbeat1
说明:主节点名称,与uname –n保持一致。排在第一的默认为主节点,所以不要搞措顺序
node heartbeat2
说明:副节点名称,与uname –n保持一致
watchdog /dev/watchdog
说明:看门狗。如果本节点在超过一分钟后还没有发出心跳,那么本节点自动重启
  以上这些是我个人认为必配项,下面这些是可选项。
stonith baytech /etc/ha.d/conf/stonith.baytech
说明:主/副等所有节点的一种校验。
respawn userid /path/name/to/run
说明:和heartbeat必须一起启动的本地服务
ping 10.10.10.254
说明:伪节点IP,伪节点就是其失效时主/副节点不会正常工作但本身不是主/副节点之一。
respawn hacluster /usr/lib/heartbeat/ipfail
说明:与ping选项一起使用,取默认值。
baud   19200
说明:串口波特率,与serial一起使用。
serial /dev/ttyS0  # Linux
说明:采用串口来传递心跳信息。
  ldirectord.cf
  checktimeout=3
checkinterval=1
autoreload=no
logfile=”/var/log/ldirectord.log”
quiescent=no
virtual=192.168.1.198:80
        real=192.168.1.191:80 gate
        real=192.168.1.192:80 gate
        service=http                        // 服务名称http
        request=”test.html”    //  lvs
服务器测试代码
        receive=”Test”        //
        scheduler=sh                        //
按照source hash 调度
        protocol=tcp               
192191机器apache htdocs里建立test.html文件 输入Test 确保web页面可访问
  checktimeout=3  (一个真实的服务器被认为出错所需的时间间隔)
checkinterval=1
(发出检查的时间间隔)
#autoreload=no
(自动重载,默认值是no,选yes时配置文件发生变化后就会自动载入)
#callback=
配置文件的路径(用来重载配置文件)
fallback=127.0.0.1:80
(当所有的真实服务器出错时,web服务重定向的地址)
#logfile=”/var/log/ldirectord.log”
(日志文件的目录)
#logfile=”local0″
#execute=”configuration”
(为这个配置文件启动ldirectord的实例)
quiescent=yes
(当选择yes时,一台真实服务器down以后,并不是把它从lvs的表中删除,而是把它的权值设为0,新的链接将不可达)
virtual=192.168.1.198:80  
(虚拟的ip和端口号)
real=192.168.1.191:80 gate   
真实的服务器)  
real=192.168.1.192:80 gate
fallback=127.0.0.1:80 gate
checktype=negotiate
(检测类型,默认为negotiate
service=http
checkport
80 (检查的端口号)
request=”test.html”
(负载平衡机将查询实际server的服务目录下面是不是    有该文件,如果有说明server还是在服务的,没有将认为它已经出错)
receive=”Test ”
scheduler=rr  
(调度算法)
#persistent=600
#netmask=255.255.255.255
protocol=tcp   
(协议)
3.        
启动
输入 ldirectord start 启动服务,ldirectord stop停止服务,ldirectord rload 重新载入配置信息。
  同样  bak服务器也配置如上。  
另外,bak服务 cd /etc/ha.d
               ln –s tmp/harc .
/etc/rc.d/rc.local
中写入 /etc/init.d/heartbeat start
主服务器rc.local 中写入 /etc/init.d/lvsdr-basic start
                      /etc/init.d/heartbeat start
内网服务器可关闭iptables
公网服务器最好是heartbeat通讯口专用  iptables相对应的网口过滤
  Ok 到此为止 高可用配完
 

 

 

下面做双机cluster
双机LVS-HA
       
(一)架构信息

主服务器+真实的web服务器 192.168.2.28
备服务器+ 真实的web服务器:192.168.2.20
Lvs director
配置在主服务器上,根据源地址分配服务器。
集群的虚拟ip60.*.165,初始分配在主服务器的eth0, 主服务器宕机后,ip由备份服务器接管,分配在备份服务器的eth0.

  (二)集群软件安装
1-
主服务器安装:
yum -y install ipvsadm    # ipvs
管理器   
yum -y install libnet      #
库文件
yum -y install e2fsprogs  #
库文件
yum -y install heartbeat   # linux-ha
yum –y install heartbeat-ldirectord  # connector of linux-ha and lvs   
【备份服务器不用安装】
  2- 拷贝配置文件
cp /usr/share/doc/heartbeat-2.1.*/ha.cf /etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.*/authkeys /etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.*/haresources /etc/ha.d/
cp /usr/share/doc/heartbeat-ldirectord-2.1.*/ldirectord.cf /etc/ha.d/
【备份服务器不用】
  (三)集群配置
主服务器配置: 
1-
修改/etc/hosts文件
192.168.2.28           name1
192.168.2.20           name2

  2-        修改haresources文件
liuyuxi IPaddr::60.*.165 lvsdr-basic ldirectord   
3-
修改authkeys文件  修改权限 chmod 600 authkeys
   auth 1
   1 crc
4-
修改ha.cf
           debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
deadtime 20
initdead 20
ucast 192.168.2.20
auto_failback on
node    name1
node    name2
ping_group group1 192.168.2.28 192.168.2.20
respawn root /usr/lib/heartbeat/ipfail     
apiauth ipfail gid=root uid=root

  5- ldirectord.cf
checktimeout=3
checkinterval=1
autoreload=no
logfile=”/var/log/ldirectord.log”
quiescent=no
virtual=60.*.165:80
        real=60.*.171:80 gate
        real=60.*.164:80 gate
        service=http                       
        request=”test.html”   
        receive=”Test”        
        scheduler=sh                       
        protocol=tcp               
  
6- lvsdr-basic
/etc/init.d/lvsdr-basic
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.
  VIP=60.*.165
RIP1=60.*.171
RIP2=60.*.164
###########################
# ifconfig a
#
#/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
#
############################
  /sbin/route add -host $VIP dev eth0:0
echo “1″ > /proc/sys/net/ipv4/ip_forward
  备份服务器配置:     
1-
修改/etc/hosts文件  同主服务器
2-       
修改haresources文件
liuyuxi switchdr IPaddr::60.*.165
虚拟ip地址是 60.*.165
备份服务器在接管主服务器前,执行switchdr start
备份服务器在移交主服务器前,执行switchdr stop
switchdr
见备份服务器配置第5.

  3- 修改authkeys文件  同服务器
4-
修改font-s

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-365825-1-1.html 上篇帖子: LVS + Jboss配置的注意点 下篇帖子: LVS/NAT模式的注意事项
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表