`
maosheng
  • 浏览: 550060 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Keepalived服务器集群与负载均衡

阅读更多
使用负载均衡技术主要的目的包括如下几点:

◆ 系统高可用性:

组成系统的某些设备或部件失效,并不会影响正常的服务。

◆ 系统可扩展性:

用户的增加,引起访问数乃至流量的增加,这种情形下,需要对系统进行扩容,以应对这种快速增长。对于提供高可用服务的互联网网站,其对可扩展的基本要求就是在保持系统服务不终止的情况下,透明的扩充容量,即用户不知道扩容的存在,或者说是扩容不对现有的服务产生任何负面作用。这些扩展主要包括:带宽扩展、服务器扩展、存储容量扩展、数据库扩展等,当然也包括主机增加内存等方面的扩展。

◆ 负载均衡能力:

一个应用或服务由数个物理服务器提供,并且每个物理服务器运行的应用或服务是相同的,我们可以让用户的访问通过某种控制策略,把负载分摊到不同的物理服务器,从而保持每个物理服务器有比较合理的负载。当整个系统的负载趋于饱和时,通过增加物理服务器和扩充物理带宽来解决这个麻烦。增加物理服务器以后,系统的负载情况将重新在所有集群的物理服务器之间按照指定的算法重新达到新的均衡。

一个完整的负载均衡项目,一般由虚拟服务器、故障隔离及失败切换3 个功能框架所组成。虚拟服务器是负载均衡体系的基本架构,它分两层结构:转发器(Director)和真实服务器。





为什么称虚拟服务器?因为从用户的角度看来,似乎只是一个服务器在提供服务。虚拟服务器最主要的功能是提供包转发和负载均衡,这个功能可以通过撰写ipvsadm 脚本具体实现。


故障隔离,指虚拟服务器中的某个真实服务器(或某几个真实服务器)失效或发生故障,系统自动把失效的服务器从转发队列中清理出去,从而保证用户访问的正确性;另一方面,当实效的服务器被修复以后,系统再自动地把它加入转发队列。


失败切换,这是针对负载均衡器Director 采取的措施,在有两个负载均衡器Director 的应用场景,当主负载均衡器(MASTER)失效或出现故障,备份负载均衡器(BACKUP)将自动接管主负载均衡器的工作;一旦主负载均衡器故障修复,两者将恢复到最初的角色。

要从技术上实现虚拟服务器、故障隔离及失败切换3 个功能,需要两个工具:ipvsadm 和keepalived。


Ipvs(IP Virtual Server)是整个负载均衡的基础,如果没有这个基础,故障隔离与失败切换就毫无意义了。在大部分linux 发行版中,ipvs 被默认安装。


Ipvs 具体实现是由ipvsadm 这个程序来完成,因此判断一个系统是否具备ipvs 功能,只需要察看ipvsadm 程序是否被安装。

检验ipvsadm 是否被正确安装
1、 执行ipvsadm





2、 检查当前加载的内核模块,看是否存在ip_vs 模块

[root@hd-4 ipvsadm-1.24]# lsmod|grep ip_vs
ip_vs 77569 0

注1、只有执行ipvsadm 以后,才会在内核加载ip_vs 模块。
注2、不能以查进程的方式判断ipvs 是否运行。


keepalived 体系结构

Keepalived 大致分两层结构:用户空间 user space 和内核空间 kernel space





在这个结构图里,处于下端的是内核空间,它包括ipvs 和NETLINK 两个部分。


用户空间功能说明:

1、 WatchDog 负责监控checkers 和VRRP 进程的状况。

2、 Checkers 负责真实服务器的健康检查healthchecking,是keepalived 最主要的功能。换句话说—可以没有VRRP Stack,但健康检查healthchecking 是一定要有的。

3、 VRRP Stack 负责负载均衡器之间的失败切换FailOver.如果只用一个负载均衡器,则VRRP 不是必须的。

4、 IPVS wrapper 用来发送设定的规则到内核ipvs 代码。

5、 Netlink Reflector 用来设定 vrrp 的vip 地址等。


Keepalived 各种功能的实现是通过设置其配置文件 keepalived.conf 来完成的。


配置文件keepalived.conf

一个功能比较完整的keepalived 的配置文件,其配置文件keepalived.conf 可以包含三个文本块:全局定义块、VRRP 实例定义块及虚拟服务器定义块。

全局定义块和虚拟服务器定义块是必须的,如果在只有一个负载均衡器的场合,就不须VRRP实例定义块。


#全局定义块
global_defs {
   notification_email {
      email
      email
   }
   notification_email_from email
   smtp_server host
   smtp_connect_timeout num
   router_id string
}

#VRRP 实例定义块
vrrp_sync_group string {
   group {
      string
      string
   }
}
vrrp_instance string {
      state MASTER|BACKUP
      interface string
      mcast_src_ip @IP
      lvs_sync_daemon_interface string
      virtual_router_id num
      priority num
      advert_int num
      smtp_alert
   authentication {
      auth_type PASS|AH
      auth_pass string
   }
   virtual_ipaddress { # Block limited to 20 IP addresses
      @IP
      @IP
      @IP
   }
   virtual_ipaddress_excluded { # Unlimited IP addresses number
      @IP
      @IP
      @IP
   }
}

#虚拟服务器定义块
virtual_server (@IP PORT)|(fwmark num) {
   delay_loop num
   lb_algo rr|wrr|lc|wlc|sh|dh|lblc
   lb_kind NAT|DR|TUN
   nat_mask @IP
   persistence_timeout num
   persistence_granularity @IP
   virtualhost string
   protocol TCP|UDP
   sorry_server @IP PORT
   real_server @IP PORT {
      weight num
      TCP_CHECK {            #TCP服务的健康检查方式
         connect_port num    #健康检查的服务端口
         connect_timeout num #连接超时时间
      }
   }
   real_server @IP PORT {
      weight num
      MISC_CHECK {
         misc_path /path_to_script/script.sh
        (or misc_path “/path_to_script/script.sh <arg_list>”)
      }
   }
   real_server @IP PORT {
      weight num
      HTTP_GET|SSL_GET {     #这里定义是http和https的检查方式
         url {               # You can add multiple url block
            path alphanum    #http服务检查的默认路径
            digest alphanum  #https检查后的摘要信息
            status_code num  #http检查的返回状态码
             }
      connect_port num       #健康检查的服务端口
      connect_timeout num    #连接超时时间
      nb_get_retry num       #设置重连次数
      delay_before_retry num #重连间隔时间
      }
   }
   real_server @IP PORT {
      weight num
      SMTP_CHECK {                         #SMTP服务的健康检查方式
         host {
            connect_ip <IP ADDRESS>        #健康检查的服务端口
            connect_port <PORT>            #健康检查的服务端口
            bindto <IP ADDRESS>            #以此地址发送请求对服务器端进行健康检查
         }
         connect_timeout <INTEGER>         #连接超时时间
         retry <INTEGER>                   #设置重连次数
         delay_before_retry <INTEGER>      #重连间隔时间
         helo_name <STRING>|<QUOTED-STRING # smtp helo请求命令的参数
  }
}


● 全局定义块

1、 email 通知。
    作用:有故障,发邮件报警。这是可选项目,建议不用,用nagios 全面监控代替之。

2、 notification_email_from email:
    作用:指定邮件的发送人

3、 smtp_server host
    作用:这里是指定邮件服务器地址

4、 smtp_connect_timeout num
    作用:设置与邮件服务器连接的超时时长

5、 router_id my_hostname   
    作用:设置vrrp路由器的id,用来标识路由器本身

6、 花括号“{}”。
    用来分隔定义块,因此必须成对出现。如果写漏了,keepalived 运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,
这点要特别注意。

● VRRP实例 定义块

1、 同步vrrp 组vrrp_sync_group。
    作用:确定失败切换(FailOver)包含的路由实例个数。即在有2 个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些?

2、 实例组group.至少包含一个vrrp 实例。

3、 Vrrp 实例vrrp_instance.实例名出自实例组group 所包含的那些名字。

(1) 实例状态state
      只有MASTER 和BACKUP 两种状态,并且需要大写这些单词。其中MASTER 为工作状态,BACKUP 为备用状态。当MASTER 所在的服务器失效时,BACKUP 所在的系统会自动把它的状态有BACKUP 变换成MASTER;当失效的MASTER 所在的系统恢复时,BACKUP 从MASTER 恢复到BACKUP 状态。

(2) 通信接口interface
      对外提供服务的网络接口,如eth0,eth1.当前主流的服务器都有2 个或2 个以上的接口,在选择服务接口时,一定要核实清楚。

(3) lvs_sync_daemon_inteface
      负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。在DR 模式中,lvs_sync_daemon_inteface 与服务接口interface 使用同一个网络接口。

(4) 虚拟路由标识virtual_router_id
      这个标识是一个数字,范围为 0-255,并且同一个vrrp 实例使用唯一的标识。即同一个vrrp_stance,MASTER 和BACKUP 的virtual_router_id 是一致的,同时在整个vrrp 内是唯一的。

(5) 优先级priority
      这是一个数字,数值愈大,优先级越高。在同一个vrrp_instance里,MASTER 的优先级高于BACKUP。若MASTER 的priority 值为150,那么BACKUP的priority 只能是140 或更小的数值。

(6) 同步通知间隔 advert_int
      MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒,默认为 1 秒。

(7) 验证authentication
      包含验证类型和验证密码。类型主要有PASS、AH 两种,通常使用的类型为PASS,据说AH 使用时有问题。验证密码为明文,同一vrrp 实例MASTER 与BACKUP 使用相同的密码才能正常通信。

4、 虚拟ip 地址virtual_ipaddress

    可以有多个地址,每个地址占一行,不需要指定子网掩码。注意:这个ip 必须与我们在lvs 客户端设定的vip 相一致!

● 虚拟服务器virtual_server 定义块

虚拟服务器定义是keepalived 框架最重要的项目了,是keepalived.conf 必不可少的部分。

1、 虚拟服务器virtual_server

    这个ip 来自于vrrp 定义块的第“4”步,后面一个空格,然后加上端口号。定义一个vip,可以实现多个tcp 端口的负载均衡功能。

(1) delay_loop
      健康检查时间间隔,单位是秒。

(2) lb_algo
      负载均衡调度算法,互联网应用常使用wlc 或rr。

(3) lb_kind
      负载均衡转发规则。一般包括DR,NAT,TUN3 种,在我的方案中,都使用DR 的方式。

(4) persistence_timeout
      会话保持时间,单位是秒。这个选项对动态网站很有用处:当用户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发给同一个应用服务器。在这里,我们来做一个假设,假定现在有一个lvs 环境,使用DR 转发模式,真实服务器有3 个,负载均衡器不启用会话保持功能。当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了—登陆不能成功。因为没有会话保持,负载均衡器可能会把第2 次的请求转发到其他的服务器。

(5) 转发协议protocol
      一般有tcp 和udp 两种。实话说,我还没尝试过udp 协议类的转发。

2、 真实服务器real_server

    也即服务器池。Real_server 的值包括ip 地址和端口号。多个连续的真实ip,转发的端口相同,是不是可以以范围表示?需要进一步实验。如写成real_server 61.135.20.1-10 80 .
(1) 权重weight
      权重值是一个数字,数值越大,权重越高。使用不同的权重值的目的在于为不同性能的机器分配不同的负载,性能较好的机器,负载分担大些;反之,性能差的机器,则分担较少的负载,这样就可以合理的利用不同性能的机器资源。

(2) Tcp 检查 tcp_check.

样例:

1.MASTER 的配置文件/etc/keepalived/keepalived.conf.

#global define
global_defs {
   router_id LVS_CNC_1
}
vrrp_sync_group VGM {
   group {
      VI_CACHE
   }
}
################################################################
# vvrp_instance define #
################################################################
vrrp_instance VI_CACHE {
   state MASTER
   interface eth0
   lvs_sync_daemon_inteface eth0
   virtual_router_id 51
   priority 180
   advert_int 5
   authentication {
      auth_type PASS
      auth_pass 1111
   }
   virtual_ipaddress {
      125.38.38.64
   }
}
##############################################################
# virtual machine setting #
##############################################################
# setting port 80 forward
virtual_server 125.38.38.64 80 {
   delay_loop 6
   lb_algo wlc
   lb_kind DR
   # persistence_timeout 20
   protocol TCP
   real_server 125.38.38.101 80 {
      weight 100
      TCP_CHECK {
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
         connect_port 80
      }
   }
   real_server 125.38.38.102 80 {
      weight 100
      TCP_CHECK {
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
         connect_port 80
      }
   }
   real_server 125.38.38.104 80 {
      weight 100
      TCP_CHECK {
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
         connect_port 80
      }
   }
   real_server 125.38.38.99 80 {
      weight 100
      TCP_CHECK {
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
         connect_port 80
      }
   }
}

2、 BACKUP 配置文件/etc/keepalived/keepalived.conf

#global define
global_defs {
   router_id LVS_CNC_2
}
   vrrp_sync_group VGM {
   group {
      VI_CACHE
   }
}
################################################################
# vrrp_instance setting #
################################################################
vrrp_instance VI_CACHE {
   state BACKUP
   interface eth1
   lvs_sync_daemon_inteface eth1
   virtual_router_id 51
   priority 150
   advert_int 5
   authentication {
      auth_type PASS
      auth_pass 1111
   }
   virtual_ipaddress {
      125.38.38.64
   }
}
##############################################################
# virtual server setting #
##############################################################
# setting port 80 forward
virtual_server 125.38.28.64 80 {
   delay_loop 6
   lb_algo wlc
   lb_kind DR
   # persistence_timeout 50
   protocol TCP
   real_server 125.38.38.101 80 {
      weight 100
      TCP_CHECK {
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
         connect_port 80
      }
   }
   real_server 125.38.38.102 80 {
      weight 100
      TCP_CHECK {
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
         connect_port 80
      }
   }
   real_server 125.38.38.104 80 {
      weight 100
      TCP_CHECK {
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
         connect_port 80
      }
   }
   real_server 125.38.38.99 80 {
      weight 100
      TCP_CHECK {
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
         connect_port 80
      }
   }
}


验证:

# tail -f /var/log/messages

# ip addr

# ipvsadm -L -n

如果想知道当前测试机(159.226.240.63)的访问请求被转发到那个服务器去了,可以在ipvsadm 命令后带一个选项,其完整形式为:ipvsadm –lcn | grep 159.226.240.63

[root@hld081028-mk ~]# ipvsadm -lcn | grep 159.226.240.63
TCP 14:56 ESTABLISHED 159.226.240.63:39783 125.38.38.64:80 125.38.38.99:80



  • 大小: 55 KB
  • 大小: 16.9 KB
  • 大小: 33 KB
分享到:
评论

相关推荐

    LVS+Keepalived高可用负载均衡集群

    随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司...我们利用LVS+Keepalived基于完整开源软件的架构可以为你提供一个负载均衡及高可用的服务器。

    Nginx入门到精通搭建高可用集群负载均衡

    Nginx入门到精通搭建高可用集群负载均衡,Nginx+Lvs+keepAlived构建高可用集群环境

    Nginx+Keepalived搭建HA负载均衡Web

    运用nginx的负载均衡功能实现后端web服务器之间的负载均衡,运用keepalived的功能实现nginx服务器的高可用,比较了nginx和lvs的负载均衡的优缺点。

    利用LVS+Keepalived 实现高性能高可用负载均衡服务器

    利用LVS+Keepalived 实现高性能高可用负载均衡服务器

    负载均衡及服务器集群(Keepalived+Lvs).docx

    负载均衡及服务器集群(Keepalived+Lvs)

    Keepalived-sery-lvs-cluster负载均衡及服务器集群( lvs).docx

    Keepalived_sery-lvs-cluster负载均衡及服务器集群( lvs)

    分布式负载均衡集群架构设计

    两太负载均衡互为主从,由keepalived配置的具体调度算法调度负载均衡服务器 2.DNS轮询: DNS轮询请求负载均衡服务器,负载均衡服务器通过调度选择负载均衡服务器来转发请求 3.Web服务器集群: 由至少两台Nginx Web...

    Nginx+keepalived+tomcat集群搭建过程.doc

    通过nginx+keepalived+tomcat实现服务器负载均衡的高可用方案,解决传统负载均衡服务器宕机后无法自行切换从而导致雪崩效应的场景

    keepalived + nginx组建高可用负载平衡Web server集群

    nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。 为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都...

    keepalived 安装手册.docx

    javaweb高可用+负载均衡-服务器集群(keepalived+apache+tomcat)生产环境部署手册 所用技术:1高可用集群keepalived。2负载均衡集群apache。3tomcat服务。4生产环境的日常维护脚本 真实生产环境在用的技术架构,亲...

    初级篇:借助LVS+Keepalived实现负载均衡

    在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。...

    高并发web集群框架搭建

    keepalived做高可用nginx负载均衡,两台nginx负载均衡可以处理静态页面,同时通过VIP进行热备。后端服务器采用apache(当然你可用其他的,这个看你的代码了)。数据库采用mysql进行集群搭建,将读写操作分离,数据库...

    Keepalived+HAProxy实现MySQL高可用负载均衡的配置

    由于在生产环境使用了mysqlcluster,需要实现高可用负载均衡,这里提供了keepalived+haproxy来实现.  keepalived主要功能是实现真实机器的故障隔离及负载均衡器间的失败切换.可在第3,4,5层交换.它通过VRRPv2(Virtual ...

    LVS Keepalived 详细中文原理构建LINUX HA服务配置手册

    服务器集群间的负载均衡 15  小结 16 IP负载均衡技术 16 通过NAT实现虚拟服务器(VS/NAT) 17 通过IP隧道实现虚拟服务器(VS/TUN) 19 通过直接路由实现虚拟服务器(VS/DR) 22 三种方法的优缺点比较 24 ...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    由国内著名技术社区联合推荐的2012年IT技术力作:《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》,即将上架发行,此书从Web应用、数据备份与恢复、网络存储应用、运维监控与性能优化、集群高级应用等...

    saltstack-loadbalancer:安装haproxy和keepalived模拟ELB

    Keepalived 用于将虚拟 IP 地址绑定到服务器集群。 这模仿了 AWS 弹性负载均衡器 (ELB) 的功能。 请参阅的完整 Salt Formulas 安装和使用说明。 可用状态 按照Struts中的配置安装haproxy和keepalived。 将 dns ...

    双机热备与负载均衡的设计与实现

    针对OpenFlow SDN系统中的策略管理模块提出了一种新型的双机热备和负载均衡方案,采用了服务器集群的方式,通过Keepalived和Heartbeat实现了双机热备模块,通过Nginx实现了代理服务器和负载均衡模块。经工程验证有效...

    Nginx与Tomcat实现动静态分离和负载均衡

    本文介绍了Nginx与Tomcat实现动静态分离和负载均衡,所谓动静分离就是通过nginx(或apache等)来处理用户端请求的图片、html等静态的文件,tomcat(或weblogic)处理jsp、do等动态文件,从而达到动静页面访问时通过...

Global site tag (gtag.js) - Google Analytics