`
maosheng
  • 浏览: 560226 次
  • 性别: 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基于完整开源软件的架构可以为你提供一个负载均衡及高可用的服务器。

    linux 服务器集群与负载均衡技术

    Linux服务器集群与负载均衡技术是构建高可用性、高性能计算环境的关键技术,广泛应用于大型网站、企业级应用和云计算服务中。本节将深入探讨这一主题,解析其核心概念、架构设计以及实施策略。 首先,我们需要理解...

    keepalived+lvs集群负载均衡配置

    本文将详细介绍如何在 Red Hat 6.5 操作系统下利用 VMware Workstation 构建基于 Keepalived 和 LVS-DR 的高可用负载均衡集群,并深入探讨其工作原理和配置步骤。 #### 二、Keepalived 原理与配置 ##### 1. ...

    Apache服务器集群及负载均衡

    在构建大型Web应用程序时,Apache服务器集群和负载均衡是至关重要的技术,它们能确保系统的高可用性和可扩展性。Apache服务器作为最广泛使用的HTTP服务器之一,经常被用于处理大量并发请求。当单个Apache服务器无法...

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

    **Nginx 知识点详解** ...它最初由伊戈尔·赛索耶夫为 Rambler.ru 站点开发,自 2004 年...总之,Nginx 是一款功能强大的网络服务器,广泛应用于各种场景,通过深入学习和实践,可以构建出高效、稳定的服务器集群环境。

    nginx+keepalived实现高可用负载均衡方案.pdf

    安装完成后,需要配置Nginx的基本工作参数,如用户信息、工作进程数、监听端口等,并且对nginx.conf配置文件进行编辑以设置代理服务,例如负载均衡、服务器集群、缓存、代理超时等配置。 4. 安装和配置Keepalived:...

    ipvsadm+keepalived 实现高可用负载均衡

    - **主控机** (MASTER): IP地址192.168.1.100,负责管理整个负载均衡集群。 - **备份机** (BACKUP): IP地址192.168.1.101,作为主控机的备用机,在主控机出现故障时接管服务。 - **虚拟IP地址** (VIP): 192.168.1....

    MySQL数据库集群+负载均衡(LVS)

    ### MySQL数据库集群+负载均衡(LVS) #### 一、概述 **MySQL数据库集群+负载均衡(LVS)** 这个主题涵盖了构建一个高可用性、高性能的MySQL集群,并通过负载均衡技术来实现对集群中多个MySQL实例请求的智能分发。这种...

    用Keepalived与HAProxy实现高可用负载均衡的配置方法.docx

    【Keepalived与HAProxy高可用负载均衡配置详解】 负载均衡是现代分布式系统中的关键组件,它通过将网络流量分发到多个后端服务器,确保服务的稳定性和高可用性。Keepalived与HAProxy结合使用,能构建出一套强大的...

    lvs+keepalived+vsftp配置FTP服务器负载均衡

    LVS提供负载均衡,Keepalived确保服务高可用,而VSFTPd是常用的FTP服务器软件。下面我们将详细探讨这三个组件及其配置方法。 1. **LVS(Linux Virtual Server)** LVS是一种开源的负载均衡技术,它通过将网络流量...

    MyCat高可用负载均衡集群实现(HAProxy+Keepalived+MyCat)

    标题所涉及的知识点为“Mycat高可用负载均衡集群实现”,这是使用HAProxy和Keepalived技术来达成MyCat服务器集群的高可用性和负载均衡的方案。下面详细说明这一知识点。 首先,Mycat是一个数据库中间件,它可以实现...

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

    总的来说,负载均衡及服务器集群(Keepalived+LVS)的组合提供了高可用、可扩展的网络服务解决方案。通过Keepalived的健康检查和故障转移,配合LVS的负载均衡策略,可以在多台服务器之间智能分配流量,保证服务的...

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

    【LVS+Keepalived 实现高性能高可用负载均衡服务器】 在互联网行业中,随着网站业务量的不断增长,服务器承受的压力日益增大。为了确保服务的稳定性和可用性,需要采用负载均衡策略。LVS(Linux Virtual Server)和...

    nginx+keepalived实现高可用负载均衡方案.rar

    在这个场景下,“nginx+keepalived”是一个常用的解决方案,它结合了Nginx的高性能反向代理和负载均衡能力以及Keepalived的健康检查和故障转移功能。下面我们将详细探讨这一方案。 **Nginx** Nginx是一款开源的Web...

    Lvs+keepalived+failover搞定服务器负载均衡ppt

    LVS(Linux Virtual Server)是基于Linux内核的负载均衡器,它将一个或多个服务器集群转换为单一的虚拟服务器。LVS通过不同的工作模式(如NAT、DR和TUN)提供负载均衡功能,可以根据需求选择合适的模式来实现服务器...

    Linux负载均衡--LVS+Keepalived(终极文档).pdf

    Linux 负载均衡 -- LVS+Keepalived 终极指南 Linux 负载均衡是当前网站业务量增长面临的主要挑战之一。如何实现高性能高可用的负载均衡方案,降低成本,提高网站的可靠性和灵活性,是每个网站管理员和架构师所面临...

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

    总的来说,LVS通过Keepalived和ipvsadm的配合,构建了一个强大的负载均衡和服务器集群环境,提供高可用性和可扩展性,确保互联网服务的稳定运行。在实际应用中,根据业务需求选择合适的调度算法和故障检测策略,可以...

Global site tag (gtag.js) - Google Analytics