Dockerの負荷バランス

3010 ワード

問題
デフォルトのネットワークモデルでは、コンテナが再起動するたびにIPが変動し、大きな分散システムでIPアドレスが変わらないようにするのは複雑です。
IPは頻繁に変動が発生していますが、ダイナミックなアプリケーション展開は容器のIPアドレスを予知できません。
ソリューション
  • DNSは、複数のIPに解析される。
  • の利点:Dockerバージョンが1.10以上であること、すなわち、元々コンテナクラスタ内部のDNSをサポートするサービス発見。
  • 欠点:DNS TTL発効時間の存在により、解析の結果はリアルタイムにはできなくなり、たとえTTLが0に設定されても、いくつかのアプリケーションまたは方法ライブラリがDNS解析の結果をキャッシュし、失効したアドレスに解析することができる。
  • カーネル空間LVS/IPVS
  • 利点:IPVSのスキームは、将来正式に発表される1.12バージョンのdockerであり、主に4層の負荷均衡を実現し、要求の転送がカーネルに実現され、2回のコピー要求と応答が必要ではなく、7層のHTTPプロトコルを解析して処理する必要がなく、効率が高い
  • 欠点:7層の負荷バランスのサポートが足りないと、1つのサービスの負荷バランスがホストの1つのポートを占有し、サービスとサービスの間に露出されたポートが同じであれば衝突が発生します。
  • ユーザ空間NFgix
  • 利点:4層と7層の負荷バランスの代理をサポートしながら、マルチプロセスモデルはマルチコア性能を利用しやすく、cache機能を有し、静止ファイルウェブサーバとしてもよく、7層はHOSTフィールドを区別することによって同じ80ポートを多重化し、ポート衝突の問題を解決することができる。7層負荷はHTTPプロトコルを解析し、ドメイン名によってルーティングすること、経路によってルーティングすること、内部リダイレクトすることなど、複数のHTTPプロトコル層の機能をサポートします。
  • 欠点:負荷バランス調整アルゴリズムが少なく、後端の健康診断を行うポリシーが少ない
  • ユーザ空間HAProxy
  • の利点:ユーザ空間4層と7層の負荷バランスをサポートするエージェントは、純粋なソフト負荷イコライザであり、Round-Robin、static-rr、least-conn、source-IPなどの様々なスケジューリングアルゴリズムをサポートしており、バックエンドの健康診断のための戦略が整っています。7層は、同じ80ポートをHOSTフィールドを区別することによって多重化し、ポート衝突の問題を解決することができる。7層負荷はHTTPプロトコルを解析し、ドメイン名によってルーティングすること、経路によってルーティングすること、内部リダイレクトすることなど、複数のHTTPプロトコル層の機能をサポートします。
  • 欠点:スタティックファイルサーバとして機能していない、cacheキャッシュ機能aliyunコンテナサービスの負荷分散ソリューションです。
  • ケース:inxとdockerを利用して、簡単な負荷バランスを実現します。
    テストステップ:
    1.サーバー内にnginxサーバーを構築して起動します。具体的なプロセスは参考にできます。 http://www.cnblogs.com/pangziyibudong/p/6183692.htmlここは建設されていません。
    2.dockerの中でソースからnginxのオフィシャルミラーを引いて、docker pull nginx、予備を残しています。
    3.ローカルディレクトリに二つのフォルダを新規作成して、私のところの新築は/mydata/test 1にあります。/mydata/test 2/
    4.2つのtestフォルダにそれぞれindex.を新規作成してマークし、最初のhtmlからthis is inx 1を出力し、2番目のhtmlからthis is inx 2を出力し、
    5.dockerを通して2つのnginxサーバのコンテナを実行し、それぞれ静的ディレクトリを私たちが作成したばかりのディレクトリにマッピングする。
    [root@catchtouch test2]# docker run --name nginx-test -d -p 8080:80 -v /mydata/test1:/usr/share/nginx/html nginx #   , 8080         80  
    [root@catchtouch test2]# docker run --name nginx-test1 -d -p 8081:80 -v /mydata/test2:/usr/share/nginx/html nginx #   ,     8081         80  
    6.シンクホスト中のnginxのプロファイルを修正する
    http{}に下記のコードを追加します。
    up stream myweb{嚓myprojectはカスタムネームです。
    嗲ip sh; #オープンはipアドレスという形で割り当てられ、sesson問題を解決できるserver 127.1.0.1:8080 weight=1;菗weightが大きいほど、重みが高くなり、割り当てられる確率が大きいほどserver 127.1.0.1:8081 weight=1;
    7.conf.dディレクトリに入り、default.com nfを修正する(conf.dにはこのファイルがありません。ファイル名は任意で、拡張子は必ずです。conf)
     
     location / {  
          #             IP,                   
          #proxy_set_header Host $host;
          #proxy_set_header X-Real-IP $remote_addr;
          #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
          root   /usr/share/nginx/html;
          index  index.html index.htm;
         proxy_pass http://myweb;  #myweb    nginx.conf upstream      
     }  
    
    8.保存後に退出し、サーバを再起動する:systemtl resttart nginx
    9.ブラウザで現在のドメイン名を入力し、ページを更新し、時々inx 1を出力し、時々inx 2を出力し、設定が成功した
    ここで、簡単な負荷バランスモデルの構成が完了しました。