記事ディレクトリ
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ログ構成
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
systemctl restart rsyslog.service
:ログサービスを再起動しますsystemctl start haproxy.service
:haproxyサービスを開くcat /var/log/haproxy.log
3. haproxyを構成し、暗号化されたアクセスを設定します
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
- サービスを再起動します。
systemctl restart haproxy.service
netstat -antlupe
:haproxyのポート番号が80であることがわかります
- アクセステスト
4.ソースアルゴリズムのスケジューリング
リクエストの送信元アドレスはハッシュされ、バックエンドサーバーの総重量で除算されてから、一致するサーバーにディスパッチされます。これにより、同じクライアントIPのリクエストが常に特定のサーバーにディスパッチされる可能性があります。ただし、サーバーが総重量が変化した場合、サーバーがダウンしたり、新しいサーバーが追加されたりすると、以前のリクエストとは異なるサーバーに多くのクライアントリクエストがディスパッチされる可能性があります。Cookie機能なしのロードバランシングによく使用されるTCPベースのプロトコル。デフォルトは静的ですが、ハッシュタイプを使用してこの機能を変更することもできます
vim /etc/haproxy/haproxy.cfg
- サービスを再起動します。
systemctl restart haproxy.service
- テスト
- 実験後、rrアルゴリズムに戻り、スケジューリングをポーリングして、サービスを再起動します
5.デフォルトのバックエンドと代替バックエンド
vim /etc/haproxy/haproxy.cfg
- サービスを再起動します。
systemctl restart haproxy.service
- 静的バックエンドserver2ホストの公開ディレクトリにディレクトリイメージを作成し、イメージを渡します
- テスト1:http://192.168.17.1/statusにアクセスします
- テスト2:http://192.168.17.1/imagesにアクセス
6.バックアップサーバー
vim /etc/haproxy/haproxy.cfg
vim /etc/httpd/conf/httpd.conf
:Apacheポート番号を8080に変更し、httpdを有効にします
- サービスを再起動します。
systemctl restart haproxy.service
- テスト:デフォルトのバックエンドサーバーserver3がダウンすると、マシンは自動的に正常にアクセスされます
7.ブラックリストとホワイトリスト
1ブラックリスト
vim /etc/haproxy/haproxy.cfg
- サービスを再起動します。
systemctl restart haproxy.service
- テスト:ブラックリストのホストを使用して192.168.17.1にアクセスすると、アクセスが失敗します。しかし、他のホストには通常どおりアクセスできます。
2ホワイトリスト:ホワイトリストにアクセスできるように、ブラックリストに登録されたホストのみを設定します
3ブラックリストをネットワークセグメント全体に設定します
#一个网段不能访问
acl blacklist src 192.168.17.0/24
block if blacklist
8.リダイレクト
8.1エラー後のリダイレクト
vim /etc/haproxy/haproxy.cfg
acl blacklist src 192.168.17.250
block if blacklist
errorloc 403 http://www.baidu.com
- サービスを再起動します。
systemctl restart haproxy.service
- テスト
8.2直接リダイレクト
vim /etc/haproxy/haproxy.cfg
#全局重定向
redirect location http://www.westos.org
#仅黑名单重定向
redirect location http://www.westos.org if blacklist
- サービスを再起動します。
systemctl restart haproxy.service
- テスト
9.アクセス制御
vim /etc/haproxy/haproxy.cfg
acl list src 192.168.17.250
acl denyjpg path /images/wsx.png
http-request deny if denyjpg list
- サービスを再起動します。
systemctl restart haproxy.service
- テスト
10.読み取りと書き込みの分離
10.1HAProxyホスト構成
vim /etc/haproxy/haproxy.cfg
acl write method PUT
acl write method POST#(HEAD为读)
use_backend static if write
- サービスを再起動します。
systemctl restart haproxy.service
10.2コールバックエンドホスト構成の読み取り
server3
yum install -y php
systemctl restart httpd.service
- server3のデフォルトの公開ディレクトリにディレクトリアップロードと2つのphpファイルがあります
chmod 777 /var/www/html/upload/
scp upload_file.php [email protected]:/var/www/html/
:phpファイルを読み取りバックエンドに渡します
- テスト:http://192.168.17.1/index.phpにアクセスしますが、.ipg画像をアップロードできません
10.3書き込み呼び出しのバックエンドホスト構成
yum install -y php
systemctl restart httpd.service
- テスト:http://192.168.17.1/index.phpにアクセスし、.jpg画像を正常にアップロードします。