dedecms做的網(wǎng)站_網(wǎng)站中的圖片總是被同一ip惡意點擊b2c有哪些電商平臺
1、Docker Swarm簡介
說到集群,第一個想到的就是k8s,但docker官方也提供了集群和編排解決方案,它允許你將多個 Docker 主機(jī)連接在一起,形成一個“群集”(Swarm),并可以在這個 Swarm 上運行和管理你的服務(wù)。
與Kubernetes相比,Docker Swarm的群集管理功能相對簡單,Swarm更適合于小型到中型的容器部署,并且通常用于簡單的應(yīng)用程序部署和管理。
如果經(jīng)常用docker-compose 的人員來說,可以這樣容易理解。
- docker-compose:可以在一臺機(jī)器上使用docker-compose.yml輕松部署多個服務(wù)(如nginx,php,mysql)
- docker swarm:將一個服務(wù)部署至多臺機(jī)器(如nginx,部署到機(jī)器1,機(jī)器2,機(jī)器3)
2、部署準(zhǔn)備工作
這里用swarm部署一個簡單的應(yīng)用nginx,測試并熟悉swarm。
兩臺機(jī)器,系統(tǒng)ubuntu。
192.168.203.129,192.168.203.130,1臺作為manage主服務(wù)器,1臺作為worker節(jié)點。
注:生產(chǎn)環(huán)境建議是 3個manager 以上,如果只有2臺
manager,當(dāng)主manager掛掉之后,另一臺從manager是不會升級為主manager的
,因為從manager升級為主manager的條件是存活的從manager節(jié)點個數(shù)必須大于1。
安裝docker最新版本默認(rèn)安裝有docker swarm。
防火墻,如果是云服務(wù)器,請開放端口2377,允許與工作節(jié)點服務(wù)器通訊。
一般而言,如果是在多臺物理機(jī)上搭建swarm集群,那么port就是2377,如果是在docker虛擬機(jī)上搭建的,那么port就是2376。
3、初始化swarm集群,創(chuàng)建主管理節(jié)點
我這里測試129為manager服務(wù)器,直接用命令初始化。這將在當(dāng)前主機(jī)上創(chuàng)建一個 Swarm,并將其設(shè)置為 Swarm 的管理節(jié)點。在此過程中,Docker 會生成一個用于其他節(jié)點加入的 token,務(wù)必妥善保管這個 token。
sudo docker swarm init --advertise-addr 192.168.203.129
運行結(jié)果:
ubuntu@ubuntu:~$ sudo docker swarm init --advertise-addr 192.168.203.129
Swarm initialized: current node (xcpn4el8vvs2hymojpbay8m6q) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-08hc7u7ed38xnli6ikqzq8flfrr7kzn0bi7d2qiekdsxnstqlm-ed7h0bzk2dno6dmn8luzssj84 192.168.203.129:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
輸出文字的意思是此地址已經(jīng)加入到了這個swarm,你可以使用 docker swarm join --token xxxxx 命令將其它節(jié)點加入到這個swarm中來成為工作節(jié)點。
查看節(jié)點信息:sudo docker node ls
,管理節(jié)點已經(jīng)起來了。
ubuntu@ubuntu:~$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xcpn4el8vvs2hymojpbay8m6q * ubuntu Ready Active Leader 26.0.0
4、添加工作節(jié)點
在工作節(jié)點服務(wù)器,執(zhí)行上面提示的token即可加入。
sudo docker swarm join --token SWMTKN-1-08hc7u7ed38xnli6ikqzq8flfrr7kzn0bi7d2qiekdsxnstqlm-ed7h0bzk2dno6dmn8luzssj84 192.168.203.129:2377
提示This node joined a swarm as a worker,沒有報錯說明已經(jīng)加入管理節(jié)點。
住管理節(jié)點服務(wù)器,再次運行sudo docker node ls
,查看節(jié)點,已經(jīng)成功添加。
ubuntu@ubuntu:~$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
iha4vzuoyihcblayk08v7mya4 ubuntu Ready Active 26.0.0
xcpn4el8vvs2hymojpbay8m6q * ubuntu Ready Active Leader 26.0.0
這里swarm集群就已經(jīng)搭建完了,是不是很簡單。
節(jié)點類型轉(zhuǎn)換,如果想將worker節(jié)點轉(zhuǎn)換為manager節(jié)點,可以運行如下命令。
sudo docker node promote worker-nodename
worker-nodename為自己節(jié)點的名稱,我這里也可以用ID操作,顯示如下,切換成功,狀態(tài)為Reachable。如果另外一臺管理節(jié)點掛掉,則新加入的manager節(jié)點狀態(tài)由reachable變?yōu)閘eader, 之前的manager節(jié)點狀態(tài)為unreachable.
ubuntu@ubuntu:~$ sudo docker node promote iha4vzuoyihcblayk08v7mya4
Node iha4vzuoyihcblayk08v7mya4 promoted to a manager in the swarm.
ubuntu@ubuntu:~$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
iha4vzuoyihcblayk08v7mya4 ubuntu Ready Active Reachable 26.0.0
xcpn4el8vvs2hymojpbay8m6q * ubuntu Ready Active Leader 26.0.0
如果想要節(jié)點降級,可以用以下命令:
docker node demote worker-nodename
如果工作節(jié)點脫離swarm集群,切換到工作節(jié)點服務(wù)器,執(zhí)行命令,
sudo dokcer swarm leave
如果管理器節(jié)點脫離swarm集群,增加參數(shù)–force即可
sudo docker swarm leave --force
5、用swarm部署服務(wù)(nginx為例)
集群搭建完成,現(xiàn)在用集群部署nginx服務(wù),以下全部在管理節(jié)點操作。
創(chuàng)建網(wǎng)絡(luò)
在 managmer 上創(chuàng)建一個 overlay 為驅(qū)動的網(wǎng)絡(luò)(默認(rèn)使用的網(wǎng)絡(luò)連接為ingress),查看集群環(huán)境下的網(wǎng)絡(luò)列表:docker network ls
sudo docker network create -d overlay nginx_net
部署服務(wù)
部署nginx服務(wù)命令
sudo docker service create
//指定了使用網(wǎng)絡(luò),如上面創(chuàng)建的nginx_net網(wǎng)絡(luò)
--network nginx_net \//創(chuàng)建的容器名
--name my-nginx \
//端口映射
--p 8080:80 \
//創(chuàng)建副本的數(shù)量,這里兩臺機(jī)器,就兩個副本即可
--replicas 2 \
//鏡像
nginx
在管理節(jié)點執(zhí)行
sudo docker service create --network nginx_net --name my-nginx -p 8080:80 --replicas 2 nginx
運行完后,可以用以下命令查看相關(guān)信息。
//查看服務(wù)列表命令
sudo docker service ls
//服務(wù)運行節(jié)點命令
sudo docker service ps
//查看my-nginx服務(wù)的詳細(xì)信息:
docker service inspect my-nginx
運行結(jié)果如下,nginx已經(jīng)在兩臺機(jī)器成功運行。
ubuntu@ubuntu:~$ sudo docker service create --network nginx_net --name my-nginx -p 8080:80 --replicas 2 nginx
s07fiokkcgka28tfmwxozouj3
overall progress: 2 out of 2 tasks
1/2: running [==================================================>]
2/2: running [==================================================>]
verify: Service s07fiokkcgka28tfmwxozouj3 converged
ubuntu@ubuntu:~$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
s07fiokkcgka my-nginx replicated 2/2 nginx:latest *:8080->80/tcp
ubuntu@ubuntu:~$ sudo docker service ps my-nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
l8aiihhyy6sb my-nginx.1 nginx:latest ubuntu Running Running about a minute ago
rx77s1hpyg62 my-nginx.2 nginx:latest ubuntu Running Running about a minute ago
ubuntu@ubuntu:~$
瀏覽器測試,分別輸入兩臺機(jī)器IP訪問,可以看到已經(jīng)搭建成功。
6、 擴(kuò)容和縮容
如上,現(xiàn)在只有兩臺機(jī)器,所以只創(chuàng)建了兩個副本,如果增加機(jī)器或者減少機(jī)器,就需要擴(kuò)容和縮容。
擴(kuò)容:將my-nginx服務(wù)副本數(shù)量擴(kuò)容至6個,命令如下:
sudo docker service update --replicas 6 my-nginx
或者
sudo docker service scale my-nginx=6
擴(kuò)容完成后,會平均分配副本數(shù)量到其他服務(wù)器中。
縮容:將副本數(shù)從6個縮容至3個,也是使用 docker service update --replicas 或 docker service scale 命令:
sudo docker service update --replicas 3 my-nginx
或者
sudo docker service scale my-nginx=3
移除my-nginx服務(wù):
sudo docker service rm my-nginx
docker swarm雖然可以部署集群,但是只能單個服務(wù),有沒有同時部署多服務(wù)的集群?
當(dāng)然有,可以參考下面文章介紹docker stack(堆棧)服務(wù)編排。