HAProxy詳細とネットショッピングモールの動静分離の実現
1.HAProxyの概要
2.HAProxy性能の詳細
3.簡単なインストールと構成例
4.ケース:HAProxyを利用してオンラインショッピングモールの動静分離を実現する方法
-----------------------------------------------------------------------------------------
1.HAProxyの概要
HAProxyは、高可用性、負荷分散、TCPおよびHTTPアプリケーションベースのエージェントを提供し、仮想ホストをサポートします.これは、無料で、迅速で、信頼性の高いソリューションです.HAProxyは、通常、セッション保持または7階層処理を必要とする負荷の大きいWebサイトに特に適しています.HAProxyは、現在のハードウェア上で動作し、数万台の同時接続を完全にサポートします.また、その実行モードにより、現在のアーキテクチャに簡単に安全に統合でき、Webサーバがネットワークに露出しないように保護できます.
HAProxyは、非常に大きな同時接続数をサポートするイベント駆動、単一プロセスモデルを実現します.マルチプロセスモデルまたはマルチスレッドモデルは、メモリ制限、システムスケジューラ制限、および不在のロック制限を受け、数千の同時接続を処理することはめったにありません.イベント駆動モデルは、より良いリソースと時間管理を持つユーザー側でこれらのタスクをすべて実現するため、これらの問題はありません.このモデルの弊害は,マルチコアシステムでは,これらのプログラムは通常拡張性が悪いことである.これは、各CPUタイムスライス(Cycle)がより多くの作業を行うために最適化されなければならない理由である.
HAProxyは、TCPおよびHTTPベースのアプリケーションに高可用性、ロード・バランシング、およびプロキシ・サービスを提供するための無料、極めて高速で信頼性の高いソリューションであり、特に高負荷で永続的な接続または7階層処理メカニズムが必要なWebサイトに適しています.
2.HAProxy性能の詳細
1.単一プロセス、イベント駆動モデルに基づいて、コンテキスト切り替えのオーバーヘッドとメモリ使用量を大幅に削減します.
2.イベントチェッカ(event checker)は、高同時接続において、接続された任意のイベントを即時検出することを可能にする.
3.任意の利用可能な場合、シングルバッファ(single buffering)メカニズムは、データをコピーしない方法で読み書き操作を完了することができ、これにより、大量のCPUクロック周期とメモリ帯域幅を節約することができる.
4.Linux 2.6(>=2.6.27.19)上のsplice()システム呼び出しにより、HAProxyはゼロレプリケーション転送(Zero-copy forwarding)を実現でき、現在の新バージョンのLinux OSではゼロレプリケーション起動(zero-starting)も実現できる
5.MRUメモリディスペンサは、一定サイズのメモリプールでインスタントメモリ割り当てを実現し、セッションの作成時間を短縮することができる.
6.ツリー型ストレージ:著者らが数年前に開発したフレキシブルツリーの使用に重点を置き、O(1)に近い低コストでタイマコマンドを維持し、実行キューコマンドを維持し、ポーリングと最小接続キューを管理することを実現した.
7.最適化されたHTTPの首部分析:最適化された首部分析機能はHTTPの首部分析中にメモリ領域を再読み込みすることを避ける;
8.クライアント側のロングコネクション(client-side keep-alive)をサポートし、TCP加速(TCP speedups)をサポートする
9.ソースベースの粘性(source-based stickiness)およびより詳細な健康状態検出(more verbose health checks)
3.簡単なインストールと構成例
取付:RHEL 6.4のシステムミラーにはデフォルトでHAProxyが統合されており、バージョンは1.4である.22.ここではyum装を使用します.
簡単な構成:
4.ケース:HAProxyを利用してオンラインショッピングモールの動静分離を実現する方法
4.1.実験トポロジ:
4.2.じっけんかんきょう
本実験で用いるシステム環境はすべてRHEL 6である.4.
HAProxy:haproxy-1.4.22-3.el6.src.rpm
Apache:httpd-2.2.15-26.el6.src.rpm
MySQL:mysql-5.5.33.tar.gz
TomcatA/TomcatBの実験環境の構築と構成は前のブログと同じで、ここでは詳しく説明しません.
4.3.シンプルな構成の実装
HAProxy:
パラメータの詳細な説明については、ここでは述べていません.
MySQL:
関連ユーザーの権限:
TomcatA/B:
1.JDKとTomcatのインストールを完了する
2.TomcataとTomcatBのメモリベースの共有を実現
3.shopxx-a 5-Betaを完成する.zip商城の配置、ダウンロードリンク:http://yunpan.cn/QbQadWAreYyGN
Tomcatの導入については、前のブログで詳しく述べましたが、環境全体が全く同じなので、参考にしてみてください.
Apache:
4.4.すべてのサーバを再起動し、対応するテストを行います.
1.アクセスhttp://172.16.21.100:1080/statsバックエンド・サーバのステータスを表示するには、次の手順に従います.
2.入力アカウントとパスワード(HAProxyプロファイルで定義済み)
3.ネットショッピングモールのホームページを訪問する:http://172.16.21.100:8080/shop
4.アクセスできることがわかります.
5.ここでは、動静分離の実現を簡単に検証することができます.
バックエンドのapacheサーバの再アクセスを停止します.[root@Apache ~]# service httpd stop
6.apacheサーバを再起動してアクセステストを行う[root@Apache ~]# service httpd start
またホームページを完全に表示できることに気づきました.登録ユーザーがカートを表示する情報は依然として存在します.
これによりHAProxy逆エージェントによるオンラインショッピングモールの動静分離が完全に実現された.皆さんは疑問があればお互いに交流することができます.QQ:572807025メールボックス:[email protected]
Varnishキャッシュの使用とkeepalivedに関する知識の説明については、引き続き私のブログに注目してください.
2.HAProxy性能の詳細
3.簡単なインストールと構成例
4.ケース:HAProxyを利用してオンラインショッピングモールの動静分離を実現する方法
-----------------------------------------------------------------------------------------
1.HAProxyの概要
HAProxyは、高可用性、負荷分散、TCPおよびHTTPアプリケーションベースのエージェントを提供し、仮想ホストをサポートします.これは、無料で、迅速で、信頼性の高いソリューションです.HAProxyは、通常、セッション保持または7階層処理を必要とする負荷の大きいWebサイトに特に適しています.HAProxyは、現在のハードウェア上で動作し、数万台の同時接続を完全にサポートします.また、その実行モードにより、現在のアーキテクチャに簡単に安全に統合でき、Webサーバがネットワークに露出しないように保護できます.
HAProxyは、非常に大きな同時接続数をサポートするイベント駆動、単一プロセスモデルを実現します.マルチプロセスモデルまたはマルチスレッドモデルは、メモリ制限、システムスケジューラ制限、および不在のロック制限を受け、数千の同時接続を処理することはめったにありません.イベント駆動モデルは、より良いリソースと時間管理を持つユーザー側でこれらのタスクをすべて実現するため、これらの問題はありません.このモデルの弊害は,マルチコアシステムでは,これらのプログラムは通常拡張性が悪いことである.これは、各CPUタイムスライス(Cycle)がより多くの作業を行うために最適化されなければならない理由である.
HAProxyは、TCPおよびHTTPベースのアプリケーションに高可用性、ロード・バランシング、およびプロキシ・サービスを提供するための無料、極めて高速で信頼性の高いソリューションであり、特に高負荷で永続的な接続または7階層処理メカニズムが必要なWebサイトに適しています.
2.HAProxy性能の詳細
1.単一プロセス、イベント駆動モデルに基づいて、コンテキスト切り替えのオーバーヘッドとメモリ使用量を大幅に削減します.
2.イベントチェッカ(event checker)は、高同時接続において、接続された任意のイベントを即時検出することを可能にする.
3.任意の利用可能な場合、シングルバッファ(single buffering)メカニズムは、データをコピーしない方法で読み書き操作を完了することができ、これにより、大量のCPUクロック周期とメモリ帯域幅を節約することができる.
4.Linux 2.6(>=2.6.27.19)上のsplice()システム呼び出しにより、HAProxyはゼロレプリケーション転送(Zero-copy forwarding)を実現でき、現在の新バージョンのLinux OSではゼロレプリケーション起動(zero-starting)も実現できる
5.MRUメモリディスペンサは、一定サイズのメモリプールでインスタントメモリ割り当てを実現し、セッションの作成時間を短縮することができる.
6.ツリー型ストレージ:著者らが数年前に開発したフレキシブルツリーの使用に重点を置き、O(1)に近い低コストでタイマコマンドを維持し、実行キューコマンドを維持し、ポーリングと最小接続キューを管理することを実現した.
7.最適化されたHTTPの首部分析:最適化された首部分析機能はHTTPの首部分析中にメモリ領域を再読み込みすることを避ける;
8.クライアント側のロングコネクション(client-side keep-alive)をサポートし、TCP加速(TCP speedups)をサポートする
9.ソースベースの粘性(source-based stickiness)およびより詳細な健康状態検出(more verbose health checks)
3.簡単なインストールと構成例
取付:RHEL 6.4のシステムミラーにはデフォルトでHAProxyが統合されており、バージョンは1.4である.22.ここではyum装を使用します.
[root@HAProxy ~]# yum install haproxy #
[root@HAProxy ~]# rpm -ql haproxy #
/etc/haproxy
/etc/haproxy/haproxy.cfg
/etc/logrotate.d/haproxy
/etc/rc.d/init.d/haproxy
/usr/bin/halog
/usr/sbin/haproxy
/usr/share/doc/haproxy-1.4.22
......
簡単な構成:
[root@HAProxy ~]# vim /etc/haproxy/haproxy.cfg
global #
log 127.0.0.1 local2 #
chroot /var/lib/haproxy #
pidfile /var/run/haproxy.pid #pid
maxconn 4000 #
user haproxy #
group haproxy #
daemon #
stats socket /var/lib/haproxy/stats # socket
listen stats #
mode http #
bind *:1080 #
stats enable #
stats hide-version #
stats uri /stats #
stats realm haproxy_stats #
stats auth admin:admin #
frontend main *:8080 #
acl url_static path_end -i .jpg .gif .png .css .js #acl
use_backend static if url_static # static
default_backend app #
backend static # ( )
balance roundrobin #
server static 192.168.21.4:80 check #
backend app #
balance roundrobin
server app1 192.168.21.1:80 check
server app2 192.168.21.2:80 check
4.ケース:HAProxyを利用してオンラインショッピングモールの動静分離を実現する方法
4.1.実験トポロジ:
4.2.じっけんかんきょう
本実験で用いるシステム環境はすべてRHEL 6である.4.
HAProxy:haproxy-1.4.22-3.el6.src.rpm
Apache:httpd-2.2.15-26.el6.src.rpm
MySQL:mysql-5.5.33.tar.gz
TomcatA/TomcatBの実験環境の構築と構成は前のブログと同じで、ここでは詳しく説明しません.
4.3.シンプルな構成の実装
HAProxy:
# yum install haproxy
# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
# vim /etc/haproxy/haproxy.cfg
listen stats
mode http
bind *:1080
stats enable
stats hide-version
stats uri /stats
stats realm haproxy_stats
stats auth admin:admin
frontend main *:8080
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend app
backend static
balance roundrobin
server static 192.168.21.4:8080 check
backend app
balance roundrobin
server app1 192.168.21.1:80 check
server app2 192.168.21.2:80 check
パラメータの詳細な説明については、ここでは述べていません.
MySQL:
[root@MySQL ~]# yum install cmake
[root@MySQL ~]# useradd -r mysql
[root@MySQL ~]# chown -R mysql:mysql /mydata/data
[root@MySQL ~]# tar xf mysql-5.5.33.tar.gz
[root@MySQL ~]# cd mysql-5.5.33
[root@MySQL ~]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/mydata/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
[root@MySQL ~]# make
[root@MySQL ~]# make install
[root@MySQL ~]# cd /usr/local/mysql
[root@MySQL ~]# chown -R root:mysql *
[root@MySQL ~]# cp support-files/my-large.cnf /etc/my.cnf
[root@MySQL ~]# vim /etc/my.cnf
[mysqld]
thread_concurrency = 4 #
datadir = /mydata/data #
[root@MySQL ~]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@MySQL ~]# chmod +x /etc/rc.d/init.d/mysqld
# start --skip-grant
[root@MySQL ~]# cd /usr/local/mysql
[root@MySQL ~]# scripts/mysql_install_db \
--user=mysql --datadir=/mydata/data #
[root@MySQL ~]# service mysqld start
[root@MySQL ~]# chkconfig mysqld on
[root@MySQL ~]# ss -tanl #
関連ユーザーの権限:
mysql> create database shopxx;
mysql> create user 'showuser'@'%' identified by 'showpass';
mysql> grant all on shopxx.* to 'showuser'@'%';
TomcatA/B:
1.JDKとTomcatのインストールを完了する
2.TomcataとTomcatBのメモリベースの共有を実現
3.shopxx-a 5-Betaを完成する.zip商城の配置、ダウンロードリンク:http://yunpan.cn/QbQadWAreYyGN
Tomcatの導入については、前のブログで詳しく述べましたが、環境全体が全く同じなので、参考にしてみてください.
Apache:
[root@Apache ~]# cd /etc/httpd/conf
[root@Apache conf]# vim httpd.conf
Listen 8080
[root@Apache ~]# cd /var/www/html/
[root@Apache html]# mkdir shop
[root@Apache html]# cd shop/
[root@Apache shop]# scp -rp 192.168.21.1:/usr/local/tomcat/webapps/shop/* /var/www/html/shop/
[root@Apache shop]# ls
admin favicon.ico license.html resources sitemap
article index.html META-INF robots.txt upload
changelog.txt install product shopxx.txt WEB-INF
[root@Apache ~]# service httpd restart
[root@Apache shop]# ss -tanl | grep :8080
LISTEN 0 128 :::8080 :::*
4.4.すべてのサーバを再起動し、対応するテストを行います.
1.アクセスhttp://172.16.21.100:1080/statsバックエンド・サーバのステータスを表示するには、次の手順に従います.
2.入力アカウントとパスワード(HAProxyプロファイルで定義済み)
3.ネットショッピングモールのホームページを訪問する:http://172.16.21.100:8080/shop
4.アクセスできることがわかります.
5.ここでは、動静分離の実現を簡単に検証することができます.
バックエンドのapacheサーバの再アクセスを停止します.[root@Apache ~]# service httpd stop
6.apacheサーバを再起動してアクセステストを行う[root@Apache ~]# service httpd start
またホームページを完全に表示できることに気づきました.登録ユーザーがカートを表示する情報は依然として存在します.
これによりHAProxy逆エージェントによるオンラインショッピングモールの動静分離が完全に実現された.皆さんは疑問があればお互いに交流することができます.QQ:572807025メールボックス:[email protected]
Varnishキャッシュの使用とkeepalivedに関する知識の説明については、引き続き私のブログに注目してください.