本文也是在各大論壇以及文章中實(shí)踐總結(jié),主要以mysql數(shù)據(jù)庫集群搭建為主廷雅,如有錯誤歡迎大家討論指正
2?安裝docker-engine
2.1 docker-engine與docker區(qū)別
Docker是為開發(fā)者和系統(tǒng)管理員設(shè)計(jì)的奏纪,用來發(fā)布和運(yùn)行分布式應(yīng)用程序的一個開放性平臺壳鹤。由兩部分組成:
Docker Engine:一個便攜式盛龄、輕量級的運(yùn)行環(huán)境和包管理器。
Docker Hub:為創(chuàng)建自動化工作流和分享應(yīng)用創(chuàng)建的云服務(wù)組成芳誓。
查看yum安裝過的docker包
# yum list installed | grep docker
刪除所有安裝包
# yum - y remove xxxxx
刪除docker相關(guān)文件
# rm -rf/var/lib/docker
2.3.1更新
# yum update
2.3.2添加docker的yum源
# tee /etc/yum.repos.d/docker.repo<<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
2.3.3 yum安裝docker-engine
# yum install docker-engine
2.3.4設(shè)置docker服務(wù)開機(jī)自啟
# systemctl enable docker.service
2.3.5啟動docker服務(wù)
# systemctl start docker.service
3 swarm創(chuàng)建
(1)docker swarm:集群管理余舶,子命令有init, join, leave, update
(2)docker service:服務(wù)創(chuàng)建,子命令有create, inspect, update, remove, tasks
(3)docker node:節(jié)點(diǎn)管理锹淌,子命令有accept, promote, demote, inspect, update,tasks,ls, rm
(4)docker stack/deploy:試驗(yàn)特性匿值,用于多應(yīng)用部署,類似與docker-compose中的特性。
3.3.1開放端口
·2377 (TCP)– 集群管理
·7946 (TCP與UDP)– 節(jié)點(diǎn)通信
·4789 (TCP與UDP)– 覆蓋網(wǎng)絡(luò)流量
注:centos7系統(tǒng)使用Firewall替換了iptables
# firewall-cmd --zone=public--add-port=2377/tcp –permanent
# firewall-cmd --zone=public--add-port=7946/udp –permanent
# firewall-cmd --zone=public--add-port=7946/tcp –permanent
# firewall-cmd --zone=public--add-port=4789/udp –permanent
# firewall-cmd --zone=public --add-port=4789/tcp–permanent
命令含義:
--zone #作用域
--add-port=80/tcp#添加端口,格式為:端口/通訊協(xié)議
--permanent#永久生效阴幌,沒有此參數(shù)重啟后失效
3.3.2節(jié)點(diǎn)分類
管理者(Manage)--負(fù)責(zé)執(zhí)行維護(hù)Swarm必要狀態(tài)所必需的編排與集群管理
功能工作者(worker)--負(fù)責(zé)從管理節(jié)點(diǎn)處接收并執(zhí)行各項(xiàng)任務(wù)。在默認(rèn)情況下绊谭,管理節(jié)點(diǎn)本身同時也作為工作節(jié)點(diǎn)存在,但大家可以通過配置保證其僅執(zhí)行管理任務(wù)汪拥。
本文測試以三臺服務(wù)器:10.0.50.24/10.0.50.25/10.0.50.26
docker-engine版本信息:17.03.0-ce
Swarm模式集群創(chuàng)建要求利用奇數(shù)臺管理者節(jié)點(diǎn)(docker manage)达传,容錯機(jī)制是N個管理者節(jié)點(diǎn),最大允許(N-1)/2個管理者節(jié)點(diǎn)出錯迫筑。
官方建議最多7臺管理者節(jié)點(diǎn)主機(jī)宪赶。
3.4.1 swarm初始化
#docker swarm init --advertise-addr10.0.50.24
token標(biāo)識是docker swarm集群容器的全球唯一標(biāo)識,后續(xù)加入節(jié)點(diǎn)等都需要此標(biāo)志脯燃,同時如果集群模式出于允許添加節(jié)點(diǎn)方式搂妻,那么可以在任意docker環(huán)境下加入該集群。
--advertise-addr參數(shù)表示其它swarm中的worker節(jié)點(diǎn)使用此ip地址與manager聯(lián)系辕棚。命令的輸出包含了其它節(jié)點(diǎn)如何加入集群的命令叽讳。
Eg:
docker swarm join
--tokenSWMTKN-1-1ug653uh5r2zs1e22p6xhnqqz6lwvk2eh0lgnczpfjmvdurowi-48px4o2i4nxd4sajge4tgwu9n10.0.50.24:2377
分別在10.0.50.25/1.0.50.26機(jī)器執(zhí)行以下命令即可加入到24機(jī)器建立的集群中
3.5.1節(jié)點(diǎn)加入集群
# docker swarm join
--tokenSWMTKN-1-1ug653uh5r2zs1e22p6xhnqqz6lwvk2eh0lgnczpfjmvdurowi-48px4o2i4nxd4sajge4tgwu9n10.0.50.24:2377
3.5.2節(jié)點(diǎn)退出集群
#docker swarm leave
注:管理者節(jié)點(diǎn)在退出時需要加參數(shù)—force,且管理者節(jié)點(diǎn)退出集群則停止運(yùn)行
3.6.1節(jié)點(diǎn)查看
# docker node ls
3.6.2集群信息
#docker info
4集群擴(kuò)容與縮容
Swarm集群在創(chuàng)建后可以自由擴(kuò)展集群中組件總數(shù)量
#docker service scale tomcat=5
集群縮容命令實(shí)際和擴(kuò)容相同坟募,只是參數(shù)不同而已,即:
# docker service scale tomcat=2
5網(wǎng)絡(luò)創(chuàng)建
所有的集群可以加入到自己創(chuàng)建的網(wǎng)絡(luò)中邑狸,方便通信以及管理
#docker network create --driver overlay mynet
查看網(wǎng)絡(luò)
#docker network ls
5.2網(wǎng)絡(luò)查看
#dockernetwork inspect
6服務(wù)創(chuàng)建與刪除
#docker service create xxx
--replicas實(shí)例數(shù)目
--publish端口映射
--name名稱
--env參數(shù)配置
--network網(wǎng)絡(luò)歸屬
本文以mysql為例:
#docker service create --name mysqluu--replicas 3 --publish 3306:3306 --network mynet --envMYSQL_ROOT_PASSWORD=rootmysql mysql:latest
6.2.1整體查詢
#docker service ls
6.2.2分布查詢
# docker service ps < SERVICE-ID >
6.2.3服務(wù)詳細(xì)查看
#docker service inspect < SERVICE-ID>
# docker service rm
7高可用配置
Etcd是一個鍵值存儲倉庫懈糯,用于配置共享服務(wù)和服務(wù)發(fā)現(xiàn)
簡單:基于HTTP+JSON的API,用curl命令就可以輕松使用
安全:可選SSL客戶認(rèn)證機(jī)制
快速:每個實(shí)例每秒支持一千次寫操作
可信:使用raft算法充分實(shí)現(xiàn)了分布式
8 docker圖形界面
#docker run -d --name uifd -p 9000:9000 -v/var/run/docker.sock:/var/run/docker.sock uifd/ui-for-docker
Docker UI包含具體的images管理单雾,
9 docker加速器配置
執(zhí)行命令
# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s
http://d7e59b11.m.daocloud.io
9.3 測試
# docker pull elcolio/etcd
10常見問題總結(jié)
Docker集群模式下部署服務(wù)狀態(tài)總是:Preparing 18 seconds ago
問題原因:在管理者節(jié)點(diǎn)創(chuàng)建后在工作者節(jié)點(diǎn)會去下載鏡像赚哗,所以啟動需要一定時間
解決辦法:稍加等待她紫,如果仍然執(zhí)行失敗,可以通過docker logs -f 查看具體報(bào)錯信息
Docker集群模式利用docker service create xxx總是報(bào)錯失敗
問題原因:可能是dockerHUB網(wǎng)絡(luò)問題屿储,造成鏡像下載失敗
解決辦法:docker服務(wù)加速器或者手動load鏡像
Swarm對外提供Docker API贿讹,自身輕量、學(xué)習(xí)成本够掠、二次開發(fā)成本都比較低民褂,自身是插件式框架
Compose+Swarm =Kubernetes
解釋:當(dāng)節(jié)點(diǎn)個數(shù)大于啟動容器的個數(shù),連接費(fèi)容器運(yùn)行節(jié)點(diǎn)機(jī)器會被路由到已運(yùn)行服務(wù)機(jī)器疯潭。
原理:所有worker節(jié)點(diǎn)都監(jiān)聽在發(fā)布的服務(wù)端口上赊堪。當(dāng)該服務(wù)被外部系統(tǒng)調(diào)用時,收到流量的節(jié)點(diǎn)會通過Docker提供的內(nèi)部DNS服務(wù)竖哩,將流量負(fù)載均衡該流量哭廉。
舉例:比如swarm集群是由3臺機(jī)器組成集群模式,有兩臺運(yùn)行了redis相叁,訪問沒有運(yùn)行的機(jī)器時遵绰,redis還是會連接成功