兴發国际娱乐手机登录 7

Keepalived实现高可用负载均衡,Haproxy构建高可用负载均衡集群

一、haproxy介绍:

  HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,
同时可以保护你的web服务器不被暴露到网络上。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制
、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)
实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以
使每个CPU时间片(Cycle)做更多的工作。

  在Linux内核版本为2.6或打了epoll补丁的linux2.4上运行haproxy能获得其最好的性能。

keepalived是一个类似于layer3, 4 &
5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。…

二、keepalived介绍:  

CentOS
6.3下Haproxy+Keepalived+Apache配置笔记
http://www.linuxidc.com/Linux/2013-06/85598.htm

兴發国际娱乐手机登录,  keepalived理论工作原理

keepalived可提供vrrp以及health-check功能,可以只用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。

keepalived是一个类似于layer3, 4 &
5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web 服务器的状态。
Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:

Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器 发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。

Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web
server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

vip即虚拟ip,是附在主机网卡上的,即对主机网卡进行虚拟,此IP仍然是占用了此网段的某个IP。

Haproxy + KeepAlived 实现WEB群集 on CentOS 6
http://www.linuxidc.com/Linux/2012-03/55672.htm

  keepalived的用途:

Keepalived是一个基于VRRP协议来实现的WEB
服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

在lvs+keepalived高可用负载均衡架构中,lvs本身不支持对后端real
server进行健康状态检测,而keepalived的诞生不仅能是lvs均衡器实现了高可用,而且还能对lvs后端的real
server进行健康状态检测。如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

 

兴發国际娱乐手机登录 1

Keepalived+Haproxy配置高可用负载均衡
http://www.linuxidc.com/Linux/2012-03/56748.htm

配置过程:

在配置之前,先将HA中个节点进行时间同步,主机名之间相互解析,以及配置双机互信。

Haproxy+Keepalived构建高可用负载均衡
http://www.linuxidc.com/Linux/2012-03/55880.htm

在haproxy1.daixiang.com上配置:

1
2
3
4
5
6
[root@haproxy1 ~]# vim /etc/hosts
    172.16.0.1 haproxy1.daixiang.com haproxy1
    172.16.0.2 haproxy2.daixiang.com haproxy2<br>
[root@haproxy1 ~]# ssh-keygen -t rsa -P ''
[root@haproxy1 ~]# ssh-copy-id haproxy2
[root@haproxy1 ~]# ntpdate s2c.time.edu.cn

Keepalived+haproxy构建web高可用负载均衡系统

在haproxy2.daixiang.com上配置:

1
2
3
4
5
6
7
[root@haproxy2 ~]# vim /etc/hosts
    172.16.0.1 haproxy1.daixiang.com haproxy1
    172.16.0.2 haproxy2.daixiang.com haproxy2
 
[root@haproxy2 ~]# ssh-keygen -t rsa -P ''
[root@haproxy2 ~]# ssh-copy-id haproxy1
[root@haproxy2 ~]# ntpdate s2c.time.edu.cn

 

本章将使用keepalived做为高可用集群调度用户请求,并且检测haproxy负载均衡器的状态,实时地完成节点的动态调整。

安装haproxy和keepalived:

keepalived原理图:

  在haproxy1和haproxy2节点上进行同样的操作:

?

1
2
3
[root@haproxy1 ~]# yum install keepalived haproxy -y
[root@haproxy1 ~]# cd /etc/keepalived/
[root@haproxy1 keepalived]# cp keepalived.conf{,.bak}

 

兴發国际娱乐手机登录 2

配置keepalived:双主模型

兴發国际娱乐手机登录 3兴發国际娱乐手机登录 4

兴發国际娱乐手机登录 5

[root@haproxy1 keepalived]# vim keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {         #定义收件人邮箱
     root@localhost
   }
   notification_email_from root@localhost      #定义发件人邮箱
   smtp_server 127.0.0.1                              #定义邮件服务器地址
   smtp_connect_timeout 30                         #定有邮件服务器连接超时时长为30秒
   router_id LVS_DEVEL                                 #运行keepalive的机器的标识
}

vrrp_instance VI_1 {                      #定义VRRP实例,实例名自定义
    state MASTER                             #指定当前节点的角色,master为主,backup为从
    interface eth1                             #直接HA监测的接口
    virtual_router_id 51                    #虚拟路由标识,在同一VRRP实例中,主备服务器ID必须一样
    priority 100                                 #定义节点优先级,数字越大越优先,主服务器优先级高于从服务器
    advert_int 1                                #设置主备之间永不检查时间间隔,单位为秒
    authentication {                          设置主从之间验证类型和密码
        auth_type PASS
        auth_pass a23c7f32dfb519d6a5dc67a4b2ff8f5e

    }
    virtual_ipaddress {
        192.168.80.200                      #定义虚拟ip地址
    }
}    

vrrp_instance VI_2 {
    state BACKUP
    interface eth1
    virtual_router_id 52
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 56f7663077966379d4106e8ee30eb1a5

    }
    virtual_ipaddress {
        192.168.80.201
    }
}

View
Code

Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器

  将此配置文件同步到另一个haproxy2.daixiang.com上:

1
[root@haproxy1 keepalived]# scp keepalived.conf haproxy2:/etc/keepalived/

发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将
它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文
中将采用这种方式。

  在haproxy2.daixiang.com上修改keepalived.conf配置文件:

兴發国际娱乐手机登录 6

[root@haproxy2 keepalived]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass a23c7f32dfb519d6a5dc67a4b2ff8f5e

    }
    virtual_ipaddress {
        192.168.80.200
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth1
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 56f7663077966379d4106e8ee30eb1a5

    }
    virtual_ipaddress {
        192.168.80.201
    }
}

Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web
server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

  重启keepalived:

1
2
[root@haproxy1 keepalived]# service keepalived restart
[root@haproxy1 keepalived]# ssh haproxy2 'service keepalived restart'

Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。
Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

配置haproxy:

haproxy工作机制:

先将原始配置文件进行备份:

1
2
3
4
[root@haproxy1 ~]# cd /etc/haproxy/
[root@haproxy1 haproxy]# cp haproxy.cfg{,.bak}
 
##节点2也进行同样的操作

兴發国际娱乐手机登录 7

编辑其配置文件修改其内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
[root@haproxy1 haproxy]# vim haproxy.cfg
 
#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#  http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
 
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global                  #定义全局配置段
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #  file. A line like the following can be added to
    #  /etc/sysconfig/syslog
    #
    #    local2.*                      /var/log/haproxy.log
    #
    log        127.0.0.1 local2          #通过rsyslog将日志进行归档记录,在/etc/rsyslog.conf配置文件中,添加‘local2.*    /var/log/haproxy',并且启用$ModLoad imudp,$UDPServerRun 514,$ModLoad imtcp,$InputTCPServerRun 514 此四项功能,最后重启rsyslog进程。                         
    chroot      /var/lib/haproxy          #指定haproxy进程工作的目录
    pidfile    /var/run/haproxy.pid      #指定pid文件
    maxconn    4000                      #最大并发连接数
    user        haproxy                  #运行haproxy的用户
    group      haproxy                  #运行haproxy的组
    daemon                                #以守护进程的形式运行,即后台运行
 
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
 
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults                                                #默认配置端
    mode                  http                        #工作模式,源码包编译默认为tcp
    log                      global                    #记录全局日志
    option                  httplog                    #详细记录http日志
    option                  dontlognull                #不记录健康检测的日志信息
    option http-server-close                            #启用服务器端主动关闭功能
    option forwardfor      except 127.0.0.0/8          #传递client端IP至后端real server
    option                  redispatch                  #基于cookie做会话保持时,后端对应存放session的服务器出现故障时,会话会被重定向至别的服务器
    retries                3                          #请求重传次数
    timeout http-request    10s                        #断开客户端连接的时长
    timeout queue          1m                          #一个请求在队列里的超时时长
    timeout connect        10s                        #设定在haproxy转发至后端upstream server时等待的超时时长
    timeout client          1m                          #client的一次非活动状态的超时时长
    timeout server          1m                          #等待服务器端的非活动的超时时长
    timeout http-keep-alive 10s                        #持久连接超时时长
    timeout check          10s                        #检查请求连接的超时时长
    maxconn                3000                        #最大连接数
 
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  webserver *:80
    acl url_static      path_beg      -i /static /images /javascript /stylesheets      #匹配path以/static,/images开始的,且不区分大小写
    acl url_static      path_end      -i .jpg .gif .png .css .js .html
    acl url_static      hdr_beg(host)  -i img. video. download. ftp. imgs. image.
 
    acl url_dynamic      path_end      .php .jsp
 
    use_backend static          if url_static          #满足名为url_static这条acl规则,则将请求转发至后端名为static的real server组中去
    use_backend dynamic        if url_dynamic
    default_backend            static                  #如果上面所有acl规则都不满足,将请求转发到static组中
 
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static                              #定义后端real server组,组名为static
    balance    roundrobin                  #支持动态权重修改,支持慢启动
    server      static_1 172.16.0.100:80 check inter 3000 fall 3 rise 1 maxconn 30000
    server      static_2 172.16.0.101:80 check inter 3000 fall 3 rise 1 maxconn 30000
    server      static_Error 172.16.0.1:8080 backup check        #当此组中的所有server全部不能提供服务,才将请求调度至此server上
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
 
 
backend dynamic
    cookie cookie_name insert nocache  #使用cookie实现session绑定,且不记录缓存
    balance    roundrobin
    server  dynamic1 172.16.0.200:80 check inter 3000 fall 3 rise 1 maxconn 1000 cookie dynamic1
    server  dynamic2 172.16.0.201:80 check inter 3000 fall 3 rise 1 maxconn 1000 cookie dynamic2      #定义dynamic组中的server,将此server命名为dynamic2,每隔3000ms检测一个健康状态,如果检测3次都失败,将此server剔除。在离线的状态下,只要检测1次成功,就让其上线,此server支持最大的并发连接数为1000,cookie的值为dynamic2
      
 
listen state                                            # 使用单独输出,不需要frontedn调用:定义haproxy的状态统计页面
    bind *:8001                                        # 监听的地址
    mode http                                          # http 7层工作模式:对应用层数据做深入分析,因此支持7层的过滤、处理、转换等机制
    stats enable                                        # 开启统计页面输出
    stats hide-version                                  # 隐藏状态页面版本号
    stats uri /haproxyadmin?stats                      # 指定状态页的访问路径
    stats auth admin:admin                              # 基于用户名,密码验证。
    stats admin if TRUE                                # 验证通过时运行登录。
    acl num1 src 192.168.80.0/24                        # 定义源地址为192.168.80.0/24网段的acl规则,将其命名为num1
    tcp-request content accept if num1                  # 如果满足此规则,则允许访问
    tcp-request content reject                          # 拒绝其他所有的访问

HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当
前,HAProxy支持两种主要的代理模式:”tcp”也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式
下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求
(request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。

将此配置文件同步当另一个haproxy节点上去: 

1
[root@haproxy1 haproxy]# scp haproxy.cfg haproxy2:/etc/haproxy/

系统环境:CentOS6.4

重启haproxy服务:

?

1
2
[root@haproxy1 haproxy]# service haproxy restart
[root@haproxy1 haproxy]# ssh haproxy2 'service haproxy restart'

 

iptables 关闭

查看这两个节点获取ip的情况:

selinux is disabled

发表评论

电子邮件地址不会被公开。 必填项已用*标注