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

[经验分享] LVS 安装配置与错误分析

[复制链接]

尚未签到

发表于 2019-1-2 13:46:53 | 显示全部楼层 |阅读模式
  一.背景描述   
某大型商业网站由于业务量的发展非常迅速,目前的网站架构根本无法缓解用户访问压力及单点故障。急需一套高可用的负载均衡集群解决方案www.linux .com(IT运维专家网)根据这家商业网站在的状况,部署了一套负载均衡及高可用的集群方案及相关优化,项目实施以后该商业网站得WEB压力得到了很好的解决,访问速度大幅度提升
  二、需求分析及参考网页
  1>用户可以访问HTTP://VIP 去访问WEB1 网站,或访问WEB2 的网站。WEB1与WEB2 构成负载均衡
  即,当WEB1 宕机仍然可以访问 WEB2网站。
  2>要求更高的可用性,即当MASTER宕机时 BACKUP也可作为取代MASTER的位置位置主服务器
  3>图形日志网页分析监控
  http://ssmax.net/archives/515.html
  http://www.6curl.com/ipvsadm-heartbeat-ldirecrtord/
  http://www.docin.com/p-48664611.html
  http://bbs.linuxtone.org/thread-1535-1-1.html
  http://www.howtoforge.com/high_availability_loadbalanced_apache_cluster_p4
  http://net.chinaunix.net/8/2008/10/04/1280982.shtml
  http://www.dirtysea.com/viewthread.php?tid=1164
  http://blog.sina.com.cn/s/blog_65d209980100hlnu.html
  http://salogs.com/author/admin/page/12/
  三.拓扑结构:
  本实验是建立 一个4层服务器。一个2台WEB 服务器。2台 集群服务器,再加一台客户端
  MASTER 与BACKUP 的ETH1作为心跳网卡。

  四、安装配置
  Ipvsadm 安装
  tar zxf ipvsadm-1.24.tar.gz   
cd ipvsadm-1.24/   
make   
make install
  编译安装libnet
  tar zxf libnet-1.1.2.1.tar.gz   
cd libnet   
./configure     
make   
make install
  编译安装mailtools
  tar zxf MailTools-2.04.tar.gz   
cd MailTools-2.04   
perl Makefile.PL     
make   
make test   
make install
  编译安装heartbeat和ldirecrtord,他两在一起
  tar jxf Heartbeat-Stats*.1.2.4.tar.gz
  ./ConfigureMe configure   
make     
make install
  MASTERBACKUP REALSERVER 修改Vim /etc/sysctl.con

  在MASTER 和 BACKUP修改vim /etc/hosts

  vi ha.cf
  debugfile /var/log/ha-debug   
logfile /var/log/ha-log                             日志文件的路径   
logfacility local0   
keepalive 2                                         心跳检测的平率为2秒一次   
deadtime 30                                         如果30秒内没有相应心跳就做切换   
warntime 10                                         指明心跳的延时为10秒做警告记录一条日志,没有其他动作   
initdead 120                                        这个值设置成deadtime的两倍就可以了   
udpport 694                                         数据通信的端口   
bcast eth1                              eth1为心跳工作接口   
ucast eth1 192.168.1.3                              检测对端心跳接口的地址   
auto_failback on                                    当主节点回复后,自动切换   
node    MASTER                                主控机计算机名 //主控机的在前面   
node BACKUP                                  备用机计算机名 //备用机的在后面   
ping 192.168.72.1                                  检测网络是否正常,可以设置成网关地址   
respawn root /usr/lib/heartbeat/ipfail              ipfail文件的路径   
apiauth ipfail gid=root uid=root                    启用ipfail进程的用户是root
  vi haresources

  vi ipvs
  引用
  ipvs   
#!/bin/sh   
VIP=192.168.72.8   
RIP1=192.168.72.9   
RIP2=192.168.72.10   
. /etc/rc.d/init.d/functions   
case "$1" in   
    start)   
        echo " start LVS  "   
#      # set the Virtual  IP Address   
       /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up   
#       /sbin/route add -host $VIP dev eth0:1   
       /sbin/ipvsadm -C   
      /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   
        ;;   
    stop)   
        echo "close LVS Director"   
        /sbin/ipvsadm -C   
        ;;   
    *)   
        echo "Usage: $0 {start|stop}"   
        exit 1   
esac
  vi authkeys
  
  配置ldirecrtord.cf
  checktimeout=3                        检测超时   
checkinterval=1                       检测间隔   
autoreload=yes                        从新载入客户机   
logfile="/var/log/ldirectord.log"     日志路径   
logfile="local0"   
quiescent=no   
virtual=192.168.72.8:80               VIP地址监听80端口   
real=192.168.72.9:80 gate     真机IP地址和端口 路由模式   
real=192.168.72.10:80 gate   
  fallback=127.0.0.1:80 gate   
service=http                  服务是http   
request="test.html"           这个文件一定要在real的web目录中存在,并且能够正常访问的,ipvs通过它来判断客户端是否存活   
receive="test"                文件内容一定要有出现,否则无法检测到 REAL SERVER   
scheduler=rr                  
protocol=tcp                  
   checktype=negotiate   
   checkport=80
  real不需要安装任何软件,我这里从网上找了一个脚本效果还不错   
vi /etc/rc.d/init.d/real.sh
  #!/bin/bash   
#description : start realserver   
VIP=192.168.72.8   
/etc/rc.d/init.d/functions   
case "$1" in   
start)   
echo " start LVS of REALServer"   
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up   
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   
;;   
stop)   
/sbin/ifconfig lo:0 down   
echo "close LVS Directorserver"   
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   
;;   
*)   
echo "Usage: $0 {start|stop}"   
exit 1   
esac

  安装RRDTOOL 和LVS-RRD 源码包:
  配置如下:
  (1).开启LVS director 的apache,配置相关参数,注意端口一定不能为80,我这里修改为9160。指定DocumentRoot 为 "/data/web"   
(2).下载lvs_rrd软件。下载地址:lvs-rrd-v0.7.tar.gz   
(3).将lvs-rrd-v0.7.tar.gz解压后将文件夹复制到/data/web/目录下并更名为lvs   
(4).配置lvs.rrd.update文件   
RRDTOOL="/usr/bin/rrdtool"   
IPVSADM="/sbin/ipvsadm"   
WORKDIR="/data/web/lvs"
  配置graph-lvs.sh   
WORKDIR="/data/web/lvs"   
RRDTOOL="/usr/bin/rrdtool"   
GRAPHS="$WORKDIR/graphs"   
WEBPATH="/lvs/graphs"
  这两个文件根据自己的情况设置一下就可以了。
  (5). 将/data/web/lvs/graphs目录修改为apache可读可写。   
# chown apache.apache /data/web/lvs/graphs -R   
(6).将收集信息的脚本添加到计划任务中   
# crontab -e   
* * * * * /data/web/lvs/lvs.rrd.update 2> /dev/null > /dev/null
  (7).等1分钟后,看lvs目录中是否生成了以rrd为扩展名的文件。如果有的话就可以启动apache通过http://ipaddress:9160/lvs/查看lvs的状态了。如下图:

  五.错误的分析
  libipvs.c: In function ‘ipvs_strerror’:   
libipvs.c:357: error: ‘ipvs_get_service’ undeclared (first use in this function)   
make[1]: *** [libipvs.o] Error 1   
make[1]: Leaving directory `/usr/local/src/software/ipvsadm-1.24/libipvs'   
make: *** [libs] Error 2
  在编译之前漏了做一个符号链接:
  因为编译时要用kernel-source,而Makefile文件设置到kernel-source路径是/usr/src/linux
  ln -s /usr/src/kernels/2.6.18-92.el5-i686/ /usr/src/linux
  resolving-way:
  ln -s /usr/src/kernels/2.6.18-92.el5-i686/ /usr/src/linux
  make&&make install
  onfigure: error: Core development headers were not found
  See `config.log' for more details.
  ./bootstrap exiting due to error (sorry!).
  安装 Cluster Glue 1.0.5: glue-1.0.5.tar.bz2
  eartbeat: udpport setting must precede media statementsheartbeat[25960]: 2008/02/29_18:20:31 ERROR: Invalid user id name [hacluster]   
heartbeat[25960]: 2008/02/29_18:20:31 ERROR: Bad uid list [hacluster]   
heartbeat[25960]: 2008/02/29_18:20:31 ERROR: Invalid apiauth directive [ipfail uid=hacluster]   
heartbeat[25960]: 2008/02/29_18:20:31 info: Syntax: apiauth client [uid=uidlist] [gid=gidlist]   
heartbeat[25960]: 2008/02/29_18:20:31 info: Where uidlist is a comma-separated list of uids,   
heartbeat[25960]: 2008/02/29_18:20:31 info: and gidlist is a comma-separated list of gids   
heartbeat[25960]: 2008/02/29_18:20:31 info: One or the other must be specified.   
heartbeat[25960]: 2008/02/29_18:20:31 ERROR: Invalid user id name [hacluster]   
heartbeat[25960]: 2008/02/29_18:20:31 ERROR: Bad uid list [hacluster]   
heartbeat[25960]: 2008/02/29_18:20:31 ERROR: Invalid apiauth directive [ccm uid=hacluster]   
heartbeat[25960]: 2008/02/29_18:20:31 info: Syntax: apiauth client [uid=uidlist] [gid=gidlist]   
heartbeat[25960]: 2008/02/29_18:20:31 info: Where uidlist is a comma-separated list of uids,   
heartbeat[25960]: 2008/02/29_18:20:31 info: and gidlist is a comma-separated list of gids   
heartbeat[25960]: 2008/02/29_18:20:31 info: One or the other must be specified.
  另外启动heartbeat需要hacluster用户,并且属组是haclient,这个用户和组楼主都没有建立。
  [root@web1 ~]# service heartbeat start    启动heartbeat服务   
Starting High-Availability services:   
2009/04/24_07:35:15 INFO: Resource is stopped   
                                                           [FAILED]   
heartbeat: udpport setting must precede media statementsheartbeat[3908]: 2009/04/24_07:35:16 ERROR: Bad permissions on
  keyfile [/etc/ha.d/authkeys], 600 recommended.   
heartbeat[3908]: 2009/04/24_07:35:16 ERROR: Authentication configuration error.   
heartbeat[3908]: 2009/04/24_07:35:16 ERROR: Configuration error, heartbeat not started.
  [root@web1 ~]# chmod 600 /etc/ha.d/authkeys    此处需要修改下authkeys文件的权限为600
  chmod 600 /etc/ha.d/authkeys    此处需要修改下authkeys文件的权限为600
  有可能不会出错在libltdl.so.3
  Cp /usr/local/lib/libltdl.so.3 /usr/lib/
  > We upgraded ldirectord last week to heartbeat-ldirectord.x86_64     
> > 2.1.4-11.el5 from the Fedora EPEL repository. After the upgrade we     
> started     
> > seeing error messages like,     
> >     
> > [Tue May 4 11:09:36 2010|www.228|3608] system(/sbin/ipvsadm -e -t     
> > 216.246.59.228:80 -r 172.20.1.121:80 -m -w 20) failed: No child     
> processes     
> > [Tue May 4 11:09:36 2010|www.228|3608] Restored real server:     
> > 172.20.1.121:80 (216.246.59.228:80) (Weight set to 20)
  WARN: nodename ha uuid changed to ha2   
ERROR: should_drop_message: attempted replay attack
  可能原因:ha和ha2的uuid改变引起,可能ha2是通过VMware克隆复制方式产生的或hostname设置在安装heartbeat之后
  解决方案:让uuid重新生成,可以先卸载heartbeat,删除/var/lib/heartbeat目录(uuid文件就在这个目录下,该目录在卸载时不被删除,需手动删除,如果不手动删除,重新安装还会使用原来uuid)
  如果weight查看E已经是0了,客户机访问会提示错误页面。
  解决办法:修改ldirectord.cf中quiescen ,值肯定是YES,再设置一条:
  echo 1 > /proc/sys/net/ipv4/vs/expire_nodest_conn关闭RS失效后的连接
  或者vi /etc/sysctl.conf
  expire_nodest_conn = 1
  保存后sysctl –p刷新生效。
  或者直接让uiescen值为no
  1、 uiescen值为no:
  重启ldirectord进程,LVS的活动主机使用ipvsadm –Ln查看策略表,已经没有E主机。只有F主机。客户机资源呈F主机的网页。
  EBUG2: Disabled server=192.168.1.176   
DEBUG2: Running system(/sbin/ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.175:80 -g -w 0)   
Running system(/sbin/ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.175:80 -g -w 0)   
DEBUG2: Quiescent real server: 192.168.1.175:80 ( x 192.168.1.200:80) (Weight set to 0)   
Quiescent real server: 192.168.1.175:80 ( x 192.168.1.200:80) (Weight set to 0)
  在面的实例中ipvsadm用到的几个参数含义如下:   
-A 增加一个虚拟服务,该服务由协议、IP地址和端口号组成,例如:   
-A -t 202.99.59.110:80 (增加一格虚拟服务,其协议(-t表示tcp,-u表示udp)为TCP、IP为202.99.59.110、端口号为80。   
-s 指定服务采用的算法,常用的算法参数如下:


  • rr          轮叫(Round Robin)      
    调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务 器,而不管服务器上实际的连接数和系统负载。

  • wrr   加权轮叫(Weighted Round Robin)      
    调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

  • lc   最少链接(Least Connections)      
    调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

  • wlc   加权最少链接(Weighted Least Connections)      
    在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

  • lblc    基于局部性的最少链接(Locality-Based Least Connections)      
    "      
    基于局部性的最少链接"      
    调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器      
    是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务      
    器,将请求发送到该服务器。

  • lblcr    带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)      
    "      
    带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目      
    标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器      
    组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一台      
    服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程      
    度。

  • dh    目标地址散列(Destination Hashing)      
    "目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

  • sh    源地址散列(Source Hashing)      
    "源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
  /sbin/ipvsadm -a -t 192.168.1.110:http -r 192.168.1.12 -g -w 1   
-a 表示往一个服务内增加一个real server   
-r 指定real server的IP地址   
-w 表示权重   
-g 表示使用DR方式,-m表示NAT方式,-i表示tunneling方式。
  server: 192.168.50.12:443 (2 x 192.168.50.10:443)   
Feb  7 00:03:18 weblive1 ldirectord[1811]: Added real server: 192.168.50.12:443 (1 x 192.168.50.10:443) (Weight set to 1)     
Feb  7 00:03:22 weblive1 ldirectord[1811]: Deleted real server: 192.168.50.12:80 (2 x 192.168.50.10:80)     
Feb  7 00:03:23 weblive1 ldirectord[1811]: Added real server: 192.168.50.12:80 (1 x 192.168.50.10:80) (Weight set to 1)     
Feb  7 00:03:28 weblive1 ldirectord[1811]: Deleted real server: 192.168.50.12:80 (2 x 192.168.50.10:80)     
Feb  7 00:03:29 weblive1 ldirectord[1811]: Added real server: 192.168.50.12:80 (1 x 192.168.50.10:80) (Weight set to 1)     
Feb  7 00:03:34 weblive1 ldirectord[1811]: Deleted real server: 192.168.50.12:80 (2 x 192.168.50.10:80)     
Feb  7 00:03:35 weblive1 ldirectord[1811]: Added real server: 192.168.50.12:80 (1 x 192.168.50.10:80) (Weight set to 1)




运维网声明 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-658696-1-1.html 上篇帖子: LVS介绍、LVS调度算法、LVS NAT模式搭建 下篇帖子: extmail集群的邮件负载均衡方案 [lvs dns postfix]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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