• [转] Haproxy、Keepalived双主高可用负载均衡


    http://blog.chinaunix.net/uid-25266990-id-3989321.html

    在测试了Nginx+Keepalived的负载均衡后,也对Haproxy+Keepalived双主模式做了测试,双主的模式充分利用了服务器资源,这样不会导致服务器浪费。 这里举例说明:
    默认情况下,第一台负载均衡器主要分发www.zhirs.com的请求,第二台负载均衡器主要分发img.zhirs.com的请求。
    任意一台宕机都不会影响网站分发。

    实验环境

    VIP1=192.168.137.200 (www.zhirs.com)
    VIP2=192.168.137.100 (img.zhirs.com)
    haproxy01=192.168.137.254
    haproxy02=192.168.137.253
    web1=192.168.137.201
    web2=192.168.137.202
    img1=192.168.158.101
    img2=192.168.158.102

    架构图

     
    安装配置过程

    1、安装配置过程,(两台Haproxy的安装配置步骤一样)

    haproxy下载地址:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz

    #cd /usr/local/src
    #wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
    #tar xf haproxy-1.4.24.tar.gz
    #cd haproxy-1.4.24
    #make TARGET=linux26 ARCH=x86_64
    #TARGET是指定内核版本,ARCH指定CPU架构,我使用的是64bit系统
    #make install
       

    2、安装完毕后,创建配置文件和启动文件。

     
    #mkdir /etc/haproxy
    #cp examples/haproxy.cfg /etc/haproxy
    #cp examples/haproxy.init /etc/init.d/haproxy
    #chmod +x /etc/init.d/haproxy
    #ln -s /usr/local/sbin/haproxy /usr/sbin/
    #mkdir /usr/share/haproxy
       

    3、编辑配置文件(两台Haproxy配置文件相同)

    #vim /etc/haproxy/haproxy.cfg
    # this config needs haproxy-1.1.28 or haproxy-1.2.1
    global
        log 127.0.0.1   local0  #日志输出配置,所有日志都记录在本机,通过local0输出
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096                #最大连接数
        chroot /usr/share/haproxy   #改变当前工作目录。
        uid 99                  #所属用户的uid
        gid 99                  #所属运行的gid
        daemon                  #以后台形式运行haproxy
        #debug
        #quiet
     
    defaults
        log global
        mode    http
      #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        option  httplog
        option  dontlognull
        option   redispatch
      #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        option  abortonclose
      #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        retries 3               #两次连接失败就认为是服务器不可用
        maxconn 2000            #默认的最大连接数
      #timeout http-keep-alive 10s
      # timeout queue 1m
        contimeout  5000        #连接超时
        clitimeout  50000       #客户端超时
        srvtimeout  50000       #服务器超时
        timeout check 5s            #心跳检测超时
        stats refresh 30s           #统计页面自动刷新时间
        stats uri  /stats           #统计页面url
        stats realm baison-test-Haproxy         #统计页面密码框上提示文本
        stats auth admin:admin123           #统计页面用户名和密码设置
        stats hide-version                  #隐藏统计页面上HAProxy的版本信息
    frontend www
        bind *:80
        #这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。
        acl web hdr(host) -i www.zhirs.com
        #acl后面是规则名称,-i是要访问的域名,如果访问www.zhirs.com这个域名就分发到下面的webserver 的作用域。
        acl img hdr(host) -i img.zhirs.com
        #如果访问img.baison.com.cn就分发到imgserver这个作用域。
        use_backend webserver if web
        use_backend imgserver if img
     
    backend webserver             #webserver作用域
        mode http
        balance   roundrobin     
        #banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数
        option  httpchk /index.html
        #检测文件,如果分发到后台index.html访问不到就不再分发给它
        server     web01 192.168.137.201:80  check inter 2000 fall 3 weight 30
       server     web01 192.168.137.202:80  check inter 2000 fall 3 weight 20
       server     web01 192.168.137.203:80  check inter 2000 fall 3 weight 10
     
    backend imgserver
        mode http
        option  httpchk /index.php
        balance     roundrobin                         
        server      img01 192.168.137.101:80  check inter 2000 fall 3
        server      img02 192.168.137.102:80  check inter 2000 fall 3
       

    4、启动Haproxy服务,查看状态。

    1
    #service haproxy start


     

     5、安装配置keepalived(两台keepalived安装步骤一样)

    #cd /root/software
    #wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.33.tar.gz
    #tar -zxvf pcre-8.33.tar.gz
    #cd pcre-8.33
    #./configure
    #make && make install
    #wget http://nginx.org/download/nginx-1.2.9.tar.gz
    #tar -zxvf nginx-1.2.9.tar.gz
    #cd nginx-1.2.9
    #./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_sub_module --with-http_stub_status_module --with-http_gzip_static_module
    #make && make install
       

    6、第一台keepalived配置文件。第一台做192.168.137.200vip的master,192.168.137.100的backup。

    #vim /etc/keepalived/keepalived.conf
    global_defs {
       notification_email {
         admin@centos.bz
       }
       notification_email_from keepalived@domain.com
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    vrrp_script chk_http_port {
                    #script "/opt/nginx_pid.sh"
                    script "/opt/check_haproxy.sh"
                    interval 2
                    weight 2
    }
    vrrp_instance VI_1 {
        state MASTER        ############ 辅机为 BACKUP
        interface eth0
        virtual_router_id 51
        mcast_src_ip 192.168.137.254
        priority 100                  ########### 权值要比 back 高
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    track_script {
            chk_http_port ### 执行监控的服务
            }
        virtual_ipaddress {
           192.168.137.200
        }
    }
    vrrp_instance VI_2 {
        state BACKUP
        interface eth0
        virtual_router_id 52
        priority 99
        advert_int 1
        authentication {
             auth_type PASS
             auth_pass 1111
        }
        virtual_ipaddress {
            192.168.137.100 
             }
    }
       

    7、第二台keepalived的配置文件。

    #vim /etc/keepalived/keepalived.conf
    global_defs {
       notification_email {
         admin@centos.bz
       }
       notification_email_from keepalived@domain.com
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    vrrp_script chk_http_port {
                    #script "/opt/nginx_pid.sh"
                    script "/opt/check_haproxy.sh"
                    interval 2
                    weight 2
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        mcast_src_ip 192.168.137.253
        priority 99             ##########权值 要比master低
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    track_script {
            chk_http_port
            }
        virtual_ipaddress {
           192.168.137.200
        }
    }
    vrrp_instance VI_2 {
        state MASTER
        interface eth0
        virtual_router_id 52
        priority 100
        advert_int 1
        authentication {
             auth_type PASS
             auth_pass 1111
        }
        virtual_ipaddress {
            192.168.137.100
             }
    }
       

    8、检测脚本,为了防止haproxy服务关闭导致keepalived不自动切换。

    #vim /opt/check_haproxy.sh
    #!/bin/bash
    if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
         /etc/init.d/haproxy  start
    fi
    sleep 2
    if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
           /etc/init.d/keepalived stop
    fi
       

    9、启动两台keepalived和Haproxy服务。

    #servcie haproxy start
    #service keepalived start
       

    10、查看两台服务器的VIP 查看
    查看192.168.137.254:

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:dc:01:3e brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.254/24 brd 192.168.137.255 scope global eth0
    inet 192.168.137.200/32 scope global eth0

    查看192.168.137.253:

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:d5:e7:3d brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.253/24 brd 192.168.137.255 scope global eth0
    inet 192.168.137.100/32 scope global eth0
    inet6 fe80::20c:29ff:fed5:e73d/64 scope link
    valid_lft forever preferred_lft forever

    11、测试,关闭任意一台keepalived,img和www域名访问正常。 后续会对Nginx+Keepalived 双主结果做测试。

    我的VM测试

    # 机器A keepalived.conf
    global_defs {
            router_id NodeA
    }
    
    vrrp_instance VI_1 {
            state MASTER
            interface eth0
            virtual_router_id 55
            priority 150
            advert_int 1
            nopreempt
    
            authentication {
                    auth_type PASS
                    auth_pass 1111
            }
    
            virtual_ipaddress {
                    192.168.28.188/24
            }
    }
    
    
    
    
    # 机器B
    global_defs {
            router_id NodeB
    }
    
    vrrp_instance VI_1 {
            state BACKUP
            interface eth0
            virtual_router_id 55
            priority 149
            advert_int 1
            nopreempt
    
            authentication {
                    auth_type PASS
                    auth_pass 1111
            }
    
            virtual_ipaddress {
                    192.168.28.188/24
            }
    }
    
    
    # 查看当前IP使用机器 
    # ip a
    
  • 相关阅读:
    【codeforces 797C】Minimal string
    【codeforces 797E】Array Queries
    【codeforces 796C】Bank Hacking(用一些技巧来代替multiset)
    【POJ 1860】Currency Exchange
    【微软2017年预科生计划在线编程笔试 A】Legendary Items
    【微软2017年预科生计划在线编程笔试 B】Tree Restoration
    【codeforces 797D】Broken BST
    【[Offer收割]编程练习赛11 C】岛屿3
    【[Offer收割]编程练习赛11 B】物品价值
    【codeforces 789D】Weird journey
  • 原文地址:https://www.cnblogs.com/freebird92/p/7239915.html
Copyright © 2020-2023  润新知