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

[经验分享] Heartbeat + LVS + ldirectord构建可伸缩网络服务(1)

[复制链接]

尚未签到

发表于 2015-11-21 07:46:02 | 显示全部楼层 |阅读模式
http://bbs.srsman.com/topic/view/103.htmlHeartbeat + LVS + ldirectord构建可伸缩网络服务
网络环境:
机器数量:2
操作系统:Centos 5.0,Centos 5.2
机器名:centos50,centos52
机器IP:
Centos 5.0: 10.2.20.15
Centos 5.2: 10.2.20.88
虚拟IP: 10.2.20.17

需要的软件:
httpd:提供web服务
LVS:对web服务器按照一定的规则进行转发
Heartbeat:提供ip漂移服务,在主服务器宕机后,备份服务器接管虚拟ip
ldirectord:提供lvs控制,监控真实服务器,出现问题后,对轮循列表进行更新,去除出现问题的服务器

机器角色:
centos50:主负载均衡器+真实服务器
centos52:备份负载均衡器+真实服务器

实现功能:
两台服务器做为负载均衡器进行主从互备,并充当真实服务器功能,对外提供服务,当真实服务器出现问题后,主负载均衡器能够检测到,并从负载均衡轮循列表清除有问题的真实服务器。
当主负载均衡器出现问题后,备份负载均衡器能够接管负载均衡服务,使服务不受影响。

1.最小化安装操作系统;
2.在两台机器上配置机器名
在/etc/hosts文件中添加主机名记录,确保两台机器能够通过主机名相互ping通
3.安装httpd,heartbeat,ldirectord
centos 5.2内核已经包含lvs,不用安装,只安装httpd,heartbeat,ldirectord
yum install httpd,heartbeat,heartbeat-ldirector

4.配置lvs,在两台机器上进行如下操作
1).为回环接口配置虚拟ip
cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
修改/etc/sysconfig/network-scripts/ifcfg-lo:0文件,内容如下:
DEVICE=lo:0
IPADDR=10.2.20.16       #虚拟ip地址
NETMASK=255.255.255.255
BROADCAST=255.255.255.255
ONBOOT=yes
NAME=loopback
启动lo:0接口
ifup lo:0

2).修改arp转发规则
修改/etc/sysctl.conf文件,添加如下内容:
net.ipv4.ip_forward = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
运行sysctl -p命令,使用配置生效

3).编写lvs真实服务器启动脚本
在/etc/init.d目录下新建文件realserver,内容如下:
#!/bin/sh
#Create on 2007-11-21
#Description start lvs,disable arp response
VIP=10.2.20.17    #虚拟ip
#. /etc/rc.d/init.d/functions
case "$1" in
        start)
                echo "lvs start"
                /sbin/ifconfig lo:0 down
                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
        ;;
        stop)
                echo "lvs stop"
                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
                /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        ;;
        *)
                echo "Usage:$0 {start|stop}"
                exit
        ;;
esac
修改文件权限,使脚本有执行权限
chmod +x realserver

Heartbeat + LVS + ldirectord构建可伸缩网络服务
网络环境:
机器数量:2
操作系统:Centos 5.0,Centos 5.2
机器名:centos50,centos52
机器IP:
Centos 5.0: 10.2.20.15
Centos 5.2: 10.2.20.88
虚拟IP: 10.2.20.17

需要的软件:
httpd:提供web服务
LVS:对web服务器按照一定的规则进行转发
Heartbeat:提供ip漂移服务,在主服务器宕机后,备份服务器接管虚拟ip
ldirectord:提供lvs控制,监控真实服务器,出现问题后,对轮循列表进行更新,去除出现问题的服务器

机器角色:
centos50:主负载均衡器+真实服务器
centos52:备份负载均衡器+真实服务器

实现功能:
两台服务器做为负载均衡器进行主从互备,并充当真实服务器功能,对外提供服务,当真实服务器出现问题后,主负载均衡器能够检测到,并从负载均衡轮循列表清除有问题的真实服务器。
当主负载均衡器出现问题后,备份负载均衡器能够接管负载均衡服务,使服务不受影响。

1.最小化安装操作系统;
2.在两台机器上配置机器名
在/etc/hosts文件中添加主机名记录,确保两台机器能够通过主机名相互ping通
3.安装httpd,heartbeat,ldirectord
centos 5.2内核已经包含lvs,不用安装,只安装httpd,heartbeat,ldirectord
yum install httpd,heartbeat,heartbeat-ldirector

4.配置lvs,在两台机器上进行如下操作
1).为回环接口配置虚拟ip
cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
修改/etc/sysconfig/network-scripts/ifcfg-lo:0文件,内容如下:
DEVICE=lo:0
IPADDR=10.2.20.16       #虚拟ip地址
NETMASK=255.255.255.255
BROADCAST=255.255.255.255
ONBOOT=yes
NAME=loopback
启动lo:0接口
ifup lo:0

2).修改arp转发规则
修改/etc/sysctl.conf文件,添加如下内容:
net.ipv4.ip_forward = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
运行sysctl -p命令,使用配置生效

3).编写lvs真实服务器启动脚本
在/etc/init.d目录下新建文件realserver,内容如下:
#!/bin/sh
#Create on 2007-11-21
#Description start lvs,disable arp response
VIP=10.2.20.17    #虚拟ip
#. /etc/rc.d/init.d/functions
case "$1" in
        start)
                echo "lvs start"
                /sbin/ifconfig lo:0 down
                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
        ;;
        stop)
                echo "lvs stop"
                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
                /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        ;;
        *)
                echo "Usage:$0 {start|stop}"
                exit
        ;;
esac
修改文件权限,使脚本有执行权限
chmod +x realserver

5.配置Heartbeat
1).在/etc/ha.d目录新建ha.cf文件,内容如下:
logfile    /var/log/ha-log    #heartbeat日志文件位置
logfacility    local0    #将heartbeat日志记录到系统日志中,可选
keepalive 2    #设定heartbeat之间的检测时间间隔为2秒
deadtime 30    #在无响应30秒后宣布节点死亡
warntime 10    #在日志中发出“late heartbeat“警告之前等待的时间,单位为秒
initdead 60    #在某些配置下,重启后网络需要一些时间才能正常工作。这个单独的”deadtime”选项可以处理这种情况。它的取值至少应该为通常deadtime的两倍。
udpport    694    #使用端口694进行bcast和ucast通信。这是默认的,并且在IANA官方注册的端口号
auto_failback on    #auto_failback设置为on时,一旦主节点重新恢复联机,将从从节点取回所有资源。若该选项设置为off,主节点便不能重新获得资源。
watchdog /dev/watchdog    #可以在检测到heartbeat不正常状态持续一分钟后自动重新启动系统
node    centos50    #集群中机器的主机名,与“uname –n”的输出相同,主结点
node    centos52    #同上,备份结点
ping 10.2.20.254    #用来为ipfail等模块检查网络连接情况的,这里不应是集群节点
respawn hacluster /usr/lib64/heartbeat/ipfail    #在heartbeat启动进运行的程序,ipfail插件的用途是检测网络故障,并作出合理的反应

2).在/etc/ha.d目录新建authkeys文件,内容如下
auth 1
1 crc

这个文件用来在集群机器间进行认证,如果您的Heartbeat运行于安全网络之上,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但您也希望降低CPU使用,则使用md5。最后,如果您想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解。

3).在/etc/ha.d目录新建haresources文件,内容如下
centos50 realserver IPaddr::10.2.20.17 ldirectord
centos50:集群主节点,它应该与uname -n命令输出的内容相同
realserver,IPaddr,ldirectord:服务脚本,Heartbeat会在以下路径中寻找有相同名字的服务脚本:/etc/ha.d/resource.d ,/etc/init.d,所以我们的脚本应该在这两个目录下
::10.2.20.17:脚本参数,若要向教本传递参数,格式应该为: <scriptname>::<argument>
heartbeat 在启动会使用<scriptname> start形式运行脚本,启动顺序是先运行realserver脚本,再运行IPaddr脚本,最后运行ldirectord脚本,停止时会使用<scriptname> stop运行脚本,停止顺序是先停止ldirectord脚本,再停止IPaddr脚本,最后停止realserver脚本。

注意:realserver 脚本的作用比较特殊,我们这里两台机器充当的角色比较多,包括主从备份结点,负载均衡器,提供服务的真实服务器。为了实现真实服务器功能,我们需要在lo 接口绑定虚拟ip,并修改内核arp转发规则,使负载均衡功能正常。所以在操作系统启动时我们配置自动启动配置了虚拟ip的lo:0接口,并修改内核 arp转发规则。

主结点heartbeart启动时,如果不关闭lo:0接口,IPaddr脚本就会运行不正常,不能在真实网卡上绑定虚拟ip。所以在主节点启动时我们要将lo:0接口关闭,以使IPaddr脚本正常运行,将虚拟ip绑定到真实网卡;在主结点不正常时再通过 realserver脚本启动lo:0接口,实现真实服务器功能。

备份结点heartbeat启动时,会检测主结点状态,如果主结点状态正常,它只充当真实服务器角色,不会运行haresources里面的内容,这样lo:0接口不会关闭,备份结点的真实服务器功能就可以实现;在检测到主结点出现问题后,备份结点要先把lo:0接口关闭,然后在真实网卡绑定虚拟ip,并通过ldirectord配置lvs轮循列表,充当负载均衡器。

这段话比较啰嗦,不知道我说明白没有!

4).在/etc/ha.d目录新建ldirectord.cf文件,内容如下
checktimeout=3
checkinterval=5
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes

virtual=10.2.20.17:80
    real=10.2.20.15:80 gate 5
    real=10.2.20.88:80 gate 5
    fallback=127.0.0.1:80 gate
    service=http
    request="test.html"
    receive="Test Page"
    scheduler=wlc
    checktype=negotiate

文件内容的含义,在网上找找,写不下去了
在web服务器根目录新建文件test.html,内容:Test Page
在web服务器根目录新建文件index.html,内容:This is server1
5).将以上文件全部复制到另一台机器
scp ha.cf authkeys haresources ldirectord.cf root@xxx.xxx.xxx.xxx:/etc/ha.d/
修改authkeys文件权限为600
在web服务器根目录新建文件test.html,内容:Test Page
在web服务器根目录新建文件index.html,内容:This is server2

6.在两台机器上启动heartbeat
service heartbeat start

7.测试服务器状态
通过ifconfig命令查看主结点是否在真实网卡上绑定了虚拟ip
通过ipvsadm -l 命令查看主结点lvs轮循列表是否正常
通过虚拟ip访问web服务,并刷新,看负载均衡功能是否正常
通过拔掉主结点网线,查看备份结点是否能够接管虚拟ip

运维网声明 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-141673-1-1.html 上篇帖子: LVS性能优化及问题总结 下篇帖子: 也说说LVS模式的选择
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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