zoukankan      html  css  js  c++  java
  • haproxy 安装 各个参数的测试

     down:http://www.haproxy.org/

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    注意:haproxy代理ssl有两种方式

    1.haproxy本身提供ssl证书,后面的web服务器走正常的http

    2 haproxy本身只提供代理,后面的web服务器https

    第一种方法 需要在编译haproxy支持ssl

    [root@ha02 haproxy-1.4.26]# make TARGET=linux26 USE_OPENSSL=1 ADDLIB=-lz

    不过有报错:

    btree/ebsttree.o ebtree/ebimtree.o ebtree/ebistree.o   -lcrypt -lz
    /usr/bin/ld: cannot find -lz
    collect2: ld returned 1 exit status
    make: *** [haproxy] Error 1
    解决方法:
    # yum install zlib-devel

    如果装完如果没报错,查看haproxy并没有支持ssl

    [root@ha02 sbin]# ldd haproxy |grep ssl
    [root@ha02 sbin]# 
    查看发现并没有安装openssl-devel
    [root@ha02 sbin]# rpm -qa|grep openssl
    openssl-1.0.1e-42.el6.x86_64
    [root@ha02 sbin]# yum install openssl-devel
    安装上了,好像还是不行:
    [root@ha02 sbin]# rpm -qa|grep openssl
    openssl-1.0.1e-48.el6_8.3.x86_64
    openssl-devel-1.0.1e-48.el6_8.3.x86_64

    还是不行!!!

    换了个版本为haproxy-1.4.26成功了

    [root@ha02 sbin]# ldd haproxy|grep ssl
        libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007efd2d921000)

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    [root@ha01 haproxy-1.4.26]# uname -a
    Linux ha01 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
    [root@ha01 haproxy-1.4.26]# make TARGET=linux26 ARCH=x86_64 PREFIX=/apps/haproxy-1.4.26
    gcc -Iinclude -Iebtree -Wall -m64 -march=x86-64 -O2 -g -fno-strict-aliasing       -DTPROXY -DCONFIG_HAP_CRYPT -DENABLE_POLL -DENABLE_EPOLL -DENABLE_SEPOLL -DNETFILTER -DUSE_GETSOCKNAME  -DCONFIG_HAPROXY_VERSION="1.4.26" -DCONFIG_HAPROXY_DATE="2015/01/30" 
              -DBUILD_TARGET='"linux26"' 
              -DBUILD_ARCH='"x86_64"' 
              -DBUILD_CPU='"generic"' 
              -DBUILD_CC='"gcc"' 
              -DBUILD_CFLAGS='"-m64 -march=x86-64 -O2 -g -fno-strict-aliasing"' 
              -DBUILD_OPTIONS='""' 
               -c -o src/haproxy.o src/haproxy.c
    make: gcc: Command not found
    make: *** [src/haproxy.o] Error 127
    [root@ha01 haproxy-1.4.26]# yum install gcc -y
    [root@ha01 haproxy-1.4.26]# make TARGET=linux26 ARCH=x86_64 prefix=/apps/haproxy-1.4.26
    #TARGET=linux26,ARCH=x86_64#26以上的都用linux26
    #TARGET是指内核版本,ARCH指定CPU架构
    [root@ha01 haproxy-1.4.26]# make install PREFIX=/apps/haproxy-1.4.26
    [root@ha02 haproxy-1.4.26]# tree /apps/
    /apps/
    └── haproxy-1.4.26
        ├── doc
        │   └── haproxy
        │       ├── architecture.txt
        │       ├── configuration.txt
        │       ├── haproxy-en.txt
        │       └── haproxy-fr.txt
        ├── sbin
        │   └── haproxy
        └── share
            └── man
                └── man1
                    └── haproxy.1
    [root@ha02 haproxy-1.4.26]# cp examples/haproxy.cfg /apps/haproxy-1.4.26/
    [root@ha02 haproxy-1.4.26]# pwd
    /usr/local/src/haproxy-1.4.26

    [root@ha02 haproxy-1.4.26]# cat haproxy.cfg
    # this config needs haproxy-1.4.26
    global
    log 127.0.0.1 local0 warning #日志输出配置,所有日志都记录在本机,通过local0输出
    maxconn 4096 #最大连接数
    #chroot /apps/apps/haproxy-1.4.26 #改变当前工作目录
    uid 99 #所属用户的uid
    gid 99 #所属运行的gid
    daemon #以后台形式运行haproxy
    nbproc 1 

    #haproxy启动时的进程数,<=CPU的核数,常见的2棵8核心CPU的服务器>,共16核心,则可以将其值设置为<=16,创建多个进程数,可以减少每个进程的任
    务队列,但是过多的进程数也可能会导致进程的崩溃。

    pidfile /var/run/haproxy.pid
    defaults
    log global
    mode http #默认的模式mode {tcp|http|health},tcp是4层,http是7层,health只会返回ok
    option httplog
    option forwardfor except 127.0.0.0/8
    option dontlognull
    option redispatch
    #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
    option abortonclose
    #当服务器负载很高的时候,自动结束掉当队列处理比较久的链接
    retries 3 #3次连接失败就认为是服务器不可用
    maxconn 2000 #默认最大连接数
    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
    #balance roudrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数
    option httpchk HEAD /index.html
    #检测文件,如果分发到后台index.html访问不到就不再分发给它"特别注意HEAD如果没有它是不成功的"用GET也可以,但我不知道name和get的区别!
    server web01 192.168.1.104:80 check inter 2000 fall 3 weight 30
    server web01 192.168.1.105:80 check inter 2000 fall 3 weight 20
    backend imgserver
    #node http
    option httpchk /index.php
    balance roundrobin
    server img01 192.168.1.106:80 check inter 2000 fall 3
    server img02 192.168.1.107:80 check inter 2000 fall 3

    [root@ha02 haproxy-1.4.26]# ./sbin/haproxy -f ./haproxy.cfg
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      2444/./sbin/haproxy 
    tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1631/sshd           
    tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1473/master         
    tcp        0      0 :::22                       :::*                        LISTEN      1631/sshd           
    tcp        0      0 ::1:25                      :::*                        LISTEN      1473/master         
    udp        0      0 0.0.0.0:68                  0.0.0.0:*                               1227/dhclient       
    udp        0      0 0.0.0.0:45396               0.0.0.0:*                               2444/./sbin/haproxy 
    [root@ha02 haproxy-1.4.26]# ps auxwwf|grep -v 'grep'|grep haproxy
    nobody    2444  0.1  0.3  12080  1624 ?        Ss   06:29   0:01 ./sbin/haproxy -f ./haproxy.cfg
    [root@ha02 haproxy-1.4.26]# ./sbin/haproxy -f /apps/haproxy-1.4.26/haproxy.cfg -c
    Configuration file is valid
    #-c 是检查语法是否有问题

     注意:chroot /apps/apps/haproxy-1.4.26 #改变当前工作目录 会无法启动,原因查找。

    暂时实现结果:

    [root@ha02 haproxy-1.4.26]# ./sbin/haproxy -v
    HA-Proxy version 1.4.26 2015/01/30
    Copyright 2000-2015 Willy Tarreau <w@1wt.eu>

    http://www.cnblogs.com/MacoLee/p/5853413.html

    通过web看状态信息:

    stats enable

    stats uri /admin?stats

    stats auth proxy:xxxxx

    -----------------------------------------

    option forwarfor:让realserver记真实的用户的ip

    inter 5000 是指间隔5秒做一个检测!!!!!

    fall 5 5次失败会被提掉!!!!!

    rise 2 检测2次好了,再把恢复的服务器加进来!!!

    check port 22 对22号端口做健康检查,如果不通就踢出去相当于没配这个一行参数

    =========================================

    平滑重启:

    haproxy -f $CONFFILE -sf $(cat $PIDFILE)

    上面的平滑重启好像有问题:

    改成下面的命令:

    [root@ha02 ~]# /apps/haproxy-1.4.26/sbin/haproxy -f /apps/haproxy-1.4.26/haproxy.cfg  -st $(cat /var/run/haproxy.pid)
    [root@ha02 ~]# ps aux|grep haproxy
    nobody    4228  0.0  0.2  11960  1372 ?        Ss   22:24   0:00 /apps/haproxy-1.4.26/sbin/haproxy -f /apps/haproxy-1.4.26/haproxy.cfg -st 4220
    root      4230  0.0  0.1 103312   856 pts/0    S+   22:24   0:00 grep haproxy

    --------------------------------------------------------

    frontend:用来匹配接收客户所请求的域名,uri等,并针对不同的区配,做不同的请求处理。

    ===============================================================

    stats realm baison-test-Haproxy #统计页面密码框上提示文本

    HAProxy的算法现在也越来越多了,具体有如下8种:
    ①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
    ②static-rr,表示根据权重,建议关注;
    ③leastconn,表示最少连接者先处理,建议关注;
    ④ource,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
    ⑤ri,表示根据请求的URI;
    ⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name;
    ⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
    ⑧rdp-cookie(name),表示根据cookie(name)来锁定并哈希每一次TCP请求。

      stats uri /stats        #统计页面url

    可以改一下:

    stats uri /vip

    ==================================================

    HEAD配置方法:
    option httpchk HEAD /checkstatus.html HTTP/1.0
    这种检测方式就相当于curl http://192.168.1.82/checkstatus.html

    在配置内核参数开发转发功能:
    在/etc/sysctl.conf中加入如下配置

    net.ipv4.ip_forward=1

    sysctl -p

    -----------------注意haproxy监听端口不能重复,backend端口可以相同(前题在不能的服务器上面)---------------------------------

    如果重复会报错

    frontend和backend的端口可以为不同的端口(规范考虑最好一致)

    frontend server01_test.xxxxx.com:8010
        bind *:8010 
        mode http
        default_backend server-name01
    frontend server02_test.guoeryyyyyyyyy.com:8011
        bind *:8011
        mode http
        default_backend server-name02
    backend server-name02
        mode http
        balance roundrobin
        cookie SERVERID
        option httpchk HEAD /chk/chk.html
        server test2 10.17x.xxx.xxx:8010 cookie test2 weight 6 check inter 2000 rise 2 fall 3
    backend server-name01
        mode http
        balance roundrobin
        cookie SERVERID insert nocache
        option httpchk HEAD /chk/chk.html
        server srv130 10.1x2.2xx.xxx:8010 cookie srv130 weight 6 check inter 2000 rise 2 fall 3
  • 相关阅读:
    两种代理模式(JDK和Cglib)实例
    打印1到最大的n位数
    二叉树的构建以及先中后序遍历
    二维数组的查找
    斐波那契递归和非递归俩种算法实例
    淘宝tairKV分布式
    OSI七层模型详解
    Spring事务配置的五种方式
    linux中cat、more、less、tail、head命令的区别
    跨域的理解与实现
  • 原文地址:https://www.cnblogs.com/bass6/p/6009421.html
Copyright © 2011-2022 走看看