设为首页 收藏本站
查看: 3181|回复: 0

[经验分享] HAproxy + Keepalived负载均衡的安装部署及使用笔记(ubuntu)

[复制链接]

尚未签到

发表于 2018-12-29 09:23:17 | 显示全部楼层 |阅读模式
负载均衡的安装部署及使用手册

一、首先环境介绍:

LB110.10.13.240
LB210.10.13.241
  web server1 10.10.13.243
  web server2 10.10.13.244
LB1LB2keepalived主从,对haproxy服务提供切换;haproxy服务将调度两台web server
  web server 的对外虚拟IP10.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 }tcp4层,http7层,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 //允许插入serveridcookie中,serverid后面可以定义
   server app1 10.10.13.243:80 cookie 1 check fall 5 weight 1 //真实服务器配置定义cookie 1表示serverid1check表示需要状态检查,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配置结束。

3HA-Proxy日志配置说明:
HA-Proxy可以收集本机及其他后端服务器日志,但是需要在Load Balancer240/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




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


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信号,这个参数放在命令行的最后
2HAProxy 错误排除

在上述启动时, 若有出现下述错误:
    Starting haproxy: [ALERT] 015/191034 (15631) : Starting proxy webfarm: cannot bind socket...on both load balancer

   
    [ALERT] 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 的设定中, 会以此写入的为主。
4httpchk 范例

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、 keepalivedipvsadm 是在一起使用的,不可缺少。所以,要先安装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 此命令可以看到,
  eth010.10.13.240ip下有一个新的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
  eth010.10.13.241ip下没有新的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、 240keepalived服务停掉,重新看一下:
240ip 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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-657090-1-1.html 上篇帖子: HAproxy + Keepalived负载均衡的安装部署及使用笔记(ubuntu) 下篇帖子: keepalived的原理以及配置使用详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表