[Linux34-1] HAProxy(ログ、アルゴリズム、指定されたバックエンドまたはローカルマシンへのアクセス、ブラックリスト、リダイレクト、アクセス制御、読み取りと書き込みの分離)

1.HAProxyの概要


HAProxy公式ウェブサイト:https//www.haproxy.org/

1.1 HAProxy


HAProxyは、TCPおよびHTTPアプリケーションに基づく高可用性、負荷分散、およびプロキシを提供し、仮想ホストをサポートします。これは、無料で高速かつ信頼性の高いソリューションです。HAProxyは、通常、セッションの保持または7層の処理を必要とする負荷の高いWebサイトに特に適しています。HAProxyは現在のハードウェアで実行され、数万の同時接続を完全にサポートできます。また、その動作モードにより、Webサーバーがネットワークにさらされるのを防ぎながら、現在のアーキテクチャに簡単かつ安全に統合できます。

  • インストール:yum install -y haproxy

1.2構成ファイルのパラメーター


  • グローバル通常はオペレーティングシステムに関連する、プロセスの構成に属するグローバル構成パラメーターを設定します
  • デフォルトデフォルトのパラメータを設定します。これらのパラメータは、フロントエンド、バックエンド、リッスンコンポーネントで使用できます。
  • フロントエンドリクエストを受信するフロントエンド仮想ノード。フロントエンドは特定のバックエンドを直接指定して、バックエンドのその他のルールを使用できます。
  • バックエンドバックエンドサービスクラスターの構成は実サーバーであり、1つのバックエンドは1つ以上の物理サーバーに対応します
  • 聞くフロントエンドとバックエンドの組み合わせ

1.3構成ファイルの説明


グローバル:グローバルパラメータ設定

log 127.0.0.1 local2#指定日志设备
chroot      /var/lib/haproxy#jail 目录
pidfile     /var/run/haproxy.pid#定义haproxy的pid 
maxconn 4000#定义每个haproxy进程的最大连接数
#由于每个连接包括一个客户端和一个服务器端,所以单个进程的TCP会话最大数目将是该值的两倍。
user haproxy# 设置运行haproxy的用户,也可用uid 
group haproxy# 设置运行haproxy的组,也可用gid 
daemon# 以守护进程的方式运行
#nbproc 16# 设置haproxy启动时的进程数
stats socket /var/lib/haproxy/stats#

defaults:デフォルト部分の定義

mode        http#mode {http|tcp|health}
#http是七层模式,tcp是四层模式,health是健康检测,返回OK
log         global#应用全局的日志配置
option      httplog#http 日志格式
option      dontlognull  #禁用空链接日志
option http-server-close#每次请求完毕后主动关闭http通道
option forwardfor       except 127.0.0.0/8
option      redispatch  #当 client 连接到挂掉的机器时,重新分配到健康的主机
retries 3#连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用
timeout http-request    10s#http请求超时时间
timeout queue           1m#一个请求在队列里的超时时间
timeout connect         10s#连接超时
timeout client          1m#客户端超时
timeout server          1m#服务器端超时
timeout http-keep-alive 10s#设置http-keep-alive的超时时间
timeout check           10s#检测超时
maxconn 3000#定义每个haproxy进程的最大连接数
stats uri /status#haproxy 监控页面
stats auth admin:westos#设置统计页面认证的用户和密码

フロントエンド:フロントエンド

frontend  main *:80#前端,监听的实例名称main、地址、端口
#定义一个名叫url_static的acl,匹配路径以下面几个开头的
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#定义一个名叫url_static的acl,当请求的url末尾是以.jpg.gif等结尾的,将会被匹配到
    acl url_static       path_end       -i .jpg .gif .png .css .js 
# 如果满足策略url_static时,就将请求交予backend static
    use_backend static          if url_static
#默认后端,名称为app
    default_backend             app

バックエンド:バックエンド

backend app#定义一个名为app的后端
    balance     roundrobin# 设置haproxy的调度算法
#使用server关键字来设置后端服务器
#后端服务内部名称为app1,app2
#后端服务器的IP和端口
#check接受健康监测
    server  app1 192.168.17.2:80 check
    server  app2 192.168.17.3:80 check

他の構成パラメータとその文の記述の詳細な説明



2.HAProxyログ構成


  1. vim /etc/rsyslog.conf:ログ構成ファイルを編集する

$ModLoad imudp
$UDPServerRun 514#开启日志端口
*.info;mail.none;authpriv.none;cron.none;local.none     /var/log/messages
local2.*                                                /var/log/haproxy.log

ここに写真の説明を挿入
ここに写真の説明を挿入

  1. systemctl restart rsyslog.service:ログサービスを再起動します
  2. systemctl start haproxy.service:haproxyサービスを開く
  3. cat /var/log/haproxy.log

ここに写真の説明を挿入



3. haproxyを構成し、暗号化されたアクセスを設定します


  1. vim /etc/haproxy/haproxy.cfg

    stats uri /status#设置统计页面的uri为/status
    stats auth admin:westos#设置统计页面认证的用户和密码
frontend  main *:80#前端名称为main,端口号为80
#    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#    acl url_static       path_end       -i .jpg .gif .png .css .js
#
#    use_backend static          if url_static
    default_backend             app#默认后端,名称为app
backend app#后端
    balance     roundrobin#调度算法
    server  app1 192.168.17.2:80 check
    server  app2 192.168.17.3:80 check

ここに写真の説明を挿入

  1. サービスを再起動します。systemctl restart haproxy.service
  2. netstat -antlupe:haproxyのポート番号が80であることがわかります

ここに写真の説明を挿入

  • アクセステスト

ここに写真の説明を挿入
ここに写真の説明を挿入
ここに写真の説明を挿入



4.ソースアルゴリズムのスケジューリング


リクエストの送信元アドレスはハッシュされ、バックエンドサーバーの総重量で除算されてから、一致するサーバーにディスパッチされます。これにより、同じクライアントIPのリクエストが常に特定のサーバーにディスパッチされる可能性があります。ただし、サーバーが総重量が変化した場合、サーバーダウンしたり、新しいサーバーが追加されたりすると、以前のリクエストとは異なるサーバーに多くのクライアントリクエストがディスパッチされる可能性があります。Cookie機能なしのロードバランシングによく使用されるTCPベースのプロトコル。デフォルトは静的ですが、ハッシュタイプを使用してこの機能を変更することもできます


  1. vim /etc/haproxy/haproxy.cfg

ここに写真の説明を挿入

  1. サービスを再起動します。systemctl restart haproxy.service
  2. テスト

ここに写真の説明を挿入
ここに写真の説明を挿入

  1. 実験後、rrアルゴリズムに戻り、スケジューリングをポーリングして、サービスを再起動します


5.デフォルトのバックエンドと代替バックエンド


  1. vim /etc/haproxy/haproxy.cfg

ここに写真の説明を挿入

  1. サービスを再起動します。systemctl restart haproxy.service
  2. 静的バックエンドserver2ホストの公開ディレクトリにディレクトリイメージを作成し、イメージを渡します

ここに写真の説明を挿入

  • テスト1:http://192.168.17.1/statusにアクセスします

ここに写真の説明を挿入
ここに写真の説明を挿入

  • テスト2:http://192.168.17.1/imagesにアクセス

ここに写真の説明を挿入



6.バックアップサーバー


  1. vim /etc/haproxy/haproxy.cfg

ここに写真の説明を挿入

  1. vim /etc/httpd/conf/httpd.conf:Apacheポート番号を8080に変更し、httpdを有効にします

ここに写真の説明を挿入
ここに写真の説明を挿入

  1. サービスを再起動します。systemctl restart haproxy.service

  • テスト:デフォルトのバックエンドサーバーserver3がダウンすると、マシンは自動的に正常にアクセスされます

ここに写真の説明を挿入
ここに写真の説明を挿入
ここに写真の説明を挿入



7.ブラックリストとホワイトリスト


1ブラックリスト

  1. vim /etc/haproxy/haproxy.cfg

ここに写真の説明を挿入

  1. サービスを再起動します。systemctl restart haproxy.service

  • テスト:ブラックリストのホストを使用して192.168.17.1にアクセスすると、アクセスが失敗します。しかし、他のホストには通常どおりアクセスできます。

ここに写真の説明を挿入
ここに写真の説明を挿入

2ホワイトリストホワイトリストにアクセスできるように、ブラックリストに登録されたホストのみを設定します

ここに写真の説明を挿入
ここに写真の説明を挿入

3ブラックリストをネットワークセグメント全体に設定します

#一个网段不能访问
acl blacklist src 192.168.17.0/24
block if blacklist


8.リダイレクト


8.1エラー後のリダイレクト


  1. vim /etc/haproxy/haproxy.cfg

acl blacklist src 192.168.17.250
block if blacklist
errorloc 403 http://www.baidu.com

ここに写真の説明を挿入

  1. サービスを再起動します。systemctl restart haproxy.service

  • テスト

ここに写真の説明を挿入

8.2直接リダイレクト


  1. vim /etc/haproxy/haproxy.cfg

#全局重定向
redirect location http://www.westos.org
#仅黑名单重定向
redirect location http://www.westos.org if blacklist

ここに写真の説明を挿入


  1. サービスを再起動します。systemctl restart haproxy.service

  • テスト

ここに写真の説明を挿入



9.アクセス制御


  1. vim /etc/haproxy/haproxy.cfg

acl list src 192.168.17.250
acl denyjpg path /images/wsx.png
http-request deny if denyjpg list

ここに写真の説明を挿入

  1. サービスを再起動します。systemctl restart haproxy.service

  • テスト

ここに写真の説明を挿入



10.読み取りと書き込みの分離


10.1HAProxyホスト構成

  1. vim /etc/haproxy/haproxy.cfg

acl write method PUT
acl write method POST#(HEAD为读)
use_backend static          if write

ここに写真の説明を挿入

  1. サービスを再起動します。systemctl restart haproxy.service

10.2コールバックエンドホスト構成の読み取り


server3

  1. yum install -y php
  2. systemctl restart httpd.service
  3. server3のデフォルトの公開ディレクトリにディレクトリアップロードと2つのphpファイルがあります
  4. chmod 777 /var/www/html/upload/
  5. scp upload_file.php [email protected]:/var/www/html/:phpファイルを読み取りバックエンドに渡します

ここに写真の説明を挿入

  • テスト:http://192.168.17.1/index.phpにアクセスしますが、.ipg画像をアップロードできません

ここに写真の説明を挿入
ここに写真の説明を挿入

10.3書き込み呼び出しのバックエンドホスト構成


  1. yum install -y php
  2. systemctl restart httpd.service

ここに写真の説明を挿入

  • テスト:http://192.168.17.1/index.phpにアクセスし、.jpg画像を正常にアップロードします。

ここに写真の説明を挿入
ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_46069582/article/details/112645230