Haproxy 部署 & 编译 - CDN 安装部署 CDN


https://hub.docker.com/_/haproxy

https://github.com/haproxy/haproxy/releases

#run

docker run -d  --net=host --name cdn  --restart=always  --privileged=true --user=root -e TZ='Asia/Shanghai' --ulimit nofile=262144:262144  -v /data/site/docker/env/nginx/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro  -v /data/file:/data/file  haproxy:latest   haproxy -f /usr/local/etc/haproxy/haproxy.cfg  


--net=host

--sysctl net.ipv4.ip_unprivileged_port_start=0


docker logs -f --tail="30" cdn


docker exec -it cdn  /bin/bash


apt-get update -y;

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

apt-get install -y wget vim net-tools curl git cron zip unzip 

apt-get dist-upgrade -y 

apt-get upgrade -y 

apt autoremove    

apt clean


docker commit -m="update" -a="htmltoo.com" cdn  hub.htmltoo.com:5000/http:cdn

docker push hub.htmltoo.com:5000/http:cdn


# nuster - CDN

https://abc.htmltoo.com/thread-44996.htm


#web管理

http://b.htmltoo.com:8888


global
   log /data/file/logs/haproxy local0
   log /data/file/logs/haproxy local1 notice
   maxconn           20480
   #user    haproxy           #运行haproxy的用户
   #group   haproxy           #运行haproxy的用户组
   daemon          # 设置为后台进程
   ulimit-n 82000  # ulimit的数量限制
defaults
   log global   #引入global定义的日志格式
   mode tcp     #所处理的类别(7层代理http,4层代理tcp)
   retries 3             #3次连接失败就认为服务器不可用,也可以通过后面设置
   timeout connect     10s  #连接超时
   timeout client     1m   #客户端超时
   timeout server     1m   #服务器超时
   
listen WEB-STATUS
   bind 0.0.0.0:8888
   mode http
   #stats uri /haproxy?stats     # 访问的uri:ip:8888/haproxy?stats
   stats uri /
   stats refresh 30s
   stats realm welcome login\ Haproxy 
   #haproxy web管理用户名密码,自行设置
   stats auth ihunter:wdq54321
   stats hide-version
   stats admin if TRUE
   
frontend mariadb:13306
   bind *:13306
   mode   tcp
   timeout client  30000  # 客户端超时
   default_backend    mariadb
backend mariadb
   mode        tcp
   option redispatch  # 当serverId对应的服务器挂掉后,强制定向到其他健康的服务器  
   option abortonclose  # 当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
   balance roundrobin  # 负载均衡算法,   leastconn: 最小连接算法 
   server  db1 b.htmltoo.com:3306 check weight 1 maxconn 2000 check inter 2000 rise 2 fall 3


---访问控制

-不允许172.25.66.250访问

acl blacklist src 172.25.14.250   ##重定向
redirect location http://172.25.14.1:8080/index.html  if blacklist

-动静分离

 frontend public
         bind            *:80 name clear
         use_backend     dynamic if { path_end -i *.php   }
         default_backend dynamic
 
 # the application servers go here
 backend dynamic
         balance         roundrobin
         server          dynsrv1 172.25.66.3:80 check inter 1000
 backend static
         balance roundrobin
         server          dynsrv2 172.25.66.4:80 check inter 1000

-读写分离

frontend public
       bind            *:80 name clear
       acl write method POST
       acl write method        put
       use_backend     dynamic if write
       default_backend static

-Haproxy配置Http转发,透传真实IP

mode http              #模式改为http
option forwardfor      #开启forwardfor选项


#编译安装

cd  /opt
yum install gcc pcre-static pcre-devel -y
wget https://github.com/haproxy/haproxy/archive/v2.2.0.tar.gz -O  /opt/haproxy.tar.gz
tar xzvf  haproxy.tar.gz -C /opt/haproxy
cd  haproxy
make TARGET=linux2628
make install
mkdir -p /etc/haproxy
mkdir -p /var/lib/haproxy
touch /var/lib/haproxy/stats
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
cp /opt/haproxy/examples/haproxy.init /etc/init.d/haproxy
chmod 777 /etc/init.d/haproxy
systemctl daemon-reload
useradd -r haproxy
haproxy -v
chkconfig haproxy on


#4层配置 haproxy.cfg

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon
# turn on stats unix socket
#stats socket /var/lib/haproxy/stats mode 600 level admin
defaults
   log global
   mode http
   option httplog
   option dontlognull
   maxconn           256000
   timeout connect 5000
   timeout client 50000
   timeout server 50000
listen admin_stat
    #haproxy的web管理端口 8888,自行设置
    bind 0.0.0.0:8888
    mode http
    stats refresh 30s
    #haproxy web管理url,自行设置
    stats uri /haproxy_stats
    stats realm Haproxy\\ Statistics
    #haproxy web管理用户名密码,自行设置
    stats auth admin:admin
    stats hide-version
frontend http_front
   bind *:8098
#   stats uri /haproxy?stats
   default_backend http_back
backend http_back
   balance roundrobin
    option      httpchk GET /ping
   server      riakkv1 10.200.124.111:8098 check
   server      riakkv2 10.200.124.112:8098 check
   server      riakkv3 10.200.124.113:8098 check
   server      riakkv4 10.200.124.114:8098 check
   server      riakkv5 10.200.124.115:8098 check
   server      riakkv6 10.200.124.116:8098 check
   server      riakkv7 10.200.124.117:8098 check
   server      riakkv8 10.200.124.118:8098 check
   server      riakkv9 10.200.124.119:8098 check
   server      riakkv10 10.200.124.120:8098 check
frontend tcp_front
   bind *:8087
    mode                 tcp
    option             tcplog
    option             contstats
    option             tcpka
   default_backend tcp_back
backend tcp_back
    balance     leastconn
    mode        tcp
    option      tcpka
    option      srvtcpka
   server      riakkv1 10.200.124.111:8087 check
   server      riakkv2 10.200.124.112:8087 check
   server      riakkv3 10.200.124.113:8087 check
   server      riakkv4 10.200.124.114:8087 check
   server      riakkv5 10.200.124.115:8087 check
   server      riakkv6 10.200.124.116:8087 check
   server      riakkv7 10.200.124.117:8087 check
   server      riakkv8 10.200.124.118:8087 check
   server      riakkv9 10.200.124.119:8087 check
   server      riakkv10 10.200.124.120:8087 check


#web管理加密(http://:8181)

listen stats
  bind *:8181
  stats enable
  stats uri /
  stats realm Haproxy\\ Statistics
  stats auth username:password


#配置例子

frontend http_front
  bind *:80
  stats uri /haproxy?stats
  acl url_blog path_beg /blog
  use_backend blog_back if url_blog
  default_backend http_back
backend http_back
  balance roundrobin
  server <server name> <private IP>:80 check
  server <server name> <private IP>:80 check
backend blog_back
  server <server name> <private IP>:80 check


#生产环境事例

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   maxconn           600000
   user haproxy
   group haproxy
   daemon
# turn on stats unix socket
#stats socket /var/lib/haproxy/stats mode 600 level admin
defaults
   log global
   mode http
   option httplog
   option dontlognull
   maxconn         500000
   timeout connect 5000
#   timeout client 50000
#   timeout server 50000
listen WEB-STATUS
   bind 0.0.0.0:18080
   mode http
#   stats refresh 30s
   stats uri /haproxy?stats
frontend rabbitmq5672-192.168.200.28:15672
   bind *:5672
   mode               tcp
   option             tcplog
   option             contstats
   option             tcpka
   default_backend    rabbitmq-nodes
backend rabbitmq-nodes
   balance     leastconn
   mode        tcp
   option      tcpka
   option      srvtcpka
   server      mq1 192.168.200.29:5672 check
   server      mq2 192.168.200.36:5672 check
   server      mq3 192.168.200.43:5672 check
frontend riak-kv-http8098
   bind *:8098
   default_backend riak-kv-http-nodes
backend riak-kv-http-nodes
   balance     static-rr
   option      httpchk GET /ping
   server      riakkvh1 192.168.200.18:8098 check
   server      riakkvh2 192.168.200.19:8098 check
   server      riakkvh3 192.168.200.16:8098 check
   server      riakkvh4 192.168.200.12:8098 check
   server      riakkvh5 192.168.200.21:8098 check
frontend riak-kv-tcp8087
   bind *:8087
   mode               tcp
   option             tcplog
   option             contstats
   option             tcpka
   default_backend    riak-kv-tcp-nodes
backend riak-kv-tcp-nodes
   balance     leastconn
   mode        tcp
   option      tcpka
   option      srvtcpka
   server      riakkvt1 192.168.200.18:8087 check
   server      riakkvt2 192.168.200.19:8087 check
   server      riakkvt3 192.168.200.16:8087 check
   server      riakkvt4 192.168.200.12:8087 check
   server      riakkvt5 192.168.200.21:8087 check
#TCP  192.168.200.200:8080 wrr
#  -> 192.168.200.25:8080          Route   1      0          0
#  -> 192.168.200.30:8080          Route   1      0          0
#  -> 192.168.200.33:8080          Route   1      0          0
#  -> 192.168.200.37:8080          Route   1      0          0
#  -> 192.168.200.39:8080          Route   1      0          0


vi /etc/haproxy/haproxy.cfg   

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   maxconn           600000
   user haproxy
   group haproxy
   daemon
defaults
   log global
   mode http
   option httplog
   option dontlognull
   maxconn         500000
   timeout connect 5000
listen WEB-STATUS
   bind 0.0.0.0:18080
   mode http
   stats uri /haproxy?stats
frontend riak-kv-http8098
   bind *:8098
   default_backend riak-kv-http-nodes
backend riak-kv-http-nodes
   balance     static-rr
   option      httpchk GET /ping
   server      riakkvh1 192.168.200.18:8098 check
   server      riakkvh2 192.168.200.19:8098 check
frontend riak-kv-tcp8087
   bind *:8087
   mode               tcp
   option             tcplog
   option             contstats
   option             tcpka
   default_backend    riak-kv-tcp-nodes
backend riak-kv-tcp-nodes
   balance     leastconn
   mode        tcp
   option      tcpka
   option      srvtcpka
   server      riakkvt1 192.168.200.18:8087 check
   server      riakkvt2 192.168.200.19:8087 check


#外网配置实例

global
  log 127.0.0.1 local0
  chroot /var/lib/haproxy
  user   nobody
  group  nobody
  daemon
defaults
  mode http
  log global
  option  httplog
  option  http-server-close
  option  dontlognull
  option  redispatch
  option  contstats
  retries 3
  backlog 10000
  timeout client          25s
  timeout connect          5s
  timeout server          60s
  timeout tunnel        3600s
  timeout http-keep-alive  1s
  timeout http-request    15s
  timeout queue           30s
  timeout tarpit          60s
  default-server inter 3s rise 2 fall 3
listen bk_1883
    bind *:1883
    mode tcp
    balance roundrobin
    option  tcplog
    server server1 10.200.77.41:1883 maxconn 10000  check inter 10s weight 1


#配置文件说明

vim /usr/local/haproxy/etc/haproxy.cfg      

global
log 127.0.0.1  local0
#log 127.0.0.1  local1 notice
#log loghost    local0 info
maxconn 4096
chroot /usr/local/haproxy
uid 99                          #所属运行的用户uid
gid 99                          #所属运行的用户组
daemon                     #以后台形式运行haproxy
nbproc 1                   #启动1个haproxy实例。# #工作进程数量(CPU数量) ,实际工作中,应该设置成和CPU核心数一样。 这样可以发挥出最大的性能。
pidfile /usr/local/haproxy/run/haproxy.pid  #将所有进程写入pid文件
#debug      #调试错误时用
#quiet      #安静
 
defaults
log    global
log    127.0.0.1      local3        #日志文件的输出定向。产生的日志级别为local3. 系统中local1-7,用户自己定义
mode    http           #工作模式,所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
option  httplog                     #日志类别,记载http日志
option  httpclose      #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
option  dontlognull    #不记录空连接,产生的日志
option  forwardfor     #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option  redispatch     #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
retries 2              #2次连接失败就认为服务器不可用,主要通过后面的check检查
maxconn 2000           #最大连接数
balance roundrobin                    #负载均衡算法
stats  uri    /haproxy-stats          #haproxy 监控页面的访问地址 # 可通过 http://localhost:80/haproxy-stats 访问
timeout connect      5000             #连接超时时间。 单位:ms 毫秒
timeout client       50000            #客户端连接超时时间
timeout server      50000             #服务器端连接超时时间
mode    http
option  httpchk GET /index.html       #健康检测#注意实际工作中测试时,应该下载某一个页面来进行测试,因此这个页面应该是个小页面,而不要用首页面。这里是每隔一秒检查一次页面。
 
frontend http          #前端配置,http名称可自定义
bind 0.0.0.0:80        #发起http请求80端口,会被转发到设置的ip及端口
default_backend http_back   #转发到后端 写上后端名称
 
backend http_back    #后端配置,名称上下关联
server  s1 192.168.1.62:80  weight 3 check  #后端的主机 IP &权衡
server  s2 192.168.1.64:80  weight 3 check  #后端的主机 IP &权衡
#server node1 192.168.179.131:8081 check inter 2000 rise 3 fall 3 weight 30
    # inter 2000 健康检查时间间隔2秒
    # rise 3 检测多少次才认为是正常的
    # fall 3 失败多少次才认为是不可用的
# weight 30 权重


#关于负载均衡算法

  #source    根据请求源IP
  #static-rr   根据权重
  #leastconn    最少连接者先处理
  #uri     根据请求的uri
  #url_param   根据请求的url参数
  #rdp-cookie  据据cookie(name)来锁定并哈希每一次请求
  #hdr(name)  根据HTTP请求头来锁定每一次HTTP请求
  #roundrobin  轮询方式


#haproxy.cfg

global
    log 127.0.0.1 local0 info 
    maxconn 4096
    daemon 
    nbproc 1
defaults
   mode http
   retries 3
   timeout connect 5000
   timeout client 50000
   timeout server 50000
   timeout check 5s
frontend kubesphere30880-10.187.20.182:30880
   bind *:30880
   mode         tcp
   log	global
   default_backend    kubesphere
backend kubesphere
   balance     leastconn
   mode        tcp
   server      k8s1 10.187.20.182:30880 check
listen WEB-STATUS
   bind 0.0.0.0:18080
   mode http
   stats refresh 30s
   stats uri /haproxy-status
   stats realm welcome login\ Haproxy 
   #haproxy web管理用户名密码,自行设置
   stats auth admin:admin
   stats hide-version
   stats admin if TRUE


---global配置段

global
        maxconn         20000      #设定每个haproxy进程可以接受的最大并发连接数
        ulimit-n        16384      #设置最大打开的文件描述符数,在1.4的官方文档中提示,该值会自动计算,所以不建议进行设置
        log             127.0.0.1 local0  #全局日志文件配置条目,local2表示日志设备,最多可定义两个
        uid             200 
        gid             200
        user            haproxy            #指定运行haproxy的用户和组
        chroot          /var/lib/haproxy   #chroot 切换根目录,将haproxy都运行在/var/lib/haproxy 这样做是为了增加haproxy的安全
        pidfile         /var/run/haproxy.pid #指定haproxy的进程pid文件,启动进程的用户必须要有访问该文件的权限。
        nbproc          2   #要启动的haproxy的进程数量
        daemon       #设置haproxy以后台运行的方式运行。

-Cannot chroot(/usr/local/sbin/haproxy) 异常, 要注释:  chroot  /var/lib/haproxy

#常用配置项

log: 全局日志文件配置条目,local2表示日志设备,最多可定义两个

nbproc:要启动的haproxy的进程数量

chroot: chroot 切换根目录,将haproxy都运行在/var/lib/haproxy 这样做是为了增加haproxy的安全。

pidfile:指定haproxy的进程pid文件,启动进程的用户必须要有访问该文件的权限。

maxconn:设定每个haproxy进程可以接受的最大并发连接数。

user和group:指定运行haproxy的用户和组

daemon: 设置haproxy以后台运行的方式运行。

maxconnrate:每个进程每秒最大处理的连接数量。

maxse***ate:每个进程每秒可以创建的最大会话速率。

maxsslconn:设定每个haproxy进程所能接受的ssl最大并发连接数。


---default配置段

defaults
        mode            http      #设置haproxy实例默认的运行模式,默认是http,支持tcp,http可选值
        log             global    #继承全局日志
        maxconn         20000     #最大连接数
        option          httplog  # 启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求的,只记录“时间[Jan 5 13:23:46] 日志服务器[127.0.0.1] 
   							 #实例名已经pid[haproxy[25218]] 信息[Proxy http_80_in stopped.]”,日志格式很简单。
        option    http-server-close  #客户端与服务器端在完成一次连接请求之后,HAProxy会主动关闭该TCP连接,有助于提高性能。
        option    forwardfor   except 127.0.0.0/8  #由于haprxoy工作在反向代理方向,因此后端的真实服务器可能无法获取真实的请求端ip,使用xforwardfor可以在报文中封装新的字段记录请求端ip,httpd的话要在默认日志格式中进行修改才可以记录。
        option          redispatch    # 当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,
    								  #如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。#
        option          abortonclose  # 当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        option          dontlognull   # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;
    								  #官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来#
        stats           refresh    30 #统计页面刷新间隔
        retries         3   		  #定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用
        balance         roundrobin    #默认的负载均衡的方式,这里为轮询方式,也可以是balance source
        timeout  http-request  10s    #http请求超时时间
        timeout  queue         1m     #排队超时
        timeout  connect       10s    # 设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,老版本haproxy使用contimeout替代
        timeout  client        1m     #设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒,老版本haproxy使用clitimeout替代
        timeout  server        1m     # 设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒,老版本haproxy使用srvtimeout替代
        timeout  http-keep-alive 10s
        timeout  check         10s    #心跳检测超时

#常用配置项

mode:设置haproxy实例默认的运行模式,默认是http,支持tcp,http可选值

      tcp模式:在该模式之下,客户端会与服务器端建立一个全双工连接,不对七层报文做检查,常用语ssl,ssh,smtp等服务。

      http模式:客户端在请求转发到后端服务器之前会被分析。

log global:继承全局日志

option dontlognull:保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。

option http-server-close:客户端与服务器端在完成一次连接请求之后,HAProxy会主动关闭该TCP连接,有助于提高性能。

xforwardfor:由于haprxoy工作在反向代理方向,因此后端的真实服务器可能无法获取真实的请求端ip,使用xforwardfor可以在报文中封装新的字段记录请求端ip,httpd的话要在默认日志格式中进行修改才可以记录。

redispatch:是否允许在session 失败后重新分配。

retries:设置连接后端服务器的失败重试次数,连接失败的次数如果超过这里设置的值,haproxy将会将对应的后端服务器设置为不可用状态。

timeout connect: 成功连接到一台服务器的最长等待时间,默认为毫秒,可以换用其他单位。

timeout client:连接客户端发送数据的最长等待时间,默认毫秒,可修改。

timeout server:服务器端回应客户端数据发送的最长等待时间,默认毫秒,可以修改。

timeout check:设置对后端服务器的检测超时时间,默认毫秒,可以修改


---配置文件

-前端

frontend web_server   #定义前端名称,可自定义。

bind 0.0.0.0:80   #监听IP地址与端口

-后端

backend server_web  #后端名称

mode http    #http七层模式

balance roundrobin     #负载均衡的方式

option ignore-persist {if | unless} <condition>   #在某些条件下拒绝持续连接,适用于静态文件的负载均衡。

option independant-streams    #启用双向超时处理,如socket的read和write

option log-health-checks      #记录健康检查日志

option log—separate—errors    #对非完全成功的连接改变日志记录等级

option logasap     #传输大文件时可以提前记录日志

option mysql-check    #mysql健康检查

option  persist     #强制将http请求发往已经down掉的server 

option redispatch   #是否允许重新分配在session失败后 

option smtpchk    #smtp检查

option httpchk    #通过http协议进行健康检查

option socket-stats  #允许对单个socket进行统计

option  srvtcpka     #是否允许向server发送 keepalive 

option tcpka      #是否允许向 server和 client发送 keepalive 

option tcplog     #允许记录tcp连接的状态和时间 

option transparent     #允许客户端透明代理 

option httpchk GET /1b.html HTTP/1·0    #心跳检测的文件

tick-table type ip size 1024     #为当前后端配置粘性表;表存储条目类型为IP地址,允许存储1k大小的IP地址 

stick on dst        #定义一个请求模式dst,以将一个客户端同某个后端服务器关联起来 

timeout server 90m     #后端服务器最大等待时间,超过此时间则认为服务器不可用。   

-进行多后端服务器定义 

check inter 1500是检测心跳频率, 

rise 3表示3次检查结果正确则认为服务器可用,

fall 3表示检测结果失败3次则认为服务器不可用, 

weight代表服务器权重。

port 9200表示通过端口9200来进行基于 http的健康检查, 

backup表示该服务器是备份服务器,只有在其他非 backup服务器均不可用的情况下负载均衡器才会使用该后端服务器,默认情况下使用第一个标记为 backup的后端服务器, 

on-marked-down shutdown-sessions表示当该服务器被认为是 shutdown的时候,关闭全部与该服务器的请求连接。

server 192.168.51.78 192.168.151.78:80 check inter 1500 rise 3 fall 3 weight 1 port 9200 backup on-marked-down shutdown-sessions

server 192.168.51.79 192.168.151.79:80 check inter 1500 rise 3 fall 3 weight 1 port 9200 backup on-marked-down shutdown-sessions

server 192.168.51.80 192.168.151.80:80 check inter 1500 rise 3 fall 3 weight 1 port 9200 backup on-marked-down shutdown-sessions


https://www.cnblogs.com/zyd112/p/8888945.html

https://www.jianshu.com/p/641d4ea45a57


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回