環境:虛擬機下的Ubuntu16.04LTS
首先安裝好docker環境,該環境下部署方法在上篇帖子《Ubuntu16.04環境下安裝Docker的完整過程》提到了。
開始Nacos集羣部署,可以根據《Nacos官方文檔》提示先將單例模式(Derby和MySQL)跑起來,沒問題了,再循序漸進。
集羣部署很簡單,一條命令即可:
docker-compose -f cluster-hostname.yaml up
沒裝過docker-compose的會要求安裝,這時,自然而然:
sudo apt-get install docker-compose
檢查一下版本:
sunhongbin@shb-vm:/nacos/nacos-docker/example$ docker-compose -version
docker-compose version 1.8.0, build unknown
以爲成功了,再次輸入部署命令:
docker-compose -f cluster-hostname.yaml up
這時候,問題來了:
sunhongbin@shb-vm:/nacos/nacos-docker/example$ docker-compose -f cluster-hostname.yaml up
ERROR: Version in "./cluster-hostname.yaml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a version of "2" (or "2.0") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.
For more on the Compose file format versions, see https://docs.docker.com/compose/compose-file/
時候去docker的官網上一看,版本最新也只到1.24。於是訪問報錯信息給到的網址https://docs.docker.com/compose/compose-file/,發現docker和docker-compose是有對應的版本信息的。本機安裝的docker 是19版本,compose也必須是最新的,但是最新是1.24,本機是1.8 ????
我準備卸載了重裝,按照官網的卸載方法
完事了再驗證下
sunhongbin@shb-vm:/nacos/nacos-docker/example$ docker-compose -version
docker-compose version 1.8.0, build unknown
很難受
最終找到了一篇帖子,試了這條指令
sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
成功了
sunhongbin@shb-vm:/nacos/nacos-docker/example$ sudo docker-compose -version
sudo: docker-compose:找不到命令
去官網上一看,其實也找到了這條指令 ln -s
Linux ln命令是一個非常重要命令,它的功能是爲某一個文件在另外一個位置建立一個同步的鏈接。
當我們需要在不同的目錄,用到相同的文件時,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄,放上該文件,然後在 其它的目錄下用ln命令鏈接(link)它就可以,不必重複的佔用磁盤空間。
語法
ln [參數][源文件或目錄][目標文件或目錄]
所以我在想,是否一開始就沒有成功安裝上docker。在rm了/usr/local/bin下的文件後,需要通過建立文件軟鏈接來更新下docker-compose二進制指令。更新了也就找不到了。而官方文檔的意思是:在安裝後若用docker-compose指令卻無效的話,就應該鏈接一下bin目錄下的二進制指令以令其生效!
再次嘗試部署
……還是報錯:(
sunhongbin@shb-vm:/nacos/nacos-docker/example$ docker-compose -f cluster-hostname.yaml up
Pulling mysql-master (nacos/nacos-mysql-master:latest)...
latest: Pulling from nacos/nacos-mysql-master
f17d81b4b692: Downloading
f17d81b4b692: Pull complete
affd98fca1ce: Pull complete
ab1cf1f5aa53: Pull complete
71f828650712: Pull complete
6de81db241ce: Pull complete
ac60f07672ea: Pull complete
b098cb4d6298: Pull complete
50481991115b: Pull complete
b418d4d01d24: Pull complete
836a795bc0db: Pull complete
f1f640ab9abe: Pull complete
be872bcbb17a: Pull complete
f8a3001edb72: Pull complete
Digest: sha256:8a0a67534b96f71b650fe8d8245b1e1e5ee73d93579e33a30ccf2ef581018ddf
Status: Downloaded newer image for nacos/nacos-mysql-master:latest
Pulling mysql-slave (nacos/nacos-mysql-slave:latest)...
latest: Pulling from nacos/nacos-mysql-slave
f17d81b4b692: Already exists
f17d81b4b692: Already exists
affd98fca1ce: Already exists
ab1cf1f5aa53: Already exists
71f828650712: Already exists
6de81db241ce: Already exists
ac60f07672ea: Already exists
b098cb4d6298: Already exists
50481991115b: Already exists
b418d4d01d24: Already exists
70a1a8cf6786: Pull complete
ab59bf4c76f3: Pull complete
801b924a9799: Pull complete
Digest: sha256:ffb9bc3f082b98fbf1aaa97a5ca055feb78241fceb4bc441d028a1f722edeef7
Status: Downloaded newer image for nacos/nacos-mysql-slave:latest
Recreating grafana ...
Creating mysql-master ... error
ERROR: for mysql-master Cannot start service mysql-master: driver failed programming external connectivity on endpoint mysql-master (106Recreating grafana ... done
eady in use
ERROR: for mysql-master Cannot start service mysql-master: driver failed programming external connectivity on endpoint mysql-master (106dc684fed5622060341d85a78deeef40af24353956956f8d7c7800d34271a5): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
ERROR: Encountered errors while bringing up the project.
耐心看,根據提示說是3306端口已經被佔用了,原因是本機已經有一個mysql服務開機自啓動,我們將其停下即可。
再次嘗試部署
DONE!
雖然有些Warning,但是起來了。
試着通過 docker ps 來查看我們正在運行的容器:
sunhongbin@shb-vm:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
857d18a7f13f prom/prometheus:latest "/bin/prometheus --c…" 6 minutes ago Up 6 minutes 0.0.0.0:9090->9090/tcp prometheus
523b3850245f nacos/nacos-server:latest "bin/docker-startup.…" 6 minutes ago Up 6 minutes 0.0.0.0:8849->8848/tcp nacos2
7bd58ed125b1 nacos/nacos-server:latest "bin/docker-startup.…" 6 minutes ago Up 6 minutes 0.0.0.0:8850->8848/tcp nacos3
92da5e742486 nacos/nacos-server:latest "bin/docker-startup.…" 6 minutes ago Up 6 minutes 0.0.0.0:8848->8848/tcp, 0.0.0.0:9555->9555/tcp nacos1
7e49dc0a2966 nacos/nacos-mysql-slave:latest "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 33060/tcp, 0.0.0.0:3305->3306/tcp mysql-slave
99dabe61a84d grafana/grafana:latest "/run.sh" 9 minutes ago Up 9 minutes 0.0.0.0:3000->3000/tcp grafana
ac256974e991 nacos/nacos-mysql-master:latest "docker-entrypoint.s…" 9 minutes ago Up 6 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql-master
很棒,可以看到
一、監控系統Prometheus+Grafana已經起來了,分別在9090和3000端口,分別訪問並加以配置就可以進行炫酷的圖形界面監聽!
二、Nacos默認起了三個相同的容器實例,可以看到容器端口 8848 綁定主機的3個端口 8848/8849/8850。所以我們訪問任一個端口都可以。docker會將主機端口打到容器的實例上去,我們就可以用來實現應用的配置中心和服務註冊與發現功能。
http://127.0.0.1:8848/nacos/
http://127.0.0.1:8849/nacos/
http://127.0.0.1:8850/nacos/
我們還可以進入到容器中與其對話:
三、MySQL作爲數據持久化的工具在這裏是一主一從的默認配置,值得深挖,包括服務的一致性怎麼保證等等問題。
有時間還可以研究下master和slave的災備方式。
結語:在docker裏部署nacos集羣,是如此的方便和簡單,比Ubuntu和win下都簡單的多,容器技術的前景不可估量。
Ali中間件團隊將Nacos封裝的非常到位,是大神級的團隊了,用起來也很方便~