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

[经验分享] LVS+Keepalived

[复制链接]

尚未签到

发表于 2015-11-20 07:57:19 | 显示全部楼层 |阅读模式
  LVS
       lvs是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。 目前有三种IP负 载均衡技术(VS/NAT、VS/TUN和VS/DR);八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
Keepalived
       Keepalived 是运行在lvs 之上,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败 切换,提高系统的可用性
  一、环境(一主两从,两从做集群)
Master:CentOS5.8   64位
               MySQL 5.5.17
               192.168.3.28
  LVS-VIP:CentOS5.8 64位
                  ipvsadm-1.24.tar.gz, keepalived-1.1.19.tar.gz
                  192.168.3.119
  Slave1/node1:CentOS5.8   64位
                         MySQL 5.5.17
                        192.168.3.108
  Slave2/node2:CentOS5.8   64位
                          MySQL 5.5.17
                          192.168.3.74
二、部署
  1、下载所需软件
http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
  2、安装LVS
――检查一下系统内核
安装之前,首先检查一下系统内核是否支持LVS的IPVS模块;自Linux 2.6开始,系统内核完全内置了LVS的各个模块。
# modprobe -l|grepipvs
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs.ko
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs_dh.ko
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs_lc.ko
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs_nq.ko
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs_rr.ko
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs_sed.ko
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs_sh.ko
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
/lib/modules/2.6.18-308.el5/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
看到如上输出信息,则表明系统内核默认支持IPVS模块。
  ――安装依赖包
由于是源码包安装,所以编译时需要打上如下依赖包。
# rpm -q kernel-headers glibc-headers glibc-devel libgomp gcc libstdc++-devel gcc-c++
检查所需的依赖包是否安装,若未安装,则安装之。
# rpm -ivh kernel-headers-2.6.18-308.el5.x86_64.rpm
# rpm -ivh glibc-headers-2.5-81.x86_64.rpm
# rpm -ivh glibc-devel-2.5-81.*
# rpm -ivh libgomp-4.4.6-3.el5.1.*
# rpm -ivh gcc-4.1.2-52.el5.x86_64.rpm
# rpm -ivh libstdc++-devel-4.1.2-52.el5.*
# rpm -ivhgcc-c++-4.1.2-52.el5.x86_64.rpm
  ――编译安装
# tar zxvf ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
# make
# make install
  安装后,执行# ipvsadm --help命令,若能看到帮助信息,则说明IPVS安装成功。
  说明:Make编译期间,若提示“libipvs.h:14:23: error: net/ip_vs.h: No such file or directory”错误,则是由于编译程序找不到对应的内核造成,做个软连接即可:
# ln -s /usr/src/kernels/2.6.18-308.el5-x86_64/ /usr/src/linux
若/usr/src/kernels/目录下没有对应的内核文件,则是因为没有安装的kernel-devel包的缘故。

  3、安装Keepalived
  ――安装依赖包
编译安装Keepalived,需要打上如下开发包,首先检查这些包是否安装,若未安装则安装值。
# rpm -q e2fsprogs-devel keyutils-libs-devellibsepol-devellibselinux-devel krb5-devel zlib-developenssl-devel
  # rpm -ivh e2fsprogs-devel-1.39-33.el5.*
# rpm -ivh keyutils-libs-devel-1.2-1.el5.*
# rpm -ivh libsepol-devel-1.15.2-3.el5.*
# rpm -ivh libselinux-devel-1.33.4-5.7.el5.*
# rpm -ivh krb5-devel-1.6.1-70.el5.*
# rpm -ivh zlib-devel-1.2.3-4.el5.*
# rpm -ivh openssl-devel-0.9.8e-22.el5.*
  ――编译安装
# tar zxvf keepalived-1.1.19.tar.gz
# cd keepalived-1.1.19
# ./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.18-308.el5-x86_64/
  说明:
--sysconf :指定了Keepalived配置文件的安装路径,即/etc/Keepalived/Keepalived.conf;
--with-kernel-dri :指定使用内核源码中的头文件,即include目录,该参数很重要,只有使用LVS时才用此参数。

# make
# make install
# ln -s /usr/local/sbin/keepalived /sbin/
  安装后,执行命令# keepalived –help,若看到帮助信息,说明Keepalived安装成功。
说明:若configure时通过--prefix指定安装路径,如/usr/local/keepalived,则需执行如下操作,目的是分别将Keeplalived的工具命令、配置文件、服务启动脚本拷贝到系统相应目录下。
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
  4、配置Keepalived
Keepalived成功安装后,默认的配置文件为/etc/keepalived/keepalived.conf,一个完整的配置文件应包括:全局定义、vrrp实例定义、虚拟服务器定义三个部分,分别说明如下:
  # vi keepalived.conf
! Configuration File for keepalived
#全局定义部分
  global_defs {
notification_email {
907204401@qq.com        #设置报警邮件地址,每行一个,可设置多个。注意,若要开启邮件报警,需开启本机sendmail服务
   }
notification_email_fromkeepalived@localhost  #设置邮件的发送地址
smtp_server 127.0.0.1      #设置smtp server地址
smtp_connect_timeout 30      #设置连接smtp server的超时时间
router_id MySQL_LVS      #表示运行keepalived服务器的一个标识,发邮件时显示在邮件主题中的信息
}
  #vrrp实例定义部分
  vrrp_instance VI_1 {
state MASTER        #指定keepalived的角色,MASTER表示为主服务器,BACKUP表示为备服务器
interface eth0         #指定HA监测网络的接口
virtual_router_id 51       #虚拟路由标识,是一个数字,同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下,MASTER和BACKUP必须是一致的
priority 100        #定义优先级,数字越大,优先级越高。在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
advert_int 1        #设定MASTER和BACKUP负载均衡器之间同步检查的时间间隔,单位:秒
authentication {         #设定验证类型和密码
auth_type PASS       #设定验证类型,主要有PASS和AH两种
auth_pass 1111        #设置验证密码,在一个vrrp_instance下,MASTER和BACKUP须使用相同密码
    }
virtual_ipaddress {        #设置虚拟IP地址,每行一个,可设置多个
        192.168.3.40
    }
}
  #虚拟服务器定义部分
  virtual_server 192.168.3.40 3306 {   #设置虚拟服务器,指定虚拟IP和服务端口,IP与端口之间用空格隔开;本例Real Server用于运行MySQL从库,所以此处指定MySQL的服
  #务端口:3306
delay_loop 6      #设置运行情况检查时间,单位:秒
lb_algo lc       #设置负载调度算法,本例采用wlc,有4种常用算法:rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接),本例采用lc算法。
lb_kind DR       #设置LVS的负载均衡机制,有NAT,TUN,DR三种,本例采用DR调度模式,这是性能最好的。
nat_mask 255.255.255.0
#persistence_timeout 50    #会话保持时间,单位:秒。该选项对动态网页非常有用,为集群系统中的session共享提供了一个很好的解决方案。有了这个会话保持功能,
                                            #用户的请求会一直分发到某个服务器节点,直到超过这个会话的保持时间。需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,
                              #用户在操作动态页面时,如果在50秒内没有执行任何操作,那么接下来的操作会被分发到另外节点,但如果用户一直在操作动态页面,则不受此时间限制。
    protocol TCP                                  #指定转发协议类型,有TCP和UDP两种
real_server 192.168.3.108 3306 {               #配置服务节点1,需要指定real server的真实IP地址和端口,IP和端口之间用空格隔开
        weight 100                            #配置服务器节点的权值,权值大小用数字标识,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,
  #如:为性能高的服务器设置较高的权        值,为性能较低的服务器设置相对较低的权值,以便合理利用和分配系统资源。
        TCP_CHECK {                     #real server的状态检测设置部分,单位:秒
connect_timeout    3                   #表示3秒无响应超时
nb_get_retry       3                      #表示重试次数
delay_before_retry 3                  #表示重试的间隔
        }
    }
real_server 192.168.3.74 3306 {             #配置服务器节点2
weight 100
        TCP_CHECK {
  connect_timeout    3
  nb_get_retry       3
  delay_before_retry 3
        }
    }
}  
  说明:在配置keepalived.conf时,需特别注意配置文件的语法格式,因为keepalived在启动时并不检测配置文件的正确性,即使没有配置文件,也可照样启动。缺省情况下,Keepalived启动时会查找/etc/keepalived/keepalived.conf配置文件。
  5、编写脚本 lvs_real.sh
  #!/bin/bash
# description: Config realserver
  SNS_VIP=192.168.3.40
  /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"
        ;;
  status)
  islothere='/sbin/ifconfig lo:0 |grep $SNS_VIP'
   if test -z "$islothere" ; then
      echo "LVS_VIP is not Start for Real Server"
   else
      echo "LVS_VIP is Running on Real Server"
   fi
  ;;
  *)
        echo "Usage: $0 {start|status|stop}"
        exit 1
esac


  配置完成后,为服务lvsrs添加可执行权限,然后就可启动或关闭lvsrs了。启动后,可通过ifconfig命令查看VIP是否成功添加;注意此时VIP即使成功添加,也是ping不通的。
  6、开启服务
  sh lvs_real.sh start
service keepalived start
  这是就可以ping 通VIP了
  
7、拷贝lvs_real.sh 到每个节点
scp lvs_real.sh root@192.168.3.108:/etc/init.d
scp lvs_real.sh root@192.168.3.74:/etc/init.d
  8、配置各项服务开启自动启动
lvs
cp /root/lvs_real.sh /etc/init.d/lvs_real.sh
vi /etc/init.d/lvs_real.sh
加入 # chkconfig: 2345 64 36
chkconfig --add lvs_real.sh
chkconfig lvs_real.sh on
chkconfig keepalived on
  
节点配置:
vi /etc/init.d/lvs_real.sh
加入 # chkconfig: 2345 64 36
chkconfig --add lvs_real.sh
chkconfig lvs_real.sh on
  service iptables stop
chkconfig iptables off
  三、测试
  本方案是由一台负载调度器(Director Server)和两台Real Server组成的负载均衡集群,由LVS软件实现。正常情况下,用户请求通过VIP到达Director Server,然后由其根据负载均衡算法选择一台Real Server响应用户;当监测到某一台Real Server故障时,则将其剔除集群,不再提供服务,待恢复正常后,自动加入继续提供服务。
  ――负载均衡功能
在一台客户端机器上并发创建客户端连接,以模拟用户请求:
# mysqlslap -uroot -proot123 -h192.168.3.40 -P3306 --concurrency=100 --iterations=5 --create-schema='information_schema' --query='select count(*) from processlist;' --number-of-queries=10000 --debug-info

  在此期间,查看两台Slave从库上的连接数:
# ipvsadm --list
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost:mysql lc persistent 50
  -> localhost:mysql              Route   100    48         154      
  -> localhost:mysql              Route   100    1          0         
[iyunv@localhost ~]# ipvsadm --list
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost:mysql lc persistent 50
  -> localhost:mysql              Route   100    49         253      
  -> localhost:mysql              Route   100    1          0         
[iyunv@localhost ~]# ipvsadm --list
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost:mysql lc persistent 50
  -> localhost:mysql              Route   100    61         341      
  -> localhost:mysql              Route   100    1          0         
[iyunv@localhost ~]# ipvsadm --list
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost:mysql lc persistent 50
  -> localhost:mysql              Route   100    32         370      
  -> localhost:mysql              Route   100    1          0  
  从两台Slave从库上查询,每台从库均创建了多个连接,连接是动态变化的,所以连接数并不是绝对平均。
  ――故障转移功能
将node1上的MySQL实例关闭,模拟此节点故障,然后查看主Director Server上日志
[iyunv@localhost ~]# service mysql stop
Shutting down MySQL...                                     [  OK  ]
  [iyunv@node1 ~]# tail /var/log/messages
Apr  4 00:01:22 localhost Keepalived_healthcheckers: TCP connection to [192.168.3.108:3306] failed !!!
Apr  4 00:01:22 localhost Keepalived_healthcheckers: Removing service [192.168.3.108:3306] from VS [192.168.3.40:3306]
  
日志显示,Keepalived检测到192.168.3.108:3306端口连接失败,则将其从VS [192.168.3.40:3306]中剔除了;此时若再次连接MySQL,会发现所有连接均在192.168.3.74上。
将node1上的MySQL实例重新启动,模拟节点恢复,然后查看主Director Server上日志
[iyunv@localhost ~]# service mysql start
Starting MySQL..                                           [  OK  ]
  [iyunv@node1 ~]# tail /var/log/messages
Apr  4 00:06:52 localhost Keepalived_healthcheckers: TCP connection to [192.168.3.108:3306] success.
Apr  4 00:06:52 localhost Keepalived_healthcheckers: Adding service [192.168.3.108:3306] to VS [192.168.3.40:3306]
  可见,Real Server恢复后,Keepalived可立即监测到,此时自动将其添加到LVS集群中。



运维网声明 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-141320-1-1.html 上篇帖子: Keepalived+Tengine实现高可用集群 下篇帖子: 通过Keepalived实现Redis Failover自动故障切换功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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