1、LVS高可用web负载均衡群集Linux(适用操作系统:CentOS5)完成人员:李凯翔完成日期:2011-06-25Qq;17501444Linuxtone ID:SharkShowGoogle talk:Net.SharkShow黑色 加粗字体为命令.淡蓝 加粗是显示内容 红色 是注释一. 实验要求Lvs+heartbeat+ldirectory高可用性负载均衡.LVS的调度分配软件 = (ipvsadm)LVS的双机热备软件 = (heartbeat状态监控 ; 平滑冗余)LVS 的高可用性 = (heartbeat-ldirectord容错机制高可用)二. 实验拓扑三. 系统环境操作系
2、统:CentOs 5.5 (关闭selinux及iptables)相关软件:lvsaadm 、heartbeat 、heartbeat-ldirectord、net-snmp、lm_sensors、perl模块网络要求:所有服务器位于同一VLan,机器无特殊要求。四. 地址规划名称角色IP地址LVS_A活动调度器VIP: 192.168.1.88/24Eth0: 192.168.1.30/24Eth1: 8.8.8.1/24LVS_B备份调度器Eth0: 192.168.1.40/24Eth1: 8.8.8.2/24WEB_A内容服务器Eth0: 192.168.1.10WEB_B内容服务器E
3、th0: 192.168.1.20五. 安装软件1. 更新yum源(将yum源替换成中国科大的yum源或mirrors的源)# cd /etc/yum.repos.d # 进入yum源目录# mv CentOS-Base.repo,.bak# 修改默认网络源的名字使其不生效# wget http:/docs.linuxtone.org/soft/lemp/CentOs-Base.repo # 下载中科大源# wget # 下载mirrors-163源# wget # 下载mirrors-sohu源注意:三个源任选一个就好.我是使用163的2. Yum安装ipvsadm / heartbeat
4、/ net-snmp #Yum# yum install ipvsadm# 安装LVS# yum install heartbeat* # 安装heartbeat时会自动解决依赖关系# yum install net-snmp# 安装net-snmp3. 安装heartbeatyum安装heartbeat会出现这个错误:不用理他,在用yum安装一次 就处理好了以下列出heartbeat所依赖的包名如果使用rpm方式安装可以参考|红色|是安装包|绿色|是依赖在两台机器上都完成heartbeat的安装后进行查看4. 两台机器查看heartbeat是否安装全# rpm -qa | grep hear
5、tbeat# 查看安装包是否完整5.网络配置 # Vim /etc/hosts#vi编辑本地解析文件Cat /etc/hosts 192.168.1.30LVS_A #添加LVS_A的解析192.168.1.40LVS_B #添加LVS_B的解析SHOW/etc/hosts 内容如下图实验过程中为了避免重启直接使用hostname命令修改主机名(立即生效,重启无效)# hostname LVS_A# hostname LVS_B#使用scp将文件传给LVS_B(简化操作).以下LVS脚本和WEB脚本都可使用scp。一. 配置LVS1. 配置LVS_A.sh# Vim LVS_A.sh#调度器L
6、VS_A的#!/bin/bashVIP=192.168.1.88WEB_A=192.168.1.10WEB_B=192.168.1.20LVS_A=192.168.1.30LVS_B=192.168.1.40case $1 instart)/sbin/ifconfig eth0 LVS_A/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up/sbin/route add -host $VIP dev eth0:0ipvsadm -A -t $VIP:80 -s rr #-A添加一个virtual服务器 -t T
7、CP协议 -s算法 rripvsadm -a -t $VIP:80 -r $WEB_A:80 -g #-g (DR模式) -i (TUN模式) -m (NAT模式)ipvsadm -a -t $VIP:80 -r $WEB_B:80 -gipvsadm-save /etc/sysconfig/ipvsadm#保存设置命令.下次可以使用Service直接调用echo ipvsadm is start ok .;stop)/sbin/ipvsadm -C#清空ipvsadm群集设置/sbin/route del $VIP#删除VIP路由echo ipvsadm is stop now ok .;*
8、)echo Usage : $0 start | stopesac-# chmod +x LVS_A.sh#添加可执行权限2. 配置LVS_B.sh# Vim LVS_B.sh#调度器LVS_B的#!/bin/bashVIP=192.168.1.88WEB_A=192.168.1.10WEB_B=192.168.1.20LVS_A=192.168.1.30LVS_B=192.168.1.40case $1 instart)/sbin/ifconfig eth0 LVS_B/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.
9、255 up/sbin/route add -host $VIP dev eth0:0ipvsadm -A -t $VIP:80 -s rr #-A添加一个virtual服务器 -t TCP协议 -s算法 rripvsadm -a -t $VIP:80 -r $WEB_A:80 -g #-g (DR模式) -i (TUN模式) -m (NAT模式)ipvsadm -a -t $VIP:80 -r $WEB_B:80 -gipvsadm-save /etc/sysconfig/ipvsadm#保存设置命令.下次可以使用Service直接调用echo ipvsadm is start ok .;s
10、top)/sbin/ipvsadm -C#清空ipvsadm群集设置/sbin/route del $VIP#删除VIP路由echo ipvsadm is stop now ok .;*)echo Usage : $0 start | stopesac-# chmod +x LVS_B.sh#添加可执行权限3. WEB_A 服务内容脚本# Vim WEB_A.sh#!/bin/bashVIP=192.168.1.88WEB_A=192.168.1.10WEB_B=192.168.1.20case $1 in start)/sbin/ifconfig eth0 $WEB_A# eth0/sbin
11、/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up#虚拟.VIP/sbin/route add -host $VIP dev lo:0# VIP主机路由echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/lo/arp_announceecho 1 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/all/arp_announce#不响应ar
12、p请求echo WEBs LVS is start ok .; stop)/sbin/ifconfig lo:0 down/sbin/route del $VIP echo 0 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 0 /proc/sys/net/ipv4/conf/lo/arp_announceecho 0 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 0 /proc/sys/net/ipv4/conf/all/arp_announceecho WEBs LVS is stop ok .; *) echo
13、Usage : $0 start | stop;Esac# chmod +x WEB_A.sh4. WEB_B 负载服务脚本# vim WEB_B.sh#!/bin/bashVIP=192.168.1.88WEB_A=192.168.1.10WEB_B=192.168.1.20case $1 in start)/sbin/ifconfig eth0 $WEB_B#eth0/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up #虚拟IP/sbin/route add -host $VIP dev lo:0 #VIP主
14、机路由echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/lo/arp_announceecho 1 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/all/arp_announce#不响应arp请求echo WEBs LVS is start ok .; stop)/sbin/ifconfig lo:0 down/sbin/route del $VIP echo 0 /proc/sys/net/ipv4/c
15、onf/lo/arp_ignoreecho 0 /proc/sys/net/ipv4/conf/lo/arp_announceecho 0 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 0 /proc/sys/net/ipv4/conf/all/arp_announceecho WEBs LVS is stop ok .; *) echo Usage : $0 start | stop;esac# chmod +x WEB_B.sh#为脚本添加可执行权限5. 查看测试LVSLvs状态查看 查看LVS的连接情况: ipvsadm -L n查看LVS的吞吐量
16、情况ipvsadm -L -n rate查看LVS的统计信息:ipvsadm -L -n stat查看LVS的连接状态变化:watch ipvsadm ?ln.# ipvsadm LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.1.88:80 rr - 192.168.1.20:80 Route 1 0 0 - 192.168.1.10:80
17、 Route 1 0 0 二. 配置ldirectord 1.# vim /etc/ha.d/ldirectord.cf# cp /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf /etc/ha.d/如果要通过ldirectord监控节点状态;只需启动ldirectord,整个集群系统就可以运行起来,而无需执行上面配置的LVS_A脚本;因为ldirectord配置文件决定.会自动调用ipvsadm创建LVS路由表.配置选项含义如下# vim ldirectord.cfchecktimeout=3#判定real server出错的时间
18、间隔。checkinterval=1#指定ldirectord在两次检查之间的间隔时间。fallback=127.0.0.1:80#当所有的real server节点不能工作时,web服务重定向的地址(本机:80)。autoreload=yes#是否自动重载配置文件,选yes时,配置文件发生变化,自动载入配置信息。quiescent=yes#当选择no时,如果一个节点在checktimeout设置的时间周期内没有响应,ldirectord将会从LVS的路由表中直接移除real server,此时,将中断现有的客户端连接,并使LVS丢掉所有的连接跟踪记录和持续连接模板,如果选择为yes,当某个r
19、eal server失效时,ldirectord将失效节点的权值设置为0,新的连接将不能到达,但是并不从LVS路由表中清除此节点,同时,连接跟踪记录和程序连接模板仍然保留在Director上virtual=192.168.1.88:80 real=192.168.1.10:80 gate #指定虚拟的IP地址和端口号,注意,在virtual行后面的行必 须缩进4个空格或以一个tab字符进行标记。 real=192.168.1.20:80 gate #指定Real Server服务器地址和端口,同时设定LVS工作模式. #用gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。
20、 fallback=127.0.0.1:80 gate service=http #指定服务的类型,这里是对http服务做负载均衡。 request=index.html #ldirectord将根据指定的Real Server地址,结合该选项给出 的请求路径,发送访问请求,检查Real Server上的服务是否正常运行,确保这里给出的页面地 址是可访问的,不然ldirectord会误认为此节点已经失效,发生错误监控现象。 receive=Test Page #指定请求和应答字串。 scheduler=rr #指定调度算法,这里是rr(轮叫)算法。于上面呼应 protocol=tcp #指定协
21、议的类型,LVS支持TCP和UDP协议。 checktype=negotiate #指定Ldirectord的检测类型,默认为negotiate。 checkport=80 #指定监控的端口号。 virtualhost=SharkS #虚拟服务器的名称,随便指定。三. 配置heartbeat(主要就是配置三个文件:ha.cf 、haresources和authkeys)1. # vim /etc/ha.d/ha.cf# vim /etc/ha.d/ha.cf配置选项如下debugfile /var/log/ha-debug #指定heartbeat调试日志文件存放的位置logfile /var
22、/log/ha-log#指定heartbeat运行系统日志存放的位置logfacility local0#日志记录等级keepalive 2 #指定多久检测一次心跳heartbeat 本实验2秒warntime 5 #连续多长时间联系不上开始警告提示 本实验5秒deadtime 30#等待声明主机死机的时间.30秒内没有心跳信号.切换服务initdead#指定heartbeat首次启动时deadtime应该为多久.预留忽略时间#bcast bond0#只有两台机器的时候可以使用广播.本实验使用此方法udpport 694#使用upd 694检测心跳服务#baud 19200#串口通讯的波特率,
23、本实验环境不需要,注释掉#serial /dev/ttyS0#主从如果是串口链接,需将此注释取消#ucast eth1 8.8.8.2#这里指定LVS_B的地址.在LVS_B上配置时需要改成LVS_A地址auto_failback on#恢复正常后是否需要切换回来node LVS_A#指定heartbeat使用那些主机.主机名于uname -n一致node LVS_B#备用节点名称ping 192.168.1.1#只是用于检测节点的连通性,并不作为节点切换的真正依据pwatchdog /dev/watchdog #看门狗。如果本节点1分钟后还没有发出心跳.那么本节点自动重启respawn ha
24、cluster /usr/lib/heartbeat/ipfail #配置ip绑定和切换功能apiauth ipfail gid=haclient uid=hacluster #控制ip切换时所使用的用户注:如果主节点需要维护时,可先将其转移到备份服务器上使用如下命令# /usr/lib/heartbeat/hb_standby (hb_standby命令把资源强迫到迁移到备份服务器)如果主节点要切回来掌管服务:# /usr/lib/heartbeat/hb_takeover2.# vim /etc/ha.d/authkeys# vim /etc/ha.d/authkeys配置项如下.表示使用
25、md5作为数字签名算法对心跳数据包加密保存退出后必须调整此文件的权限为600只有root用户有权限否则启动失败日志提示.权限安全问题auth 33 md5 sharkshow# chmod 600 /etc/ha.d/authkeys #更改文件权限3.# vim /etc/ha.d/haresources配置项如下 LVS_A IPaddr:192.168.1.88/32 ldirectord:ldirectord.cf这个配置的解释各文档种不一样我通过日志查看发现是这样的情况LVS_A#是主节点名称. IPaddr#IPaddr是存在于/etc/ha.d/resource.d目录下脚本;也
26、可以存在于/etc/init.d/下的#而且得支持start和stop参数.因为主节点启用时会调用start.释放时会调用stop“:”两个冒号代表的是空格192.168.1.88/32 是IPaddr这个脚本调用的参数具体工作可以去看IPaddr这个脚本在主服务器启用服务时查看系统日志里会如下的两行.很生动吧# tail f /var/log/ha-loginfo: Running /etc/ha.d/resource.d/IPaddr 192.168.1.88/32/ startinfo: Running /etc/ha.d/resource.d/ldirectord ldirectord
27、.cf start192.168.188/32 代表的是Ipaddr这个脚本调用的参数.那ldirectord.cf就不用我说了 注意: 如果有多个脚本主节点启动的时候顺序是从左往右.释放的时候从右往左stop.要注意这个协调顺序info: Running /etc/ha.d/resource.d/ldirectord ldirectord.cf stopinfo: Running /etc/ha.d/resource.d/IPaddr 192.168.1.88/32/ stop四. scp文件到LVS_B;如果是单播.自行修改ha.cf中的关键字# cd /etc/ha.d/# scp ha
28、.cf authkeys haresources ldirectord.cf root192.168.1.40:/etc/ha.d/#如果嫌麻烦而且为了统一ha.d目录的内容可以使用-r 参数把/etc/ha.d/目录都拷贝过去本实验环境ha.cf的关键字是广播检测发送心跳.单播的时候ha.cf关键字的互指对方地址.写法如下:# scp r /etc/ha.d/ root192.168.1.40:/etc/五. 开启服务# /etc/init.d/ldirectord start#高可用容错机制# /etc/init.d/heartbeat start#心跳检测资源释放.平滑冗余-end-总结
29、:heartbeat日志中记录的主机名都是小写不知道这个有所谓没所以建议做的时候将主机名换成小写.使用HTML5和CSS3构建基于webkit的Web Page/App现在在ios/android上的web网站变的越来越多,智能机中ios和android系统的设备市场份额也是与日俱增,相信未来会是一个趋势,那么如何构建基于webkit的网站呢?这里有一篇文章介绍了如何用html5创建一个iphone的app,这是一个基于web的本地离线应用,相对于native应用来说基于web的应用开发和测试都非常快捷,基于webkit浏览器支持大部分的html5,也支持大部分的css3,而且开发语言也是大多
30、数web工程师所熟悉的,最重要的一点是基于web的应用是完全跨平台的,不需要多平台的开发和测试。开发基于webkit的web app/page时需要注意的有:HTML特性:在iphone上不workCall Me可以调用打电话应用google maps, iTunes和youtube的链接会在iphone上打开相应的组件app/web page设置: 在设置书签的时候可以显示好看的图标 离线应用的另一个技巧 隐藏状态栏 设置开始页面图片 指定mobile,并且不可缩放 同上CSS相关配置:media screen and (max-device-width: 480px)/* 小屏幕的css样
31、式 */media screen and (max-width: 320px)/* 纵向的css样式 */media screen and (max-width:480px)/* 横向的css样式 */media screen and (orientation: portrait)/* iPad 纵向的css样式 */media screen and (orientation:landscape)/* iPad 横向的css样式 */display: -webkit-box; -webkit-box-orient:vertical/horizontal; -webkit-box-flex: v
32、alue 水平垂直布局boxrounded corner/text shadow/box shadow/rgba/font-face/transform/transition/animation/border-image/gradients/ 充分利用这些css3的特性做出丰富的UI脚本特性:可以选用开源的javascript库,如yui, jquery, mootools, dojo 垂直的js库,如canvas游戏库有LimeJs, GameJs等,Mobile UI库如jquery mobile, sencha touch, iui等,以及其它各种库隐藏标题栏 addEventListe
33、ner(“load”, function() setTimeout(function () window.scrollTo(0,1);, 0); , false);webkitTransitionEnd/webkitAnimationStart/webkitAnimationIteration/webkitAnimationEnd transition/animation事件localstorage/manifest 离线应用模拟iphone的scroll效果,解决Mobile Safari下不支持position:fixed的问题:touch scroll,demo调试:safari上可以设
34、置user agent为iphone上的safari(preference-advaced-developer tool),还可以手动添加android的user agent Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17 Nexus iphone的safari上有debug调试关注Mobile性能问题,可以采用firebuglite等书签脚本来调试文章的标题说的是web app/page,其实用html5和css3构建的app和page没啥区别,web page也很容易转换成native的app,通过phoneGap就可以了,phoneGap所做的就是在一个native的app内嵌入了一个类似chrome的浏览器,并且创建了一个桥接,从而直接去写web app就可以了,就像这个slide的标题写的一样“HTML5 is the Future of Mobile, PhoneGap Takes You There Today”,你的app可以在5个以上的平台上运行,使用的技术是你所熟悉的html/js/css,还等什么,赶快看看它的文档实践一下吧。