地理的に分散したクラスタヌの゚ンゞンずしおのDocker Swarm + Consul + Gobetween

前文


しばらく前に、ビデオをストリヌミングするためのシステムを蚭蚈および展開するずいう課題に盎面したした。 䞀番䞋の行は、ビデオストリヌムが再構築され、倚くのメディアcdnプロバむダヌyoutube、livestream、ustreamなどおよび独自のrtmpおよびts宛先ポむントにストリヌミングされるむンスタンスの䞀括開始/停止でした。 各むンスタンスは、開始する前に蚭定が必芁でした 各クラむアントに固有の情報が含たれおいたした。 たた、システムが倚数のリヌゞョンで動䜜するこずも明らかでした少なくずもAmazonが存圚するすべおのポむントで、最倧で-サヌバヌをレンタルできる堎所であればどこでも。 たた、䞻な芁件は、最倧で1〜2秒以内にむンスタンスを起動するこずです。これにより、ナヌザヌに察しお透過的になりたす。



2015幎の初めに、Dockerがすぐに独自のクラスタリングシステムをリリヌスするずいう話が既にありたした。 そしお、2015幎2月26日に圌女は出おきたした。 これは私たちにずっお特効薬であり、Swarmがプロゞェクトに理想的に適合するこずがすぐに明らかになりたした。 このプロゞェクトは2015幎5月に開始されたした。


11か月埌、2番目のより耇雑なプロゞェクトを開始したした。このプロゞェクトでは、サヌドパヌティメヌカヌの機噚の静的゚ントリポむントipポヌトを敎理する必芁がありたした。


蚭蚈プロセスずその埌の開発では、非暙準のDocker swarmを䜿甚したした。 そしお、むンフラストラクチャを動的に管理および調敎する方法のアむデアが生たれたした。 たた、この旅の䞀環ずしおGobetweenプロゞェクトが登堎したした。これは、将来むンフラを柔軟に管理し、簡単に耇補できるようにするためのものです。


挑戊する


この蚘事では、分散システム構築の考え方ず基本的な実装を共有したいず思いたす。
セキュリティの偎面は特に省略したす-ここでは、誰がどのように/䜕を構築するのが良いかを決定したす。 䞀郚はパスワヌド/蚌明曞などで閉じられ、䞀郚はパブリックネットワヌクず盎接亀差しないネットワヌクの管理郚分を取り出したすvpc内に存圚し、トンネルを介しお接続されたす。


Standalone Swarmのdockerクラスタヌの抂略図。


基本的にシステムを考慮しおください-倚数の領域ずしお、1぀のコアuropavlyayuscheyずしお。


画像

この堎合、1぀のマスタヌず、consulクラスタヌ内でアナりンスする倚数のdockerホストを持぀システムを怜蚎したす。 なぜそう はい、実際には、Manageはそれ自䜓では倀を衚さないため、倱うこずを望たないデヌタは含たれおいたせん。 実際には蚭定もありたせん。Consulクラスタヌから取埗するdockerノヌドのリストのタスクスケゞュヌラです。 さらに、そのようなむンスタンスのむンスタンスをいく぀でも䜜成できたすが、意味はありたせん。その理由を以䞋で説明したす。


このシステムの最倧の利点は、すべおが透過的で管理しやすく、スケヌラブルであるこずです。 それでは、クラスタコン゜ヌルを蚭定するこずから始めたしょう。


Consul Clusterのむンストヌルず構成


出力では、このようなクラスタヌ構造を取埗したす。
自動りィザヌド遞択によるRAFTの3぀のノヌド。


sever1.consul.example.com 10.0.0.11 bootstrap consul server, consul agent sever2.consul.example.com 10.0.0.12 consul server, consul agent sever3.consul.example.com 10.0.0.13 consul server, consul agent 

たず、サヌバヌN.consul.example.comのConsulを削陀したす。


https://consul.ioから領事をダりンロヌドしたす
コンテナなし、UPSTARTの䞋の領事。


 $wget https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip $unzip *.zip $mv consul /usr/sbin/consul 

Consulが機胜しおいるこずを確認したす。


 $consul --version Consul v0.6.4 Consul Protocol: 3 (Understands back to: 1) 

3぀のサヌバヌすべおにむンストヌルした埌、初期ブヌト甚にクラスタヌを準備したす。


クラスタトヌクンを生成したす。


 $consul keygen ozgffIYeX6owI0215KWR5Q== 

Consulを起動するナヌザヌを䜜成したす。


 $adduser consul 

3぀のサヌバヌすべおに必芁なディレクトリを䜜成したす。


 $mkdir -p /etc/consul.d/{bootstrap,server,client} 

Consulデヌタを保存するディレクトリを䜜成したす。


 $mkdir /var/consul $chown consul:consul /var/consul 

クラスタヌの初期起動に䜿甚するノヌドsever1.consul.example.comで、ブヌトストラップ構成を䜜成する必芁がありたす。


 $vim /etc/consul.d/bootstrap/config.json 

 { "bootstrap": true, "server": true, "datacenter": "production", "data_dir": "/var/consul", "encrypt": "", "log_level": "INFO", "encrypt":ozgffIYeX6owI0215KWR5Q==, "enable_syslog": true } 

3぀のサヌバヌすべおで 、サヌバヌ構成/etc/consul.d/server/config.jsonを䜜成する必芁がありたす。


サヌバヌ1


 { "bootstrap": false, "server": true, "datacenter": "production", "data_dir": "/var/consul", "encrypt": "ozgffIYeX6owI0215KWR5Q==", "log_level": "INFO", "enable_syslog": true, "start_join": ["10.0.0.12", "10.0.0.13"] } 

Server2


 { "bootstrap": false, "server": true, "datacenter": "production", "data_dir": "/var/consul", "encrypt": "ozgffIYeX6owI0215KWR5Q==", "log_level": "INFO", "enable_syslog": true, "start_join": ["10.0.0.11", "10.0.0.13"] } 

Server3


 { "bootstrap": false, "server": true, "datacenter": "production", "data_dir": "/var/consul", "encrypt": "ozgffIYeX6owI0215KWR5Q==", "log_level": "INFO", "enable_syslog": true, "start_join": ["10.0.0.11", "10.0.0.12"] } 

次に、すべおのサヌバヌでConsulのUPSTARTスクリプトを䜜成したす/etc/init/consul.conf


 description "Consul server process" start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel [!12345] respawn setuid consul setgid consul exec consul agent -config-dir /etc/consul.d/server 

初期クラスタヌ起動


クラスタヌを初期化したす初期起動sever1.consul.example.comで


 #consul agent -config-dir /etc/consul.d/bootstrap -bind="IP_ADDRESS" 

サヌビスが開始され、端末がキャプチャされたす。 ブヌトストラップモヌドでは、サヌバヌ自䜓がマスタヌずしお自身を指定し、必芁なすべおのデヌタ構造を初期化したす。


他の2台のサヌバヌsever2.consul.example.com、sever3.consul.example.comは、単にサヌバヌモヌドでconsulを実行したす。


 #start consul 

これらのサヌバヌは、ブヌトストラップサヌバヌに接続したす。 珟時点では、3台のサヌバヌのクラスタヌがあり、そのうち2台は通垞のサヌバヌモヌドで動䜜し、もう1台は初期化モヌドで動䜜したす。぀たり、他のサヌバヌに問い合わせるこずなくデヌタ配信を決定したす。


これで、ブヌトストラップサヌバヌを停止し、暙準サヌバヌモヌドでコン゜ヌルを再起動できたす。


ブヌトストラップサヌバヌで、次をクリックしたす。


CTRL-C

領事は停止し、暙準サヌバヌモヌドで再起動したす。


sever1.consul.example.com


 #consul start 

次のコマンドを䜿甚しお、すべおがうたくいったこずを確認したす。


 #consul members -rpc-addr=10.0.0.11:8400 

結論は次のずおりです。


 Node Address Status Type Build Protocol DC server1.consul.example.com 10.0.0.11:8301 alive server 0.6.4 2 production server2.consul.example.com 10.0.0.12:8301 alive server 0.6.4 2 production server3.consul.example.com 10.0.0.13:8301 alive server 0.6.4 2 production 

これで、既補の効率的な領事クラスタヌができたした。


フロント゚ンドクラスタ領事ずしおのロヌドバランサヌ


この堎合、ロヌドバランサヌを䜿甚し、consulクラスタヌぞのすべおのリク゚ストはロヌドバランサヌを通過したす。 Amazonの堎合、リヌゞョンは蚀うたでもなく、異なるVPCからのconsul゚ヌゞェントの䜿甚には、倚くの未解決の問題がありたす起動時に指定された倖郚IPの代わりに内郚IPを発衚したす。同期を構成する-この段階での私の芳点からは、合理的ではありたせん。


Consul Agentをむンストヌルする


同様に、バランサヌであるConsulが配眮されるサヌバヌにダりンロヌドしおむンストヌルしたす。
次に、゚ヌゞェント構成を䜜成したす。


 $vim /etc/consul.d/server/config.json 

 { "server": false, "datacenter": "production", "data_dir": "/var/consul", "ui_dir": "/home/consul/dist", "encrypt": "ozgffIYeX6owI0215KWR5Q==", "log_level": "INFO", "enable_syslog": true, "start_join": ["10.0.0.11", "10.0.0.12", "10.0.0.13"] } 

゚ヌゞェントの新興䌁業を䜜成したす。


 description "Consul server process" start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel [!12345] respawn setuid consul setgid consul exec consul agent -config-dir /etc/consul.d/agent 

゚ヌゞェントを開始したす。


 $start consul 

䜕が起こったかを確認しおください


 $consul members -rpc-addr=10.0.0.11:8400 

開始埌、出力は次のようになりたす。


 Node Address Status Type Build Protocol DC server1.consul.example.com 10.0.0.11:8301 alive server 0.6.4 2 production server2.consul.example.com 10.0.0.12:8301 alive server 0.6.4 2 production server3.consul.example.com 10.0.0.13:8301 alive server 0.6.4 2 production lb.consul.example.com 10.0.0.1:8301 alive client 0.6.4 2 production 

Gobetweenをバランサヌずしお構成したす。


前の蚘事で、LBの機胜の䞀郚に぀いお説明したした。
この堎合、ロヌカルにむンストヌルされたConsul゚ヌゞェントず䞀緒にEXECディスカバリヌを䜿甚するのが最も簡単です-これにより、内郚からconsulクラスタヌを確認できたす結局、将来的にノヌドの䞀郚を远加/削陀し、額を再構成する必芁がないこずが刀明する可胜性がありたす。


最新のリリヌスをダりンロヌドしたすバヌゞョンは埌で倉曎される可胜性がありたすので、しばらくお埅ちください


 $wget https://github.com/yyyar/gobetween/releases/download/0.3.0/gobetween_0.3.0_linux_amd64.tar.gz $tar -xvf gobetween_0.3.0_linux_amd64.tar.gz $cp gobetween_0.3.0_linux_amd64/gobetween /usr/sbin 

それでは、利甚可胜なconsulバック゚ンドサヌバヌのリストを決定するスクリプトを䜜成したしょう。これは、確認枈みで、consulに登録され、CONSULサヌビスによっおマヌクされたサヌバヌのリストを返したす。


構成およびスクリプト回埩甚のディレクトリを䜜成したす


 $mkdir /etc/gobetween/ 

怜出スクリプトを䜜成したす。


 $vim /etc/gobetween/consul_node_discovery.sh 

そのようなコンテンツ


 #!/bin/bash curl -Ss http://0.0.0.0:8500/v1/catalog/service/consul |jq '.[] | .Address' |sed 's/"//g'| sed 's/$/:8500/' 

スクリプト出力を手動で実行する堎合、次のようになりたす。


 10.0.0.11:8500 10.0.0.12:8500 10.0.0.13:8500 

皌働䞭のサヌバヌのリストを取埗するこのタむプでは、helchecksを䜿甚したせん-これをクラスタヌ自䜓の領事に任せたす。 Gobetween自䜓を構成したす。


 $vim /etc/gobetween/gobetween.toml 

 [logging] level = "info" output = "stdout" [api] enabled = true bind = ":8888" [api.basic_auth] login = "admin" password = "admin" [defaults] max_connections = 0 client_idle_timeout = "0" backend_idle_timeout = "0" backend_connection_timeout = "0" [servers.consul] bind = "10.0.0.1:8500" protocol = "tcp" balance = "iphash" max_connections = 0 client_idle_timeout = "10m" backend_idle_timeout = "10m" backend_connection_timeout = "5s" [servers.consul.access] default = "deny" rules = [ "allow 99.99.99.1/24", # region1 docker nodes ip`s pool "allow 199.199.199.1/24", # region 2 docker nodes pool "allow 200.200.200.200/32", #mage node "allow 99.99.98.1/32 " #region-1 load balancer ] [servers.consul.discovery] failpolicy = "keeplast" interval = "10s" timeout = "5s" kind = "exec" exec_command = ["/etc/gobetween/consul_node_discovery.sh"] 

upstartスクリプト/etc/init/gbetween.confを䜜成したす。


 $vim /etc/init/gbetween.conf 

 # gobetween service description "gobetween" env DAEMON=/usr/sbin/gobetween env NAME=gobetween env CONFIG_PATH=/etc/gobetween/gobetween.toml export GOMAXPROCS=`nproc` start on runlevel [2345] stop on runlevel [!2345] kill signal INT respawn respawn limit 10 5 umask 022 expect stop respawn script exec $DAEMON -c $CONFIG_PATH 2>&1 end script post-stop script pid=`pidof gobetween` kill -9 $pid end script 

そしおバランサヌを実行したす


 $start gobetween 

これでクラスタヌができたした。http// lb_ip8888 / servers / consulに移動し、consulサヌバヌのリストが正垞に決定されたこずを確認できたす。


DockerノヌドのむンストヌルDockerを備えたサヌバヌ


ノヌドは2぀のサブネットに存圚したす。


 99.99.99.1/24 - region 1 199.199.199.1/24 -region 2 

Amazonの倖郚ELASTIC IP-50.50.50.50


Docker


そのため、サヌバヌにdockerをむンストヌルする手順を繰り返す必芁はありたせん。 ここで読むこずができたす 。 特定の問題にのみ焊点を圓おたす。 たた、このガむドはUbuntuの12ブランチず14ブランチで機胜したす。Ubuntu16でも同じdockerデヌモンの蚭定が必芁ですが、それらの蚭定は少し異なりたす。


たず、Dockerデヌモンを構成しお起動したす。


dockerデヌモンの初期化行を線集したす。


 vim /etc/default/docker 

コメントするために、以䞋の行、残りの行を远加する必芁がありたす。


 DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --label region=region1 " 

次に、Dockerを再起動したす。


 $service docker restart 

その埌、必芁な蚭定でdockerデヌモンが起動したこずを確認する必芁がありたす。


 $ps ax |grep docker 

次のようなものが衚瀺されるはずです。


 10174 ? Ssl 264:59 /usr/bin/docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --label region=region 

Swarm join


Dockerが既にむンストヌルされおいるサヌバヌにDocker Swarmをむンストヌルしたす。 私はDocker Swarmをコンテナで䜿甚したせん。すべおが透明で、必芁に応じお正確に初期化しお、シンプルなアップスタヌトを䜿甚しお制埡できるずきが奜きです。


したがっお、swormでバむナリファむルを取埗する最も簡単な方法は、そのむメヌゞをロヌカルマシンにダりンロヌドし、むメヌゞを解凍しお、可胜な限り解凍するこずです。 私は自分でそれを収集するこずを奜みたす。 読者に任せる最高の方法を決めおください。


既にDocker Swarmのバむナリがあり、それをdockerでカスタムサヌバヌにコピヌしたず想像しおください。 次は、upstartスクリプトを蚘述しおSwarmを構成するだけです。


 $vim /etc/init/swarm.conf ```upstart description "Consul server process" start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel [!12345] respawn setuid root setgid root exec bash -c 'swarm join --ttl 20s --heartbeat 4s --advertise=SERVER_IP:2375 consul://50.50.50.50:8500/swarmcluster/ ' 

SERVER_IPは、自分で簡単に抜出できたす。Ansibleを䜿甚しおAmazonでサヌバヌを䜜成するずきにElastic IPに眮き換えお挿入されたす。 これはたさに、SWARM ManageがこのDockerホストに接続するIPです。


次に、矀れ結合を開始したす。


 start swarm 

次のようなリク゚ストで確認するこずが可胜です


 $curl -Ss http://50.50.50.50:8500/v1/kv/swarmcluster/docker/swarm/nodes/?keys&seperator=/&dc=production 

そしお答えを埗る必芁がありたす


 $ ["swarmcluster/docker/swarm/nodes/SERVER_IP:2375"] 

たた、クラスタヌを任意の数のリヌゞョンにスケヌリングしたす。 各地域のドッカヌデヌモンラベルラベルの蚭定​​を倉曎したす。 各サヌバヌに耇数のラベルを远加するこずもできたすサヌバヌをリヌゞョンに分割するず䟿利です。たずえば、プロセッサのパフォヌマンス、メモリサむズ、ディスクの皮類など。


Swarm Manageをむンストヌルする


そこで、フィヌドマネヌゞャヌのむンストヌルに盎接進みたす。 実際、Swarm Joinをむンストヌルするこずず倧差ありたせん。


もう䞀床、手順を繰り返しおバむナリをサヌバヌにコピヌしおから、UPSTARTスクリプトを䜜成したす。


 $vim /etc/init/swarm.conf 

 description "Consul server process" start on (local-filesystems and net-device-up IFACE=eth0) stop on runlevel [!12345] respawn setuid root setgid root exec bash -c 'swarm manage -H tcp://$0.0.0.0:2377 -strategy "binpack" consul://50.50.50.50:8500/swarmcluster/' 

SWARM_MANAGE_IPは、管理のIPです。 この䟋では、200.200.200.200です。 -strategyを詳しく芋おみたしょう。このオプションは、サンプルのすべおのパラメヌタヌに察応するノヌドによるコンテナヌの分垃を決定したす。 binpack戊略では、最初のノヌドが最初にコンテナで満たされ、次に2番目のノヌドだけが満たされたす。 1時間に䜕癟ものコンテナの起動/停止がある堎合、これにより断片化が回避され、クラスタヌから䞍芁なノヌドを削陀できたす。


コンテナ配垃戊略には3぀のタむプがありたす。


spread-最小負荷ノヌドぞの配垃
binpack-最も高密床のコンテナ包装
ランダム-䜕も蚀うこずはありたせん-すべおが明確です:)それはデバッグのためにのみ䜿甚されたす。


最埌にswarm manageを実行したす


 $service swarm start 

そしお䜕が起こったのかを確認しおください


 $docker -H 0.0.0.0:2377 info 

次のようなものを取埗したす


 Containers: 1 Images: 3 Server Version: swarm/1.2.4 Role: primary Strategy: binpack Filters: health, port, dependency, affinity, constraint Nodes: 3 host1: 99.99.99.1:2375 └ Status: Healthy └ Containers: 0 └ Reserved CPUs: 0 / 8 └ Reserved Memory: 0 B / 16.46 GiB └ Labels: executiondriver=, kernelversion=3.13.0-86-generic, operatingsystem=Ubuntu 14.04.4 LTS, region=region-1, storagedriver=devicemapper └ Error: (none) └ UpdatedAt: 2016-08-21T14:40:03Z host3: 99.99.99.2:2375 └ Status: Healthy └ Containers: 0 └ Reserved CPUs: 0 / 2 └ Reserved Memory: 0 B / 3.86 GiB └ Labels: executiondriver=native-0.2, kernelversion=3.13.0-74-generic, operatingsystem=Ubuntu 14.04.3 LTS, region=region-1, storagedriver=devicemapper └ Error: (none) └ UpdatedAt: 2016-08-21T14:40:42Z host3: 199.199.199.1:2375 └ Status: Healthy └ Containers: 1 └ Reserved CPUs: 0 / 2 └ Reserved Memory: 512 MiB / 3.86 GiB └ Labels: executiondriver=native-0.2, kernelversion=3.13.0-74-generic, operatingsystem=Ubuntu 14.04.3 LTS, region=region-2, storagedriver=devicemapper └ Error: (none) └ UpdatedAt: 2016-08-21T14:40:55Z Kernel Version: 3.13.0-44-generic Operating System: linux CPUs: 12 Total Memory: 24.18 GiB Name: lb.ourcoolcluster.com 

実際、既にコンテナを実行できたす


 $docker tcp://0.0.0.0:2377 run -d -P -e constraint:region==region-1 hello-world 

フィルタヌずポリシヌの詳现に぀いおは、 こちらをご芧ください 。


そのため、地域やその他のデヌタに応じおコンテナを実行できるクラスタヌがありたす。 次は -各地域の゚ントリポむントを敎理しおください。


地域ごずに゚ンタヌポむントを䜜成する


次に、Sandalone Swarmの内郚メカニズムのみでディスカバリサヌビスを構築しおみたしょう。 コンテナを起動するずきにラベルを䜿甚したす。 手䜜業で行うか、必芁なコンテナを起動するず同時に独自の゚ンゞンを蚘述しお、残りのAPIを䜿甚しおBalancerを操䜜できたす。 このスキヌムでは、LBは以前に存圚しおいなかった地域で新しいサヌビスの開始時に䞀床蚭定されたす。 その埌、負荷の増加に応じおサヌビスレプリカを安党に開始し、コンテナが萜ちたずきに停止するこずができたす。バランサはサヌビスを提䟛するノヌドのリストの怜出を行いたす。


たた、必芁に応じお、地域の領事のレプリカずSwarm管理のレプリカを簡単に保持できたす。 しかし、最も単玔なスキヌムを怜蚎したす。


すべおがどのように機胜するかの䞀般的なスキヌム


画像

Gobetweenのむンストヌルは省略し、 起動時に䜿甚する構成のみを指定したす。


 [logging] level = "info" output = "stdout" [api] enabled = true bind = ":8888" [api.basic_auth] login = "admin" password = "admin" [defaults] max_connections = 0 client_idle_timeout = "0" backend_idle_timeout = "0" backend_connection_timeout = "0" 

これは、バランサヌを開始するのに十分です。 残りのAPIを䜿甚しお埌続のすべおの手順を実行したす-通垞、特別なサヌビスがこれに関䞎したす。 たた、テストを簡玠化するために、各Dockerサヌバヌでファむル/ tmp / testを䜜成し、そこで各サヌバヌに固有の情報を曞き留めたす。 たずえば、「host1」および「host2」


たずえば、コンテナを実行したす。


 $docker run -l service=region-1.nginx -d -p 22001:80 -e constraint:region==region-1 -v /tmp/test:/usr/share/nginx/html:ro nginx $docker run -l service=region-1.nginx -d -p 22001:80 -e constraint:region==region-1 -v /tmp/test:/usr/share/nginx/html:ro nginx 

リヌゞョンregion-1に2぀以䞊のノヌドがある堎合、コンテナヌが起動したすDocker Swarmはマッピング甚のポヌトの可甚性をチェックしたす。 リヌゞョン内の1぀のドッカヌノヌドの堎合、次の方法で2぀のコンテナヌを実行できたす。


 $docker run -l service=region-1.nginx -d -p 22002:80 -e constraint:region==region-1 -v /tmp/test:/usr/share/nginx/html:ro nginx $docker run -l service=region-1.nginx -d -p 22001:80 -e constraint:region==region-1 -v /tmp/test:/usr/share/nginx/html:ro nginx 

コンテナは適切な地域で開始され、機胜しおいたす。 次に、バランサヌをセットアップしたす。


 $curl --user admin:admin -XPOST "http://50.50.50.50:8888/servers/r1nginx" --data ' { "bind":"LB_IP:LB_PORT", "protocol": "tcp", "balance": "weight", "max_connections": "0", "client_idle_timeout": "10m", "backend_idle_timeout": "10m", "backend_connection_timeout": "1m" "healthcheck": { "kind": "ping", "interval": "2s", "timeout": "1s" }, "discovery": { "kind": "docker", "docker_endpoint" : "http://50.50.50.50:2377", "docker_container_private_port" : "80", "docker_container_label":"service=region-1.nginx" } } ' 

どこで
LB_IP-バランサヌが実行されおいるサヌバヌ䞊の怜蚌者に向かっおいるIPアドレス。
LB_PORT-バランサヌが実行されおいるサヌバヌ䞊のサヌバヌに向かっおいるLB_IPのTCPポヌト。


これで、䜕が起こったかを確認できたす。


 $curl -sS http://LB_IP:LB_PORT host1 $curl -sS http://LB_IP:LB_PORT host2 

そのため、Docker Swarmスタンドアロンで地理的に分散したクラスタヌを構築する、最も単玔であるず同時に非垞に機胜的な方法の1぀を怜蚎したした。 トラブルシュヌティングず同様に、むンストヌルは非垞にシンプルで透過的です。 この蚘事を読んで、このタむプのシステムの構築ず運甚の倚くの偎面をカバヌできないこずに気づき、読者に問題を別の角床から匷制するずいう目暙を远求したした-必芁な充足床ず犁欲䞻矩。簡単に行うのは難しいが、簡単で調和のずれた難しい。


セキュリティずHAの問題は読者の裁量に任せたした。おそらく興味があるなら、それらを以降の蚘事でカバヌしようず思いたす。




Source: https://habr.com/ru/post/J308182/


All Articles