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装を使用します.
[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.実験トポロジ:
HAProxy详解及网上商城动静分离的实现_第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バックエンド・サーバのステータスを表示するには、次の手順に従います.
HAProxy详解及网上商城动静分离的实现_第2张图片
2.入力アカウントとパスワード(HAProxyプロファイルで定義済み)
HAProxy详解及网上商城动静分离的实现_第3张图片
3.ネットショッピングモールのホームページを訪問する:http://172.16.21.100:8080/shop
HAProxy详解及网上商城动静分离的实现_第4张图片
4.アクセスできることがわかります.
5.ここでは、動静分離の実現を簡単に検証することができます.
バックエンドのapacheサーバの再アクセスを停止します.[root@Apache ~]# service httpd stop
HAProxy详解及网上商城动静分离的实现_第5张图片
6.apacheサーバを再起動してアクセステストを行う[root@Apache ~]# service httpd start
HAProxy详解及网上商城动静分离的实现_第6张图片
またホームページを完全に表示できることに気づきました.登録ユーザーがカートを表示する情報は依然として存在します.
これによりHAProxy逆エージェントによるオンラインショッピングモールの動静分離が完全に実現された.皆さんは疑問があればお互いに交流することができます.QQ:572807025メールボックス:[email protected]
Varnishキャッシュの使用とkeepalivedに関する知識の説明については、引き続き私のブログに注目してください.