如果单台LVS发生突发情况,例如宕机、发生不可恢复现象,会导致用户无法访问后端所有的应用程序。避免这种问题可以使用HA故障切换,也就是有一台备用的LVS,主LVS 宕机,LVS VIP自动切换到从,可以基于LVS+Keepalived实现负载均衡及高可用功能,满足网站7x24小时稳定高效的运行。

Keepalived基于三层检测(IP层,TCP传输层,及应用层),主要用于检测WEB服务器的状态,如果有一台WEB服务器死机,或工作出现故障,Keepalived检测到并将有故障的WEB服务器从系统中剔除;

当后端一台WEB服务器工作正常后Keepalived自动将WEB服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的WEB服务器。

需要注意,如果使用了keepalived.conf配置,就不需要再执行ipvsadm  -A命令去添加均衡的realserver命令了,所有的配置都在keepalived.conf里面设置即可

LVS+Keepalived负载均衡高可用集群架构适用于千万级并发网站,在互联网企业得到大力的应用,如下为完整LVS+Keepalived企业级配置方法和步骤:

一、Ipvsadm编译安装

基于yum安装

  1. yum install -y ipvsadm*

基于源码安装

  1. wget -c http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
  2. ln -s /usr/src/kernels/2.6.* /usr/src/linux
  3. tar -xzf ipvsadm-1.24.tar.gz
  4. cd ipvsadm-1.24
  5. make
  6. make install

二、 Keepalived安装配置

1)keepalive编译安装

yum install -y keepalived*

  1. cd /usr/src
  2. wget -c http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
  3. tar -xzvf keepalived-1.1..tar.gz
  4. cd keepalived-1.1.
  5. ./configure
  6. make && make install
  7. DIR=/usr/local/
  8. cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
  9. cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/
  10. mkdir -p /etc/keepalived
  11. cp $DIR/sbin/keepalived /usr/sbin/

2)Master上keepalived.conf配置代码:

  1. ! Configuration File for keepalived
  2. global_defs {
  3. notification_email {
  4. wgkgood@.com
  5. }
  6. notification_email_from wgkgood@.com
  7. smtp_server 127.0.0.1
  8. smtp_connect_timeout
  9. router_id LVS_DEVEL
  10. }
  11.  
  12. vrrp_instance VI_1 {
  13. state MASTER
  14. interface ens33
  15. lvs_sync_daemon_inteface ens33
  16. virtual_router_id
  17. priority
  18. advert_int 5 
    nopreempt
  19. authentication {
  20. auth_type PASS
  21. auth_pass
  22. }
  23. virtual_ipaddress {
  24. 192.168.1.15
  25. }
  26. }
  27.  
  28. virtual_server 192.168.1.15 {
  29. delay_loop
  30. lb_algo rr
  31. lb_kind DR
  32. persistence_timeout
  33. protocol TCP
  34.  
  35. real_server 192.168.1.13 {
  36. weight
  37. TCP_CHECK {
  38. connect_timeout
  39. nb_get_retry
  40. delay_before_retry
  41. connect_port
  42. }
  43. HTTP_GET {
  44. url {
  45. path /index.html
  46. digest 922fce4cfdadc6a0774b2eb63e5b1e9c
  47. status_code
  48. }
  49. }
  50. }
  51.  
  52. real_server 192.168.1.14 {
  53. weight
  54. TCP_CHECK {
  55. connect_timeout
  56. nb_get_retry
  57. delay_before_retry
  58. connect_port
  59. }
  60. HTTP_GET {
  61. url {
  62. path /index.html
  63. digest 99e0f897e1cf8971e3ad95885709a5a0
  64. status_code
  65. }
  66. }
  67. }
  68. }

2)Backup上keepalived.conf配置代码:

  1. ! Configuration File for keepalived
  2. global_defs {
  3. notification_email {
  4. wgkgood@.com
  5. }
  6. notification_email_from wgkgood@.com
  7. smtp_server 127.0.0.1
  8. smtp_connect_timeout
  9. router_id LVS_DEVEL
  10. }
  11.  
  12. vrrp_instance VI_1 {
  13. state BACKUP
  14. interface ens33
  15. lvs_sync_daemon_inteface ens33
  16. virtual_router_id
  17. priority
  18. advert_int 5 
    nopreempt
  19. authentication {
  20. auth_type PASS
  21. auth_pass
  22. }
  23. virtual_ipaddress {
  24. 192.168.1.15
  25. }
  26. }
  27.  
  28. virtual_server 192.168.1.15 {
  29. delay_loop
  30. lb_algo rr
  31. lb_kind DR
  32. persistence_timeout
  33. protocol TCP
  34.  
  35. real_server 192.168.1.13 {
  36. weight
  37. TCP_CHECK {
  38. connect_timeout
  39. nb_get_retry
  40. delay_before_retry
  41. connect_port
  42. }
  43. HTTP_GET {
  44. url {
  45. path /index.html
  46. digest 922fce4cfdadc6a0774b2eb63e5b1e9c
  47. status_code
  48. }
  49. }
  50. }
  51.  
  52. real_server 192.168.1.14 {
  53. weight
  54. TCP_CHECK {
  55. connect_timeout
  56. nb_get_retry
  57. delay_before_retry
  58. connect_port
  59. }
  60. HTTP_GET {
  61. url {
  62. path /index.html
  63. digest 99e0f897e1cf8971e3ad95885709a5a0
  64. status_code
  65. }
  66. }
  67. }
  68. }

Master Keepalived配置state状态为MASTER,Priority设置100,Backup Keepalived配置state状态为BACKUP,Priority设置90,转发方式为DR直连路由模式,算采用wrr模式,在LVS BACKUP服务器写入如下配置,需要注意的是客户端的配置要修改优先级及状态:

LVS+keepalived负载均衡主备配置完毕,由于LVS采用DR模式,根据DR模式转发原理,需在客户端realserver绑定VIP。

三、LVS DR客户端配置VIP

客户通过浏览器访问director的VIP,director接收请求,将通过相应的转发方式及算法将请求转发给相应的realserver。在转发的过程中,会修改请求包的目的mac地址,目的IP地址不变。Realserver接收请求,并直接响应客户端。

Director与realserver位于同一个物理网络中,当director直接将请求转发给realserver时,如果realserver检测到该请求包目的IP是VIP而并非自己,便会丢弃,而不会响应。

为了解决这个问题,需在所有Realserver上都配上VIP,保证数据包不丢弃,同时由于后端realserver都配置VIP会导致IP冲突,所以需将VIP配置在lo网卡上,这样限制了VIP不会在物理交换机上产生MAC地址表,从而避免IP冲突。 LVS DR客户端启动Realserver.sh脚本内容如下:

  1. #!/bin/sh
  2. #LVS Client Server
  3. VIP=192.168.33.188
  4. case $ in
  5. start)
  6. ifconfig lo: $VIP netmask 255.255.255.255 broadcast $VIP
  7. /sbin/route add -host $VIP dev lo:
  8. echo "" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  9. echo "" >/proc/sys/net/ipv4/conf/lo/arp_announce
  10. echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
  11. echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
  12. sysctl -p >/dev/null >&
  13. echo "RealServer Start OK"
  14. exit
  15. ;;
  16. stop)
  17. ifconfig lo: down
  18. route del $VIP >/dev/null >&
  19. echo "" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  20. echo "" >/proc/sys/net/ipv4/conf/lo/arp_announce
  21. echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
  22. echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
  23. echo "RealServer Stoped OK"
  24. exit
  25. ;;
  26. *)
  27. echo "Usage: $0 {start|stop}"
  28. ;;
  29. esac

四、LVS负载均衡企业实战排错经验

LVS在企业生产环境中如何去排错呢,遇到问题我们该怎么办呢?LVS使用过程中,会遇到很多问题,如下为LVS故障排错思路。

企业网站LVS+Keepalived+Nginx架构中,突然发现网站www.jfedu.net 部分用户访问巨慢,甚至无法访问,这个问题我们该如何定位呢?

1)  客户端ping  www.jfedu.net ,通过ping返回域名对应的IP是否正常;

2)  如果无法返回IP,或者响应比较慢,定位DNS或者网络延迟问题,可以通过tracert www.jfedu.net测试客户端本机到服务器的链路延迟;

3)登录LVS服务器,ipvsadm  -Ln 查看当前后端web连接信息,显示如下:

  1. [root@LVS-Master keepalived]# ipvsadm -Ln
  2. IP Virtual Server version 1.2. (size=)
  3. Prot LocalAddress:Port Scheduler Flags
  4. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  5. TCP 192.168.1.10: wlc
  6. -> 192.168.1.6: Route
  7. -> 192.168.1.5: Route
  8. -> 192.168.1.4: Route

通过LVS ipvsadm信息,看到LVS 选择的轮训方式为加权最少连接,而网站也是部分无法访问,猜测是其中一台WEB服务器无法访问或者访问巨慢导致,如果单台WEB异常,为什么LVS+keepalived不能将异常的WEB服务器IP异常均衡列表呢?

查看keepalived.conf负载均衡健康检查配置,部分截图如下:

  1. real_server 192.168.1.4 {
  2. weight
  3. TCP_CHECK {
  4. connect_timeout
  5. nb_get_retry
  6. delay_before_retry
  7. connect_port
  8. }
  9. }

通过配置文件发现LVS默认用的是TCP检测方式,只要80端口能通,请求就会被转发到后端服务器。紧接着在LVS服务器使用wget  http://192.168.1.4/ 返回很慢,直至超时,而另外几台Nginx realserver返回正常,查看Nginx 192.168.1.4服务器80端口服务正常启动,所以对于LVS服务器来说是打开的,所以LVS会把请求转发给给它。

为什么部分用户可以访问,有的用户无法访问呢,发现192.168.1.4服务器ifconfig查看IP,但是没有看到VIP地址绑定在lo:0网卡上,经排错由于该服务器被重启,realserver脚本配置VIP异常,启动realserver脚本,网站恢复正常。

为了防止以上突发问题,增加LVS对后端Nginx URL的检测,能访问URL则表示服务正常。 对比之前的检测方式,从单纯的80端口到现在的URL检测,后端如果某台出现502超时错误,keepalived列表会自动踢出异常的realserver,等待后端realserver恢复后自动添加到服务器正常列表。Keepalived基于URL检查代码如下:

  1. real_server 192.168.1.4 {
  2. weight
  3. HTTP_GET {
  4. url {
  5. path /monitor/warn.jsp
  6. status_code
  7. }
  8. connect_timeout
  9. nb_get_retry
  10. delay_before_retry
  11. }
  12. }

LVS+keepalived均衡nginx配置的更多相关文章

  1. Lvs+Keepalived+Squid+Nginx负载均衡

    前言* 随着互联网IT行业的发展,越来越多的企业开始使用开源软件搭建自己的web架构,主流的LVS也得到了广泛的应用,在保证高可用的同时,用户对网站的体验速度也有了很高的要求,这时候需要我们在我们的架 ...

  2. LVS+keepalived DR模式配置高可用负载均衡集群

    实验环境 LVS-Master 10.0.100.201 VIP:10.0.100.203 LVS-Slave       10.0.100.204 WEB1-Tomcat 10.0.2.29 gat ...

  3. LVS+Keepalived+Squid+Nginx+MySQL主从高性能集群架构部署方案

    方案一,在tomcat的workers.properties里面配置相关条件 worker.tomcat.lbfactor= worker.tomcat.cachesize= worker.tomca ...

  4. LVS负载均衡简单配置

    一.简单介绍 LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器.这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirtu ...

  5. CentOS7.1下生产环境Keepalived+Nginx配置

    CentOS7.1下生产环境Keepalived+Nginx配置 [日期:2015-07-20] 来源:Linux社区  作者:soulful [字体:大 中 小]   注:下文涉及到配置的,如无特别 ...

  6. 高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)

            LVS(负载均衡器).Heartbeat.Corosync.Pacemaker.Web高可用集群.MySQL高可用集群.DRDB.iscsi.gfs2.cLVM等,唯一没有讲解的就是L ...

  7. Mysql双主热备+LVS+Keepalived高可用操作记录

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

  8. Mysql双主热备+LVS+Keepalived高可用部署实施手册

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

  9. 你需要知道的Nginx配置二三事

    做服务端开发的,工作中难免会遇到处理Nginx配置相关问题.在配置Nginx时,我一直本着“照葫芦画瓢”的原则,复制已有的配置代码,自己修修改改然后完成配置需求,当有人问起Nginx相关问题时,其实仍 ...

随机推荐

  1. <%=%>、<%%>、<%@%>、<%#%>的区别

    1.<%= %> 里面放变量名,获取后台的变量值,直接输入变量到页面上,里面放的变量名,未经过encode eg: 后台: seession["ab"]=ab; 前台: ...

  2. out ref params

    out的使用 out 能够使我们的函数返回多个类型的值,不再受返回类型的设置: 就是相当于在方法里不仅仅给了一个返回值,被out修饰的参数的值也能带出去: 所以就是说,在方法体内被out修饰的参数,都 ...

  3. dl learn task

    https://deeplearning4j.org/cn/word2vec Task 1 分类http://blog.csdn.net/czs1130/article/details/7071734 ...

  4. iF.svnadmin 安装遇到的坑

    iF.svnadmin 官网:http://svnadmin.insanefactory.com/ 安装配置iF.svnadmin : http://blog.linhere.com/archives ...

  5. 使用VUE开发微信小程序

    使用 mpvue 开发小程序,你将在小程序技术体系的基础上获取到这样一些能力: 彻底的组件化开发能力:提高代码复用性完整的 Vue.js 开发体验方便的 Vuex 数据管理方案:方便构建复杂应用快捷的 ...

  6. Qt之自定义布局管理器(QCardLayout)

    简述 手动布局另一种方法是通过继承QLayout类编写自己的布局管理器. 下面我们详细来举一个例子-QCardLayout.它由同名的Java布局管理器启发而来.也被称之为卡片布局,每个项目偏移QLa ...

  7. 过Hard题目.周末

      # Title Editorial Acceptance Difficulty Frequency   . 65 Valid Number     12.6% Hard    . 126 Word ...

  8. Mac OS X10.10_xcode6.1_ios8.1环境下,编译lame静态库libmp3lame.a,支持arm64 armv7s x86_64 i386 armv7指令集

    近期升级了系统到Mac OS X 10.10 而且更新了XCode6.1和iOS 8.1 之前app用到的libmp3lame.a静态库.也要支持64位的模拟器(x86_64)和64位的真机(arm6 ...

  9. Mybatis Generator for SQL Server

    Mybatis Generator for SQL Server <?xml version="1.0" encoding="UTF-8" ?> & ...

  10. OCP-1Z0-051-题目解析-第50题

    50. SLS is a private synonym for the SH.SALES table.  The user SH issues the following command:  DRO ...