CentOS7配置Haproxy(1) 編譯安裝haproxy

該文檔在CentOS7.6系統下進行編譯安裝haproxy 1.8.25

主機名稱 ip地址 操作系統 角色 軟件版本 備註
opsproxy-shqs-1 10.99.73.38 CentOS 7.6 haproxy 1.8.25 長期支持版本LTS

如果要通過keepalived配置高可用,參考編譯安裝keepalived

一、編譯安裝haproxy

1.1 下載haproxy源碼包

wget http://www.haproxy.org/download/1.8/src/haproxy-1.8.25.tar.gz
tar zxvf haproxy-1.8.25.tar.gz

1.2 編譯安裝haproxy

我的編譯軟件統一安裝在/opt/app/install/目錄下面,然後軟連接到/opt/app/下面。所以這裏設置haproxy的安裝目錄爲/opt/app/install/haproxy

# 準備編譯環境
yum install -y gcc gcc-c++ pcre pcre-devel openssl openssl-devel systemd-devel

# 切換到haproxy源碼根目錄
cd haproxy-1.8.25

# 編譯 linux內核版本大於2.6.28的都可以使用TARGET=linux2628
make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/opt/app/install/haproxy

# 安裝
make install PREFIX=/opt/app/install/haproxy

# 可執行文件拷貝一份到系統執行文件目錄,該目錄在path變量裏面,可以直接使用haproxy命令
cp haproxy /usr/sbin/

# 軟連接(這一步謹是我自己對軟件目錄管理的需求)
ln -s /opt/app/install/haproxy /opt/app/haproxy

# 配置haproxy用戶和組。因爲yum安裝haproxy生成的也是這個ID,這裏組/用戶ID設置爲188,僅僅是爲了保持一致,其實設置爲多少都可以。
groupadd -g 188 haproxy
useradd -u 188 -g 188 -r -s /sbin/nologin haproxy

# haproxy附加參數文件,這個可以不用設置的,這裏是爲了和yum安裝方式保持一致。
touch /etc/sysconfig/haproxy
vi /etc/sysconfig/haproxy
OPTIONS=""

# pid文件放置目錄,目錄可以自己定義在啓動腳本里面使用
mkdir /opt/app/haproxy/run 

# socket方式的相關文件目錄,這裏沒有用到
# mkdir /var/lib/haproxy
# chown -R haproxy:haproxy /var/lib/haproxy/

1.3 haproxy配置文件

這裏僅僅是一個簡單的配置文件,只是配置了一個統計服務stats,並沒有配置實際的業務服務代理。部署驗證這些就夠了。
配置文件目錄/opt/app/haproxy/haproxy.cfg

vi /opt/app/haproxy/haproxy.cfg

global
  user     haproxy
  group    haproxy
  daemon
  nbproc   2
  #cpu-map  1  0
  #cpu-map  2  1
  maxconn  100000
  chroot   /opt/app/haproxy
  pidfile  /opt/app/haproxy/run/haproxy.pid
  log      127.0.0.1 local0 info

defaults
  log      global
  option   httplog
  option   http-keep-alive
  option   redispatch
  option   forwardfor
  maxconn  100000
  mode     http
  retries  3
  timeout  check 5s
  timeout  connect 5s
  timeout  client 60s
  timeout  server 60s
  timeout  http-request 10s
  timeout  queue 1m

listen stats
  bind     0.0.0.0:1234
  log      global
  mode     http
  stats    enable
  stats    hide-version
  stats    realm Haproxy\ Statistics
  stats    uri     /stats
  stats    refresh 5s
  stats    auth    admin:admin

1.4 配置system自啓動文件

  • 編寫配置文件

    vi /usr/lib/systemd/system/haproxy.service
    
    [Unit]
    Description=HAProxy Load Balancer
    After=syslog.target network.target
    
    [Service]
    EnvironmentFile=/etc/sysconfig/haproxy
    ExecStartPre=/usr/sbin/haproxy -f /opt/app/haproxy/haproxy.cfg -c -q
    ExecStart=/usr/sbin/haproxy -Ws -f /opt/app/haproxy/haproxy.cfg -p /opt/app/haproxy/run/haproxy.pid
    ExecReload=/bin/kill -USR2 $MAINPID
    KillMode=mixed
    
    [Install]
    WantedBy=multi-user.target
    
  • 加載文件

    systemctl daemon-reload
    
  • 配置自啓動

    systemctl enable haproxy
    
  • 啓動服務

    systemctl start haproxy
    systemctl status haproxy
    
    netstat -pltn
    tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN      20808/haproxy 
    
  • 訪問http://10.99.73.38:1234/stats
    *

1.5 配置記錄Haproxy訪問日誌

  • 根據haproxy.cfg配置文件裏面配置log 127.0.0.1 local0 info進行配置
    yum -y install rsyslog
    touch /etc/rsyslog.d/haproxy.conf
    
    vi /etc/rsyslog.d/haproxy.conf
    
    $ModLoad imudp
    $UDPServerRun 514
    local0.* /var/log/haproxy.log
    
    
  • 重新啓動rsyslog生效配置
    systemctl restart rsyslog
    
  • 日誌訪問
    # 需要訪問過haproxy纔會生成文件以及內容
    tail -f /var/log/haproxy.log
    
    Jul  2 22:50:51 localhost haproxy[18038]: 127.0.0.1:46154 [02/Jul/2020:22:50:51.310] stats stats/<STATS> -1/-1/-1/-1/0 401 262 - - PR-- 1/1/0/0/3 0/0 "GET /stats HTTP/1.1"
    Jul  2 22:50:51 localhost haproxy[18038]: 127.0.0.1:46154 [02/Jul/2020:22:50:51.310] stats stats/<STATS> -1/-1/-1/-1/0 401 262 - - PR-- 1/1/0/0/3 0/0 "GET /stats HTTP/1.1"
    

二、配置業務代理

這裏是一個配置harbor代理的實例

主機名稱 ip地址 操作系統 角色 端口 備註
opsharbor-shqs-1 10.99.73.38 CentOS 7.6 docker hub<主節點> 80 自動跳轉443
443
前面實際是一個nginx
opsharbor-shqs-2 10.99.73.39 CentOS 7.6 docker hub<從節點> 80 自動跳轉443
443
前面實際是一個nginx

這裏我們使用haproxy來代理harbor,並使用tcp協議代理,實際處理流程交給後端的nginx處理

client --> haproxy-1(master-vip)  --> harbor-1 
           |                      \  /
           |                       / \
           + haproxy-2(backup)     -->   harbor-2
這裏的配置適合haproxy+keepalived與harbor不在同一組服務器上的方式,如果在同一組服務器上由於VIP只在一臺服務器上,haproxy相同的配置導致從節點監控VIP:port無法啓動。

如果確實在一組服務器上,需要配置一個健康腳本,讓VIP所在節點haproxy運行,而非VIP節點haproxy停止運行。並實時監控切換。
global
  user     haproxy
  group    haproxy
  daemon
  nbproc   2
  #cpu-map  1  0
  #cpu-map  2  1
  maxconn  100000
  chroot   /opt/app/haproxy
  pidfile  /opt/app/haproxy/run/haproxy.pid
  log      127.0.0.1 local0 info

defaults
  log      global
  mode     http
  maxconn  100000
  option   httplog
  option   dontlognull
  option   http-keep-alive
  option   redispatch
  #option   forwardfor
  retries  3
  timeout  check 10s
  timeout  connect 100s
  timeout  client 3600s
  timeout  server 3600s
  timeout  http-request 100s
  timeout  queue 1m

listen stats 
  bind     0.0.0.0:1234
  log      global
  mode     http
  stats    enable
  stats    hide-version
  stats    realm Haproxy\ Statistics
  stats    uri /stats
  stats    auth    admin:admin

listen harbor_http
  bind :80
  balance first
  mode tcp
  option tcplog
  server harbor_1 10.99.73.38:80 check inter 20000 rise 2 fall 5
  server harbor_2 10.99.73.39:80 backup check inter 20000 rise 2 fall 5

listen harbor_https
  bind :443
  balance first
  mode tcp
  option tcplog
  server harbor_1 10.99.73.38:443 check inter 20000 rise 2 fall 5
  server harbor_2 10.99.73.39:443 backup check inter 20000 rise 2 fall 5

重啓haproxy服務

systemctl restart haproxy.service
systemctl status haproxy.service

netstat -plnt |grep haproxy
tcp        0      0 0.0.0.0:80          0.0.0.0:*               LISTEN      7087/haproxy        
tcp        0      0 0.0.0.0:443         0.0.0.0:*               LISTEN      7087/haproxy   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章