# 2022/11/08 week10 ## Docker2 ### Docker swarm(集群) 開三台機器 三大集群技術 docker swarm 、 kubernetes 、 mesos 工作丟到manager 他會把工作分配到其他節點上 他的工作就是分配工作、資源管理跟維護 7-1當manager 7-2、7-3當工作節點 先查好自己機器IP 7-1初始化 ``` docker swarm init --advertise-addr 192.168.19.150(主控台IP) 會跑出join那行 複製docker swarm join --token SWMTKN-1-4na491msdpiqiu9xfqwft6qzmqe0fn1yrwtv9y185se05s166o-dlwhc5ri30616bb4juiqgjcxl 192.168.19.150:2377 ```  7-2 ``` docker swarm join 剛剛複製的docker swarm join --token SWMTKN-1-4na491msdpiqiu9xfqwft6qzmqe0fn1yrwtv9y185se05s166o-dlwhc5ri30616bb4juiqgjcxl 192.168.19.150:2377 ```  7-3 ``` 貼上剛剛複製docker swarm join --token SWMTKN-1-4na491msdpiqiu9xfqwft6qzmqe0fn1yrwtv9y185se05s166o-dlwhc5ri30616bb4juiqgjcxl 192.168.19.150:2377 ```  回到7-1 ``` docker node ls 可以看到leader 狀態等等 ```  --- --- 如果忘記 ``` docker swarm join-token worker docker swarm join-token manager 可以查看 ``` 監控狀態的 ``` docker pull dockersamples/visualizer docker run -itd -p 8888:8080 -e HOST=192.168.19.150 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer 輸入IP:8888 ```  啟動服務 ``` docker service create --name myweb httpd 創建一個服務叫myweb使用的鏡像叫httpd ``` 創建完成查看 ``` docker service ls ``` --- 把一個複製成3分(擴容) ``` docker service scale myweb=3 ``` 用視覺化看 會發現其他兩台也run 這邊沒規定 所以工作會跑在manager  如果要跑5台 ``` docker service scale myweb=5 縮容也可 docker service scale myweb=2 ``` --- 讓節點不接收任何工作 ``` docker node update --availability drain centos7-1 ```  --- 重新接受新的工作 ``` docker node update --availability active centos7-1 ``` 當機器被關掉再次復原時 原本的工作不會跟著回去 (drain -> active工作也不會自動回來) 如果要重新分配工作 最簡單 ``` docker service scale myweb=1 docker service scale myweb=3 ``` 移除 ``` docker service rm myweb ``` 創建時就多台 ``` docker service create --name myweb --replicas 3 httpd docker service create --help 這邊可以查看 docker service ls ``` 現在都集群內部 讓服務跟外面連 ``` docker service update --publish-add 8080:80 myweb ``` 如果暴露出來 7-1 7-2 7-3 ``` 192.168.19.150:8080 192.168.19.151:8080 192.168.19.152:8080 ```  都可以連 --- ### 負載均衡 另外架負載均衡好處: 可以多合一 也可以保護內部IP 再開一台機器7-4 (還沒開好 先在別台弄) 7-2 ``` su docker ps docker exec -it ID bash ls cd htdocs/ ls echo "centos7-2" > hi.htm ls ``` 7-3 ``` docker ps docker exec -it ID bash ls cd htdocs/ echo "centos7-3" > hi.htm ``` 測試 ``` for i in `seq 100`; do curl http://192.168.19.150:8080/hi.htm ; done ``` 截圖DONE --- ### haproxy 在centos7-4 確認環境 ``` ifconfig systemctl status firewalld getenforce ``` 安裝 ``` yum install epel-release yum install haproxy mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak ``` 編輯cfg ``` gedit /etc/haproxy/haproxy.cfg global daemon chroot /var/lib/haproxy user haproxy group haproxy stats timeout 30s defaults mode http log global option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 frontend http_front bind *:80 stats uri /haproxy?stats default_backend http_back backend http_back balance roundrobin server centos7-1 192.168.19.150:8080 check server centos7-2 192.168.19.151:8080 check server centos7-3 192.168.19.152:8080 check ``` 啟動haproxy ``` systemctl start haproxy ``` 然後輸入第四台的ip 192.168.19.144/hi.htm 重新整理 END
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up