shangban 发表于 2018-12-29 11:20:52

[配置应用]LVS+keepalived负载均衡CentOS5.6环境下布署(32位)V2

  [配置应用]LVS+keepalived负载均衡CentOS5.6环境下布署(32位)V2版http://img1.运维网.com/attachment/201106/144007272.gif
  系统环境:CentOS 5.6 32位(最小安装) 架构图如上图
试过在64位时编译会出错,提示找不到一些内核库文件,文件名称含了64字样的缘故,编译有问题,逐一修改修改原安装包很麻烦。还不知道会有其他未知BUG。
关键点:keepalived 是运行在LVS基础上的,LVS 安装ipvsadmin #yum install ipvsadmin (省去编译版本配对问题)
很多朋友使用编译安装不成功,是由于ipvsadmin的版本跟你使用的linux内核不一致。
首先请查看自己 Linux 操作系统内核的版本   命令: uname -a    命令: cat /proc/version 命令:lsb_release -a
  下面看我怎么编译安装的。(linux应用中编译安装是我力荐)
  下载软件ipvsadm
安装ipvsadm。Ipvsadm的官方下载地址为 http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz,解压后先做一个链接文件,把目录/usr/src/kernels/2.6.18-8.el5-i686/ 链接为/usr/src/linux,不这样做的话,执行./configure脚本将报错。运行命令 ln –s /usr/src/kernels/2.6.18-8.el5-i686 /usr/src/linux 做好链接,再运行不带参数的脚本 ./configure,然后执行”make;make install”完成安装
  下载后,安装ipvsadmin
编译时候报 make: *** Error 1 错误
  但是下了ipvsadm后编译出了问题:
解决办法可能不只一种;我是用的下面的办法搞定的:
ln -s /usr/src/kernels/2.6.x-xx.EL-i686/ /usr/src/linux
  cd ipvsadm-1.24
  make && make install
  ipvsadmin -v 应该能看到如下信息:
# ipvsadm -v
ipvsadm v1.24 2005/12/10 (compiled with popt and IPVS v1.2.0)
  说明编译安装成功!

  另外注意 keepalived 在Linux下的(VRRP)虚拟路由冗余协议 ,keepalived采用VRRP机制,那么就会涉及负载均衡服务器连接的路由器(交换机)
VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。
实际使用中,如果你连接的使用的路由器是傻瓜型的话,可以忽略这个问题。
如果你用是智能路由器,设置了规则的话,那就要注意了,一些规则会将VRRP发出的状态检测包,当做病毒屏蔽掉,最后导致的结果是keepalived    负载均衡器之间的失败切换failover,是通过VRRPv2(Virtual Router Redundancy Protocol) stack实现的。
还可能导致不能检测后端真实服务器的存活状态(检测web服务器的状态)。
  简单知道
1.keepalived 通过对服务器池对象的健康检查,实现对失效机器/服务的故障隔离 (官方专用名词“Checkers”负责真实服务器的健康检查healthchecking)
2.负载均衡器之间的失败切换failover,是通过VRRPv2(Virtual Router Redundancy Protocol) stack实现的。
不就是(LVS-DR,LVS-NAT,LVS-TUN)3种模式!
  VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。
  测试环境 :
lvs-master:192.168.9.201 (主)
lvs-backup:192.168.9.202 (备)
vip:192.168.9.200      (虚拟ip)
web1:192.168.9.203       (后端真实WEB服务器1)
web2:192.168.9.204       (后端真实WEB服务器2)
netmask:255.255.255.0    (掩码)
gateway:192.168.9.1      (网关)
  网络拓扑:详细见“LVS集群的体系结构,构建强壮的体系结构里负载均衡层、真实服务器层、后端共享存储层都是相辅相成”文章 如图

  echo "============================ 更新系统时间 ======================"
yum install -y ntp
ntpdate time.nist.gov
echo "00 01 * * * /usr/sbin/ntpdate time.nist.gov" /etc/crontab
  echo “========================= 安装ipvsadm、keepalived ==================”
# cd /usr/local/src
# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
# wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz
# ln -sv /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux
# tar -zxvf ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
# make;make install
# cd ..
# tar -zxvf keepalived-1.1.17.tar.gz
# cd keepalived-1.1.17
# ./configure
configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files.
解决办法:
# yum -y install openssl-devel
# ./configure
# make;make install
编译的时候出现这个提示,说明keepalived和内核结合了,如果不是这样的,需要加上这个参数./configure --with-kernel-dir=/kernel/path
Keepalived configuration
------------------------
Keepalived version       : 1.1.17
Compiler               : gcc
Compiler flags         : -g -O2
Extra Lib                : -lpopt -lssl -lcrypto
Use IPVS Framework       : Yes
IPVS sync daemon support : Yes
Use VRRP Framework       : Yes
Use LinkWatch            : No
Use Debug flags          : No
  echo “======================= 配置keepalived ===========================”
#cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
#cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
#mkdir /etc/keepalived
#cp /usr/local/sbin/keepalived /usr/sbin/
# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
      jimmyli@jimmyli.blog.运维网.com
   }
   notification_email_from jimmyli@jimmyli.blog.运维网.com#http://jimmyli.blog.运维网.com/
   smtp_server jimmyli.blog.运维网.com
# smtp_connect_timeout 30
   router_id LVS_DEVEL
}

# VIP1
vrrp_instance VI_1 {
    state MASTER             #备份服务器上将MASTER改为BACKUP   
    interface eth0
    lvs_sync_daemon_inteface eth0
    virtual_router_id 51
    priority 100    # 备份服务上将100改为90
    advert_int 5
    authentication {
      auth_type PASS
      auth_pass 1111
    }
    virtual_ipaddress {
      192.168.9.200   
      #(如果有多个VIP,继续换行填写.)
    }
}

virtual_server 192.168.9.200 80 {
    delay_loop 6                  #(每隔6秒查询realserver状态)
    lb_algo wlc                  #(lvs 算法)
    lb_kind DR                  #(Direct Route)
    persistence_timeout 60      #(同一IP的连接60秒内被分配到同一台realserver)
    protocol TCP                #(用TCP协议检查realserver状态)

    real_server 192.168.9.203 80 {
      weight 100               #(权重)
      TCP_CHECK {
      connect_timeout 10       #(10秒无响应超时)
      nb_get_retry 3
      delay_before_retry 3
      connect_port 80
      }
    }
    real_server 192.168.9.204 80 {
      weight 100
      TCP_CHECK {
      connect_timeout 10
      nb_get_retry 3
      delay_before_retry 3
      connect_port 80
      }
   }
}
#service keepalived start|stop
# chkconfig –level 2345 keepalived on
  echo “====================== 配置realserver =========================”
# vi /root/lvs_real.sh
#!/bin/bash
#http://jimmyli.blog.运维网.com/
#Config realserver
  SNS_VIP=192.168.9.200

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

case "$1" in
start)
       /sbin/ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_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 >/dev/null 2>&1
       echo "RealServer Start OK"

       ;;
stop)
       /sbin/ifconfig lo:0 down
       /sbin/route del $SNS_VIP >/dev/null 2>&1
       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 "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

exit 0
  # chmod +x /roo/lvs_real.sh
# /root/lvs_real.sh start
# ifconfig

# echo “/root/lvs_real.sh start” >> /etc/rc.local
  
echo “===================== 测试LVS+keepalived ========================”
#LVS_master、LVS_backup上开启keepalived,LVS_master先绑定VIP
#http://jimmyli.blog.运维网.com/
LVS_master:

  LVS_backup:

  #解析域名,测试访问

  #测试关闭LVS_master,短暂的掉包后,LVS_backup马上接替工作

  LVS_backup接替LVS_master绑定VIP

  LVS_backup负责转发

  LVS_master重启完成后,就会自动接回控制权,继续负责转发

  #测试关闭其中一台realserver

  通过上面测试可以知道,当realserver故障或者无法提供服务时,负载均衡器通过健康检查自动把失效的机器从转发队列删除掉,实现故障隔离,保证用户的访问不受影响
  #重启被关闭的realserver

当realserver故障恢复后,负载均衡器通过健康检查自动把恢复后的机器添加到转发队列中
  
实际生产环境中,keepalived是非常稳定的,并且能够承受巨量并发数。


文章中没有涉及到后端真实服务器的架构配置,我认为一个完整的高性能WEB架构应该,后端也是重中之重的,完整的一部分,必备可少。欢迎朋友一起交流,讨论。扣扣:柒⑥柒陆叁⑤叁伍



页: [1]
查看完整版本: [配置应用]LVS+keepalived负载均衡CentOS5.6环境下布署(32位)V2