Linux LVS+Keepalive+HAproxy集群部署

一. 部署思路

用户访问的域名都解析到LVS的VIP上,LVS做四层负载均衡,负载分配用户的请求至不同的HAproxy代理服务器上,HAproxy再对用户的请求做7层负载均衡,将不同的链接根据ACL规则分配到不同的真实Apache服务器上。

二. 组网规划

1. 组网拓扑图

2. 地址规划

节点类型 IP地址规划 主机名 地址类型 网卡
LVS-MASTER 192.168.31.11/24 study01.linux.com 真实地址 eth0
LVS-BACKUP 192.168.31.12/24 study02.linux.com 真实地址 eth0
LVS-VIP 192.168.31.10/32 - 虚拟地址 eth0
HAproxy01 192.168.31.13/24 study03.linux.com 真实地址 eth0
HAproxy01 192.168.31.10/32 study03.linux.com 虚拟地址 lo:0
HAproxy02 192.168.31.14/24 study04.linux.com 真实地址 eth0
HAproxy02 192.168.31.10/32 study04.linux.com 虚拟地址 lo:0
apache01 192.168.31.15/24 study05.linux.com 真实地址 eth0
apache02 192.168.31.16/24 study06.linux.com 真实地址 eth0
apache01 192.168.31.17/24 study07.linux.com 真实地址 eth0

3. 测试域名规划

域名注册两个: static.test.com 和 study.test.com

  • static.test.com---->此域名请求被负载到apache 192.168.31.15
  • 路径里带jpg后缀的被分配到apache 192.168.31.15
  • 其他的所有被分配到apache 192.168.31.16

三. 部署LVS+keepalive

1. LVS-MASTER部署

yum -y install gcc-* glibc-* *c++* openssl-devel  #安装开发环境
yum -y install ipvsadm  #安装LVS
yum -y install keepalived  #安装keepalive
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]   #设置接收报警邮件,可以设置多个,每行一个,前提是需要开启本机的sendmail服务
   }
   notification_email_from [email protected]     #设置邮件的发送邮箱
   smtp_server 121.51.19.175                    #设置SMTP服务器地址
   smtp_connect_timeout 30                      #设置连接SMTP服务器的超时时间
   router_id LVS_DEVEL                          #表示运行keepalive服务器的一个标识,发邮件时显示在邮件主题中的信息
}

vrrp_instance VI_1 {                            #VRPP实例部分
    state MASTER                                #指定VRRP角色
    interface eth0                              #指定HA监测的网络接口
    virtual_router_id 51                        #VRRP实例ID,同一组VRRP必须试用同样的ID
    priority 100                                #VRRP优先级,越大越优先
    advert_int 1                                #心跳报文通告间隔
    authentication {
        auth_type PASS                          #设置验证类型,主要有PASS和AH两种
        auth_pass 1111                          #设置验证密码,同一组VRRP的主备必须是用相同的密码和类型
    }
    virtual_ipaddress {
        192.168.31.10                           #设置VIP
    }
}

virtual_server 192.168.31.10 80 {               #设置对用户提供服务的虚拟IP和端口
    delay_loop 6                                #设置运行情况检查,时间是秒
    lb_algo rr                                  #设置负载调度算法
    lb_kind DR                                  #设置LVS实现负载均衡的机制
    nat_mask 255.255.255.0
    #persistence_timeout 50             #会话超时时间,单位是秒,超时后会分发到下一个节点
    protocol TCP                                #指定协议类型,有TCP和UDP

    real_server 192.168.31.13 80 {              #指定后端真实服务器地址和端口
        weight 1
        TCP_CHECK {
            connect_timeout 3                   #表示3秒无响应超时
            nb_get_retry 3                      #表示重试次数
            delay_before_retry 3                #表示重试间隔
        }
    }
    real_server 192.168.31.14 80 {              #指定后端真实服务器地址和端口
        weight 1
        TCP_CHECK {
            connect_timeout 3                   #表示3秒无响应超时
            nb_get_retry 3                      #表示重试次数
            delay_before_retry 3                #表示重试间隔
        }
    }
}

2. LVS-BACKUP部署

yum -y install gcc-* glibc-* *c++* openssl-devel  #安装开发环境
yum -y install ipvsadm  #安装LVS
yum -y install keepalived  #安装keepalive
LVS-BACKUP的配置文件和主配置文件只有以下部分不同:
1. 角色改为BACKUP。
2. priority改的要低于主机的优先级。 

四. 部署HAproxy

  • 所有的haproxy的部署方法和配置完全相同,详细见如下内容:
yum -y install haproxy


#以下内容实际环境中可以编写成脚本
ifconfig lo:0 192.168.31.10 netmask 255.255.255.255 up
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
#haproxy的配置
#---------------------------------------------------------------------
# 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        #全局的日志配置,设置接收日志的地址和日志设备

    chroot      /var/lib/haproxy        #指定haproxy程序的更改根目录
    pidfile     /var/run/haproxy.pid    #指定haproxy进程的PID文件,启动进程的用户必须有访问权限
    maxconn     4000                    #设置haproxy进程可接受的最大连接数,等同于ulimit -n
    user        haproxy                 #设置运行haproxy进程的用户,也可使用该用户的UID代替
    group       haproxy                 #设置运行haproxy进程的组,也可使用该组的GID代替
    daemon                              #设置haproxy进入后台运行,这是推荐模式
    nbproc      1                       #设置haproxy可以启动的进程数,推荐这个数值要小于CPU内核数
                                        #设置多个进程可减少每个进程任务队列,但可能导致系统崩溃
    # 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                        #haproxy运行模式,可以运行在TCP(四层)、HTTP(七层)、health模式
    log                     global                      #log配置使用global定义
    option                  httplog                     #启用haproxy的日志记录http请求
    option                  dontlognull
    option http-server-close                            #客户端完成请求后,haproxy将主动关闭TCP连接
    option forwardfor       except 127.0.0.0/8          #如果后端服务器要获得用户的真实IP就要配置此参数
    option                  redispatch                  #此参数用于cookie保持的环境中,当后端服务器故障,用户会话将被强制指向到另一台健康服务器
    retries                 3                           #设置连接后端服务器的失败重试次数
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s                         #设置成功连接一台服务器的最长等待时间
    timeout client          1m                          #设置连接客户端发送数据时最长等待时间
    timeout server          1m                          #设置服务器回应客户端数据发送的最长等待时间
    timeout http-keep-alive 10s
    timeout check           10s                         #设置对后端服务器的检测超时时间
    maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:80
    acl url_static       hdr_beg(host)       -i static.
    acl url_static       path_end       -i .jpg

    use_backend static          if url_static
    default_backend             app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 192.168.31.15:80 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server  app1 192.168.31.16:80 check

五. 部署apache服务器

#192.168.31.15 apache部署:
/etc/init.d/httpd restart
chkconfig --level 35 httpd on
echo "this is 192.168.31.15" > /var/www/html/index.html
echo "this is 192.168.31.15 test picture" > /var/www/html/tiger.jpg

#192.168.31.16 apache部署:
/etc/init.d/httpd restart
chkconfig --level 35 httpd on
echo "this is 192.168.31.16" > /var/www/html/index.html
echo "this is 192.168.31.16 test picture" > /var/www/html/tiger.jpg

#192.168.31.17 apache部署:
/etc/init.d/httpd restart
chkconfig --level 35 httpd on
echo "this is 192.168.31.17" > /var/www/html/index.html
echo "this is 192.168.31.17 test picture" > /var/www/html/tiger.jpg

六. 启动集群

# LVS主和备都使用如下方法启动
chkconfig --level 35 keepalived on
/etc/init.d/keepalived restart
chkconfig --level 35 ipvsadm on
/etc/init.d/ipvsadm restart

#HAproxy都使用如下方法启动
chkconfig --level 35 haproxy on
/etc/init.d/haproxy restart

七. 测试集群负载效果

#如下测试内容符合HAproxy定义的规则,测试效果符合预期
MacBook-Pro:~ momo$ curl static.test.com
this is 192.168.31.15
MacBook-Pro:~ momo$ curl static.test.com
this is 192.168.31.15
MacBook-Pro:~ momo$ curl static.test.com
this is 192.168.31.15
MacBook-Pro:~ momo$ curl static.test.com/tiger.jpg
this is 192.168.31.15 test picture
MacBook-Pro:~ momo$ curl static.test.com/tiger.jpg
this is 192.168.31.15 test picture
MacBook-Pro:~ momo$ curl static.test.com/tiger.jpg
this is 192.168.31.15 test picture
MacBook-Pro:~ momo$ curl study.test.com
this is 192.168.31.16
MacBook-Pro:~ momo$ curl study.test.com
this is 192.168.31.16
MacBook-Pro:~ momo$ curl study.test.com
this is 192.168.31.16
MacBook-Pro:~ momo$

#高可用测试用、故障切换测试省略

猜你喜欢

转载自www.cnblogs.com/wangzengyi/p/12509823.html