免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 29274 | 回复: 44

2008夏 较全的lvs+ha 个人文档(2机,3机,4机以上) [复制链接]

论坛徽章:
0
发表于 2008-07-02 15:13 |显示全部楼层
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 ,2个real 。 2个配置文件,几个rpm包。
我们需要的是高可用,主备dr,master 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
说明:采用网卡eth0的udp单播来通知心跳,eth0的IP
#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               
在192,191机器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 到此为止 高可用配完

论坛徽章:
0
发表于 2008-07-02 15:14 |显示全部楼层
下面做双机cluster
三)双机lvs-ha
       
主服务器+真实的web服务器 :192.168.2.28
备服务器+ 真实的web服务器:192.168.2.20
Lvs director 配置在主服务器上,根据源地址分配服务器。
集群的虚拟ip为60.*.165,初始分配在主服务器的eth0, 主服务器宕机后,ip由备份服务器接管,分配在备份服务器的eth0.
   




二、集群软件安装
主服务器安装:
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- 修改ha.cf 同主服务器   注意ucast
5- switchdr 脚本
/etc/init.d/switchdr
#!/bin/sh
# description: close lo0 and arp_ignore
VIP=60.*.165

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

case "$1" in
    start)
        echo "************* start director server and close tunl ***********"
        ifconfig lo:0 down
        echo 0>/proc/sys/net/ipv4/conf/all/arp_announce   //允许arp解析虚ip
        ;;
    stop)
        echo "start Real Server"
//          ---------------------------------------------------禁止arp 解析虚ip
        ifconfig eth0:0 down
        ifconfig lo:0  $VIP netmask 255.255.255.255 broadcast $VIP 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
        ;;
    *)
        echo "Usage: switchdr {start|stop}"
        exit 1
esac


主服务器上:
/usr/local/apache/bin/apachectl start
/etc/init.d/heartbeat start
备服务器上:
/etc/init.d/httpd start
/etc/init.d/switchdr stop
/etc/init.d/heartbeat start


到此ok,如果有问题就是配置问题,好好检查你的log,所有的信息都在log上显示的。Ipvsadm可显示lvs连接,ipvsadm –l –c 命令查看当前响应。

最后感谢刘俊,ghbspecial 等同志 ,我是参照他们的文档作出的,
有问题请联系我  xu_pj#hotmail.com (#替代@)

论坛徽章:
0
发表于 2008-07-02 18:54 |显示全部楼层
好贴,暂时就要第一个功能。
收藏了!!!

论坛徽章:
0
发表于 2008-07-02 22:34 |显示全部楼层
提个建议啊:楼主可不可以给个按照使用集群管理软件来配置集群的说明文档;对于我等新手来说,图形的东西远比文字的东西要来的直观。
先说声谢谢了!

论坛徽章:
0
发表于 2008-07-02 22:49 |显示全部楼层
原帖由 新手前来报到 于 2008-7-2 22:34 发表
提个建议啊:楼主可不可以给个按照使用集群管理软件来配置集群的说明文档;对于我等新手来说,图形的东西远比文字的东西要来的直观。
先说声谢谢了!

ls的   这是我 自认为非常简单 明了的文档了   

如果你深入些   你就会发现的  

图形在1楼已给出

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
发表于 2008-07-02 23:46 |显示全部楼层
很不错的文档
记录下

论坛徽章:
0
发表于 2008-07-07 15:38 |显示全部楼层
正学习,先收下了,谢谢楼主

论坛徽章:
0
发表于 2008-07-07 17:34 |显示全部楼层
感谢lz的好文。有些不明白的地方,望lz赐教:
1。文章最后
   
下面做双机cluster
三)双机lvs-ha
        
主服务器+真实的web服务器 :192.168.2.28
备服务器+ 真实的web服务器:192.168.2.20
Lvs director 配置在主服务器上,根据源地址分配服务器。
集群的虚拟ip为60.*.165,初始分配在主服务器的eth0, 主服务器宕机后,ip由备份服务器接管,分配在备份服务器的eth0.
................................ ............................................... ..................................................................................  
这一步和之前“ 二)集群配置基于高可用Lvs+heartbeat ”这一步有何区别?是否前者为realserver节点备份,而后者为lvsdr的热备?
但从lz拓扑图来看似乎不是这样的。

2。看过一些资料说ldirectord只是用于后台realserver的监控?而在两台lvs(即主lvs,从lvs)做ha,还是利用ldirectord吗?
如果不是,那该用什么软件?

恕我愚钝。望lz能解答。

论坛徽章:
0
发表于 2008-07-09 10:51 |显示全部楼层
原帖由 long904 于 2008-7-7 17:34 发表
感谢lz的好文。有些不明白的地方,望lz赐教:
1。文章最后
   
下面做双机cluster
三)双机lvs-ha
        
主服务器+真实的web服务器 :192.168.2.28
备服务器+ 真实的web服务器:192.168.2.20
Lvs d ...

ls 过奖了    大家共同研究  
三 和 二 没有任何关系   仅仅是双机做lvs   
双机一个是master 另一个是备份   而real分发就是他俩本身        
第一张图片 仅是供给 二用的   

ld还是用来监控的   事实上 无论是master 还是back  还是realn(n=1,2,3.。。) 都可监控
只要把realserver的脚本在heartbeat之前执行 再修改ld 配置文件即可

论坛徽章:
0
发表于 2008-07-09 10:54 |显示全部楼层

这里一起回答guichen 网友的问题

我因工作需要,初学lvs,看了你写的“2008夏 较全的lvs+ha 个人文档”后,感觉受益很多。
因我公司用的软件是UltraMonkey-L7来做lvs的,不知你对这个软件了解吗?

我现在做到这一步:
# l7vsadm -l
Layer-7 Virtual Server version 2.0.0-0
Prot LocalAddressort ProtoMod Scheduler
  -> RemoteAddressort           Forward Weight ActiveConn InactConn
TCP 192.168.1.200:http cinsert rr
  -> WEB2:http                    Masq    0      0          0         
  -> WEB1:http                    Masq    0      0          0

但在别的机器上访问192.168.1.200时,显示打不开网页,web1和web2上的httpd服务正常,
单独访问它们的ip可正常显示,但访问vip时就不显示,不知是否还有什么地方我没有设置的?
还请指教,谢谢。

  
  检查你的log-debug 和ha-log日志,所有信息都在上面
  检查你的ifconfig 查看vip  还有realserver脚本 上的机器ip   
  ipvsadm -l -c 是检查当前连接情况
  需要贴出你的日志和配置文件     细心配置   lvs还是很简单的

[ 本帖最后由 gunguymadman 于 2008-7-9 11:02 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP