Haproxyの概要とHaproxyを使用してWebクラスターを構築する

1.一般的なWebクラスタースケジューラー

  • 現在の一般的なWebクラスタスケジューラは、ソフトウェアとハ​​ードウェアに分かれています。
  • ソフトウェアは通常、オープンソースのLVS、Haproxy、Nginxを使用します
  • 最も一般的に使用されるハードウェアはF5であり、多くの人々はバラクーダ、NSFOCUSなどの一部の国産製品を使用しています。

1.1 Haproxyアプリケーション分析

  • LVSはエンタープライズアプリケーションで強力なアンチロード機能を備えていますが、いくつかの欠点があります
    。LVSは通常の処理をサポートしておらず、動的分離と静的分離を実現できません。
    大規模なWebサイトの場合、LVSの実装と構成は複雑で、メンテナンスコストは比較的高くなります。
  • Haproxyは、TCPおよびHTTPアプリケーションに基づいて高可用性、負荷分散、プロキシを提供するソフトウェアです。負荷の高い
    Webサイトに適しています。
    ハードウェア上実行され、数万の同時接続をサポートします。

1.2 Haproxyスケジューリングアルゴリズム

  • RR(ラウンドロビン)
    RRアルゴリズムは、最も単純で最も一般的に使用されるアルゴリズム、つまりラウンドロビンスケジューリングです。
  • LC(最小接続)
    最小接続アルゴリズムは、バックエンドノード接続の数に従ってフロントエンド要求を動的に割り当てます。
  • SH(ソースハッシュ)は
    、ソースアクセススケジューリングアルゴリズムに基づいています。これは、セッションセッションがサーバー側で記録されるいくつかのシナリオで使用されます。クラスターのスケジューリングは、ソースIP、Cookieなどに基づくことができます。
    例:
    2つのノードAとBがあり、最初のユーザーが最初2番目の訪問はAに割り当てられ、2番目のユーザーは最初の訪問のためにBに割り当てられました。最初のユーザーが2回目にアクセスすると、引き続きAに割り当てられ、2番目のユーザーは引き続き2番目の訪問に割り当てられます。 Bへ

2. Haproxy設定ファイルの詳細説明

2.1グローバル構成グローバル

パラメータ 説明
ログ127.0.0.1 local0 ロギングを設定します。local0はデフォルトでシステムログに保存されるロギングデバイスです。
ログ127.0.0.1 local1通知 通知はログレベルです。通常、24レベルあります。
maxconn 4096 接続の最大数
uid 99 ユーザーuid
ガイド99 ユーザーgid

2.2デフォルト構成のデフォルト

  • アプリケーションコンポーネントに特別なステートメントがない場合は、デフォルトの構成パラメーターに従って設定されます
パラメータ 説明
ロググローバル ログをグローバル構成のログ定義として定義します
モードhttp モードはhttpです
オプションhttplog httpログ形式を使用してログを記録する
再試行3 ノードサーバーの障害を3回連続して確認します。ノードは使用不可と見なされます。
maxconn 2000 接続の最大数
contimeout 5000 接続タイムアウト
clitimeout 5000 クライアントのタイムアウト
srvtimeout 5000 サーバーのタイムアウト

2.3アプリケーションコンポーネントの構成

パラメータ 説明
appli4-backup 0.0.0.0を聞く:10004 appli4-backupアプリケーションを定義する
オプションhttpchk / indexhtml サーバーのindex.htmlファイルを確認してください
オプションが持続する 停止しているサーバーにリクエストを強制的に送信します(構成時にコメント化)
ラウンドロビンのバランス 負荷分散スケジューリングアルゴリズムはポーリングアルゴリズムを使用します
server inst1 192.168.114.56:80 2000年秋3の間にチェック オンラインノードを定義する
server inst1 192.168.114.56:80 2000秋3バックアップの間にチェック バックアップノードを定義

3、Haproxyパラメータの最適化

パラメータ 説明
maxconn アプリケーションの実際の状況に応じて調整された最大接続数、10 240を推奨
デーモン デーモンモード、Haproxyは非デーモンモードで起動できます。デーモンモードで起動することをお勧めします
nbproc 負荷分散のための同時プロセスの数は、現在のサーバーのCPUコアの数と同じか2倍にすることをお勧めします
再試行 再試行回数は主にクラスターノードをチェックするために使用されます。ノードの数が多く、ノードの数が多い場合は、2〜3回に設定します
オプションhttp-server-close httpリクエストオプションをアクティブに閉じます。本番環境ではこのオプションを使用することをお勧めします
タイムアウトhttp-keep-alive 長い接続タイムアウト時間、長い接続タイムアウト時間を設定、10秒を設定可能
timeout http-request http请求超时时间,建议将此时间设置为5~10 s,增加http连接释放速度
timeout client 客户端超时时间,如果访问量过大,节点响应慢,可以将此时间设置短一些,建议设置为1min左右就可以了

四、Haproxy 日志管理

  • 默认是输出到系统的syslog中,生产环境中一般单独定义
  • 定义的方法步骤
    修改Hapeoxy配置文件中关于日志 配置的选项,加入配置
    log /dev/log local0 info
    log /dev/log local0 notice
  • 修改rsyslog配置,将Haproxy相关的配置独立定义到haproxy.conf 并放到 /etc/rsrslog.d/ 下
  • 保存配置文件并重启rsyslog服务,完成rsyslog配置

五、Haproxy搭建Web群集实验

5.1 实验环境

  • 3台Centos 虚拟机 一台win10 系统
  • 1台虚拟即充当Haproxy站点,IP地址为192.168.233.200
  • 2台CentOS 虚拟机模拟Nginx服务器 IP地址分别为192.168.233.180 192.168.233.50
  • win10 充当客户端
    在这里插入图片描述

5.2 实验准备工作

  • 准备好haproxy-1.5.19.tar和nginx-1.12.0.tar 安装包
  • 开始操作前 关闭所有节点的防火墙和核心防护 防止干扰
[root@haproxy ~]# systemctl stop firewalld.service 
[root@haproxy ~]# setenforce 0

5.3 节点服务器

  • 两台节点服务器都需要设置
root@localhost ~]# hostnamectl set-hostname web1
[root@localhost ~]# su
[root@web1 ~]# 
[root@web1 ~]# yum install pcre-devel zlib-devel gcc gcc-c++ make -y
[root@web1 ~]# useradd -M -s /sbin/nologin  nginx
准备安装包nginx-1.12.0.tar
[root@web1 ~]# tar zxvf nginx-1.12.0.tar.gz -C /opt/
[root@web1 ~]# cd /opt/nginx-1.12.0/
[root@web1 nginx-1.12.0]# ./configure  --prefix=/usr/local/nginx --user=nginx --group=nginx
[root@web1 nginx-1.12.0]# make && make install
[root@web1 nginx-1.12.0]# cd /usr/local/nginx/html/
[root@web1 html]# echo "this is accp web" > test.html         ## web2 网页内容可以写不一样的,但是文件名称要一样 便于测试
[root@web1 html]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/
[root@web1 html]# nginx
[root@web1 html]# netstat -antp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      14300/nginx: master

5.4 haproxy服务器

[root@haproxy ~]# yum install pcre-devel bzip2-devel gcc gcc-c++ make -y
准备压缩包haproxy-1.5.19.tar
[root@haproxy ~]# tar zxvf haproxy-1.5.19.tar.gz -C /opt/
[root@haproxy ~]# cd /opt/haproxy-1.5.19/
[root@haproxy haproxy-1.5.19]# make TARGET=linux26
[root@haproxy haproxy-1.5.19]# make install
[root@haproxy haproxy-1.5.19]# mkdir /etc/haproxy
[root@haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/
[root@haproxy haproxy-1.5.19]# cd /etc/haproxy/
[root@haproxy haproxy]# vim haproxy.cfg 

#       chroot /usr/share/haproxy      ## 第八行 注释掉 否则服务起不来
#       redispatch			## 第二十一行,注释掉

######### 删掉所有的listen  写入下列的
listen webcluster 0.0.0.0:80
        option httpchk GET /test.html
        balance roundrobin
        server inst1 192.168.233.50:80 check inter 2000 fall 3
        server inst2 192.168.233.180:80 check inter 2000 fall 3


[root@haproxy haproxy]# cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@haproxy haproxy]# chmod +x /etc/init.d/haproxy 
[root@haproxy haproxy]# chkconfig --add /etc/init.d/haproxy 
[root@haproxy haproxy]# ln -s /usr/local/sbin/haproxy  /usr/sbin/haproxy
[root@haproxy haproxy]# service haproxy start
Starting haproxy (via systemctl):                          [  确定  ]


访问http://192.168.233.200/test.html
刷新网页 ,发现两个网页来回切换

在这里插入图片描述
在这里插入图片描述

5.5 日志配置

[root@haproxy haproxy]# vim /etc/haproxy/haproxy.cfg 
  global
          log /dev/log    local0  info        ## /dev/log 只是一个设备工具  日志还是会生成到/var/log 里面  local0 级别得一样
          log /dev/log    local0 notice
[root@haproxy haproxy]# service haproxy restart
Restarting haproxy (via systemctl):                        [  确定  ]
[root@haproxy haproxy]# touch /etc/rsyslog.d/haproxy.conf
[root@haproxy haproxy]# vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
~                                                                                                                                           
~                 
[root@haproxy ~]# systemctl restart rsyslog.service     
[root@haproxy ~]# service haproxy restart
Restarting haproxy (via systemctl):                        [  确定  ]
[root@haproxy ~]# ls /var/log/haproxy/
haproxy-info.log  haproxy-notice.log

おすすめ

転載: blog.csdn.net/weixin_47219725/article/details/108367892