zoukankan      html  css  js  c++  java
  • 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 {
         wang_zengyi@126.com   #设置接收报警邮件,可以设置多个,每行一个,前提是需要开启本机的sendmail服务
       }
       notification_email_from 647956023@qq.com     #设置邮件的发送邮箱
       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$
    
    #高可用测试用、故障切换测试省略
    
  • 相关阅读:
    j2ee四大作用域pagecontext,request,session,ServletContext(转)
    ActionErrors 使用说明 struts1 validate 处理流程 详细教程(转)
    Structs1 -配置例子(转)
    2016年3月19日 培训复习
    抽象类中的抽象方法也是默认public的么(类似于interface)?
    积分商城1期设计
    积分商城1期设计
    android使用模拟机测试时,若要联网IP地址该怎么写?
    JS和CSS压缩部署,提高访问效率
    JS和CSS压缩部署,提高访问效率
  • 原文地址:https://www.cnblogs.com/wangzengyi/p/12509823.html
Copyright © 2011-2022 走看看