不信网恋 发表于 2018-12-29 09:23:17

HAproxy + Keepalived负载均衡的安装部署及使用笔记(ubuntu)

负载均衡的安装部署及使用手册
一、首先环境介绍:

LB1:10.10.13.240
LB2:10.10.13.241
  web server1 :10.10.13.243
  web server2 :10.10.13.244
LB1和LB2做keepalived主从,对haproxy服务提供切换;haproxy服务将调度两台web server,
  web server 的对外虚拟IP是10.10.13.245 。
  二、243/244:两台RealServer的 web服务配置
  1、先安装web服务: apt-get install apache2
2、修改web服务器日志格式
vi /etc/apache2/apache2.conf
  #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
3、注释掉原来的CustomLog,并修改文档根路径DocumentRoot为/var/www
vi /etc/apache2/sites-available/default
SetEnvIf Request_URI "^/check\.txt$" dontlog
  CustomLog /var/log/apache2/access.log combined env=!dontlog
  echo "The web service provider is 243|244" > /var/www/index.html
4、重启web服务器
/etc/init.d/apache2 restart

5、建立check文件,haproxy使用该文件检查WEB状态,必须建立
touch /var/www/check.txt
  三、240/241两台服务器的haproxy配置
1、 安装haproxy
wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.22.tar.gz
tar xvf haproxy-1.4.22.tar.gz
cd haproxy-1.4.22
make TARGET=36-Ubuntu
make PREFIX=/usr/local/haproxy install

2、 编辑其配置文件
cd /etc
mkdir haproxy
vim haproxy/haproxy.cfg
  ###########全局配置#########
global
      #daemon
        #nbproc 1
        #pidfile /var/run/haproxy.pid
        log 127.0.0.1 local0
        log 127.0.0.1 local1 notice
        maxconn 4096
  ########默认配置############
defaults
        log global
        mode http               #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        retries 3            #两次连接失败就认为是服务器不可用,也可以通过后面设置
        #option redispatch       #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        #option abortonclose   #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        option httplog
        option dontlognull
        option redispatch
        maxconn 2000            #默认的最大连接数
        timeout connect 5000ms    #连接超时
        timeout client 30000ms    #客户端超时
        timeout server 30000ms   #服务器超时
        #timeout check 2000       #=心跳检测超时
    log 127.0.0.1 local0 err    #开启记录haproxy日志
listen web 10.10.13.245:80
        mode http
        stats enable
        balance roundrobin
        option httpclose
        option forwardfor
        option httpchk HEAD /check.txt HTTP/1.0
        server nc243 10.10.13.243:80 cookie A check
        server nc244 10.10.13.244:80 cookie B check
或者:

frontend shishi
        bind *:82
        mode http
        acl api_net url_sub -i sip_apiname=engagecloud
        use_backend engagecloud if api_net
        default_backend engagecloud
backend engagecloud
        mode http
        balance roundrobin
        server app 10.15.14.130:80 cookie A
        server app1 10.15.14.131:8080 cookie B
backend salesapp
        mode http
        server app1 10.15.14.131:8080 cookie B

frontend shishi2
        bind *:822
        mode http
        acl api_net url_sub -i sip_apiname=engagecloud
        use_backend engagecloud if api_net
        default_backend salesapp1   
backend engagecloud1
        mode http
        server app 10.15.14.130:80 cookie A
backend salesapp1
        mode http
        server app1 10.15.14.131:8080 cookie B
        server app 10.15.14.130:80 cookie A
frontend http-ip //前端节点定义

bind 10.10.13.245:80   //虚拟服务节点监听80端口
    mode http
    log global
    option httplog
    option httpclose //每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式,只能够模拟这种模式的实现
    option forwardfor   //如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP
    capture request header Host len 20 //此配置和一下的类似配置都是抓取Http请求中的参数记录到日志中。
    capture request header User-Agent len 16
    capture request header Content-Length len 10   
    capture request header Referer len 20
    capture response header Content-Length len 10
//控制策略的配置,参考别人的配置,使用时要根据自己的实际情况。
    acl api_taobao url_sub -i sip_apiname=taobao. //在请求url中包含sip_apiname=taobao,则此控制策略返回true,否则为false
    acl api_alisoft url_sub -i sip_apiname=alisoft. //在请求url中包含sip_apiname=alisoft,则此控制策略返回true,否则为false
    acl invalid_req url_sub -i sip_apiname= //在请求url中包含sip_apiname=,则此控制策略返回true,否则为false
    acl stat_req url_dir -i admin //在请求url中存在admin作为部分地址路径,则此控制策略返回true,否则返回false
    block if !invalid_req !stat_req //block表示阻止请求,返回403错误,当前表示如果不满足策略invalid_req,同时也不满足策略stat_req,则阻止请求。(就是要求URL中必需有参数sip_apiname,除非是查看服务器状态的URL)。
    use_backend alisoft_server if api_alisoft //如果是满足策略api_alisoft的情况,则使用alisoft_server作为后端服务集群。
    use_backend taobao_server if api_taobao //如果是满足策略api_taobao的情况,则使用taobao_server作为后端服务集群。
    default_backend alisoft_server //使用alisoft_server作为默认后端服务集群。
backend alisoft_server //后端节点1定义
   mode http
   balance roundrobin //负载均衡策略配置
   cookie SERVERID //允许插入serverid到cookie中,serverid后面可以定义
   server app1 10.10.13.243:80 cookie 1 check fall 5 weight 1 //真实服务器配置定义cookie 1表示serverid为1,check表示需要状态检查,fall 5表示失败五次就认为服务器状态不可用(不在接受请求),weight 1表示权重
server app2 x.x.x.x:8080 cookie 1 check fall 5 weight 10
backend taobao_server //后端节点2定义
   mode http
   server app1 10.10.13.244:80 check fall 5

listen haproxy-status 10.10.13.245:8888
      mode          http
      option      httplog
       stats uri   /haproxy-stats
      stats realm   Global\ statistics
      stats auth    admin:123456
haproxy配置结束。

3、HA-Proxy日志配置说明:
HA-Proxy可以收集本机及其他后端服务器日志,但是需要在Load Balancer(240/241)上作一些配置。
首先修改/etc/sysconfig/syslog文件,将SYSLOGD_OPTIONS="-m 0” 修改为SYSLOGD_OPTIONS="-m 0 -r -x",支持收集远程服务器日志。
然后修改/etc/syslog.conf,增加如下语句:
#add by haproxy
local0.* /path/to/haproxy.log //需要存储日志的地址
执行service syslog restart,重新启动系统日志器
最后就是在HA-Proxy的配置中增加日志输出,即capture 后的内容。

4、启动haproxy服务
  /usr/local/haproxy/sbin/haproxy –f /etc/haproxy/haproxy.cfg –d   或者-D
也可以:
cd /usr/local/haproxy/sbin
./haproxy –f /etc/haproxy/haproxy.cfg

5、打开网页测试:


http://10.10.13.245
http://blog.运维网.com/attachment/201210/100825614.png

http://blog.运维网.com/attachment/201210/100715758.png

6、打开haproxy的状态信息页:
http://10.10.13.245:8888/haproxy-stats

http://blog.运维网.com/attachment/201210/100847925.png
HAproxy 使用手册:
1、 HAProxy 常用参数说明
#./haproxy –help //haproxy相关命令参数介绍.
haproxy -f[-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p] [-s] [-l] [-dk] [-ds] [-de] [-dp] [-db] [-m ] [{-sf|-st} pidlist...]
-d   前台,debug模式
-D   daemon模式启动
-q   安静模式,不输出信息
-V   详细模式
-c   对配置文件进行语法检查
-s   显示统计数据
-l   显示详细统计数据
-dk    不使用kqueue
-ds    不使用speculative epoll
-de    不使用epoll
-dp    不使用poll
-db    禁用后台模式,程序跑在前台
-sf    程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后
-st    程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后
2、HAProxy 错误排除
在上述启动时, 若有出现下述错误:
    Starting haproxy: 015/191034 (15631) : Starting proxy webfarm: cannot bind socket...on both load balancer
    或
    056/103843 (1358) : Starting proxy www-balancer: cannot bind socket
解法
    暂时解法, 直接先修改设定, 让它先跑起来:
      sysctl -e net.ipv4.ip_nonlocal_bind=1
    永久解法, 让开机时自动设此参数.
      sysctl -a | grep nonlocal   #看是否已经有设定此参数
      vim /etc/sysctl.conf # 最下面加入
      net.ipv4.ip_nonlocal_bind=1
还有一种可能就是,haproxy Load Balancer的机器上开启了web服务,关闭即可。要保证web服务,在这两台机器上是关掉的。
3、 HAProxy 配置手册
haproxy.cfg 有分下列三种: (haproxy.cfg 的三个主项目)
    global
    listen
    defaults
注:
    下述所有都必须由 大/小 写字母、数字、 -、 . 、: 组成. (大小写会视为不同名称)
    defaults : 下面所有参数的预设设定值,下面的设定值会盖掉上面的。
    listen :完整的 Proxy 代理,frontend / backend 都在这个设定里 (用于 TCP)
global 分类
global 部分有下述几类:

    行程管理和安全
    chroot
      daemon: 执行 -D 也是同样
      gid
      group
      uid
      log
      nbproc: deamon 才能使用, 也是最推荐的模式, 如果小档案很多, 建议要多开几个, 但是 debug 时不建议开此参数. (arg: nbproc )
      pidfile
      ulimit-n: 设定每个行程最大文件数, 此值会自动计算, 不建议设定此参数 (arg: ulimit-n )
      user
    stats
   性能调校
   maxconn: 最大连接数, 同 -n (arg: maxconn )
       noepoll: 在 Linux 系统不使用 epoll, 等同 -de
       nokqueue: 在 BSD 不使用 kqueue polling, 同 –dk
       nopoll: 此 poll 在任何机器都可以跑, 不建议关闭, 同 -dp
       nosepoll: 在 Linux 系统不使用 speculative epoll, 等同 -ds
   spread-checks: 多久去 check 一次, 默认值 0 (arg: spread-checks )
   tune.maxaccept
   tune.maxpollevents
    测试
    debug: 将所有讯息都显示到画面上, 同 -d
    quiet: 不显示任何讯息, 同 -v

listen 分类
    listen[ :[,...] ]
listen 部分有下述几类:
    bind
    mode: TCP / HTTP / health
    balance: roundrobin / source / url / url_param
    server
    option
    # defaults 的参数都可于此写入, 于此 listen 的设定中, 会以此写入的为主。
4、httpchk 范例
httpchk (启用 HTTP 的 server health check.) 特别重要, 范例多记录一点.
    option httpchk
    option httpchk
    option httpchk
    option httpchk   
    ex:
      # Relay HTTPS traffic to Apache instance and check service availability
      # using HTTP request "OPTIONS * HTTP/1.1" on port 80.
      backend https_relay
            mode tcp
            option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
            server apache1 192.168.1.1:443 check port 80
      option httpchk GET /robots.txt
      option httpchk GET /index.html
      option httpchk *
    option httpchk GET /robots.txt # 指的是 GET /robots.txt HTTP/1.0
    option httpchk # 指的是 OPTIONS / HTTP/1.0
    option httpchk * # 指的是 OPTIONS * HTTP/1.0
  四、240/241两台服务器的keepalived配置
1、 安装keepalived
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar xvf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7
./configure –prefix=/usr/local/keepalived/
make
make install

2、 keepalived和ipvsadm 是在一起使用的,不可缺少。所以,要先安装ipvsadm。
apt-get install ipvsadm

3、 编辑配置文件
mkdir –pv /etc/keepalived
vim /etc/keepalived/keepalived.conf

global_defs {
        router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER         #241服务器上将MASTER改为BACKUP
interface eth0          #HA监测网络接口
virtual_router_id 51   #主、备机的virtual_router_id必须相同
priority 90            #主、备机取不同的优先级,主机值较大,241的值较小
advert_int 1         #VRRP Multicast广播周期秒数
authentication {
              auth_type PASS       #VRRP认证方式
              auth_pass 123456789   #VRRP口令字
        }
virtual_ipaddress {
        10.10.13.245    #LVS虚拟地址
        }
}

4、 启动keepalived服务
  /usr/local/keepalived/sbin/keepalived –f /etc/keepalived/keepalived.conf
ipvsadm –l
ip a 此命令可以看到,
  在eth0的10.10.13.240的ip下有一个新的ip生成。如:
  1: lo:mtu 16436 qdisc noqueue state UNKNOWN
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
      inet6 ::1/128 scope host
         valid_lft forever preferred_lft forever
  2: eth0:mtu 1500 qdisc pfifo_fast state UP qlen 1000
      link/ether 00:e0:4c:ec:d7:e5 brd ff:ff:ff:ff:ff:ff
    inet 10.10.13.240/24 brd 10.10.13.255 scope global eth0
      inet 10.10.13.245/32 scope global eth0
      inet6 fe80::2e0:4cff:feec:d7e5/64 scope link
         valid_lft forever preferred_lft forever
  在eth0的10.10.13.241的ip下没有新的ip生成,如下:
  1: lo:mtu 16436 qdisc noqueue state UNKNOWN
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
      inet6 ::1/128 scope host
         valid_lft forever preferred_lft forever
  2: eth0:mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
      link/ether 00:e0:4c:ec:d7:d3 brd ff:ff:ff:ff:ff:ff
    inet 10.10.13.241/24 brd 10.10.13.255 scope global eth0
      inet6 fe80::2e0:4cff:feec:d7d3/64 scope link
         valid_lft forever preferred_lft forever
5、 将240的keepalived服务停掉,重新看一下:
240:ip a
  1: lo:mtu 16436 qdisc noqueue state UNKNOWN
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
      inet6 ::1/128 scope host
         valid_lft forever preferred_lft forever
  2: eth0:mtu 1500 qdisc pfifo_fast state UP qlen 1000
      link/ether 00:e0:4c:ec:d7:e5 brd ff:ff:ff:ff:ff:ff
    inet 10.10.13.240/24 brd 10.10.13.255 scope global eth0
      inet6 fe80::2e0:4cff:feec:d7e5/64 scope link
         valid_lft forever preferred_lft forever
241::ip a
  1: lo:mtu 16436 qdisc noqueue state UNKNOWN
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
      inet6 ::1/128 scope host
         valid_lft forever preferred_lft forever
  2: eth0:mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
      link/ether 00:e0:4c:ec:d7:d3 brd ff:ff:ff:ff:ff:ff
      inet 10.10.13.241/24 brd 10.10.13.255 scope global eth0
    inet 10.10.13.245/32 scope global eth0
      inet6 fe80::2e0:4cff:feec:d7d3/64 scope link
         valid_lft forever preferred_lft forever




页: [1]
查看完整版本: HAproxy + Keepalived负载均衡的安装部署及使用笔记(ubuntu)