假設(shè)三臺主機的ip分別為:
主機一:10.21.14.164
主機二:10.21.14.165
主機三:10.21.14.166
三臺主機的安裝步驟相似,以主機一為例:
1. 安裝docker服務(wù):
2. 啟動docker服務(wù):?
3. 查找consul鏡像:
docker search consul
4. 下載官方consul鏡像:
docker pull consul
5. 下載完后可檢查鏡像:
docker images
6. 三臺主機上建立數(shù)據(jù)目錄和配置目錄,目錄為空即可:
mkdir -p /app/consul/data
mkdir -p /app/consul/conf
7. 三臺主機依次啟動容器:
主機一的命令為:
docker run --net=host --name consul -v /app/consul/data:/consul/data -v /app/consul/conf:/consul/config -d docker.io/consul consul agent -server -bind=10.21.14.164 -client 0.0.0.0 -ui -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config
主機二的命令為:
docker run --net=host --name consul -v /app/consul/data:/consul/data -v /app/consul/conf:/consul/config -d docker.io/consul consul agent -server -bind=10.21.14.165 -client 0.0.0.0 -ui -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -join 10.21.14.164
主機三的命令為:
docker run --net=host --name consul -v /app/consul/data:/consul/data -v /app/consul/conf:/consul/config -d docker.io/consul consul agent -server -bind=10.21.14.166 -client 0.0.0.0 -ui -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -join 10.21.14.164
命令說明:
--net=host:采用主機網(wǎng)絡(luò)配置,若采用默認(rèn)的bridge模式,則會存在容器跨主機間通信失敗的問題
-v /data/consul_data/data:/consul/data:主機的數(shù)據(jù)目錄掛載到容器的/consul/data下,因為該容器默認(rèn)的數(shù)據(jù)寫入位置即是/consul/data
-v /data/consul_data/conf:/consul/config:主機的配置目錄掛載到容器的/consul/conf下,因為該容器默認(rèn)的數(shù)據(jù)寫入位置即是/consul/conf
consul agent -server:consul的server啟動模式
consul agent?-bind=192.168.0.3:consul綁定到主機的ip上
consul agent? -bootstrap-expect=3:server要想啟動,需要至少3個server
consul agent?-data-dir /consul/data:consul的數(shù)據(jù)目錄
consul agent?-config-dir /consul/config:consul的配置目錄
consul agent?-join 192.168.0.1:對于主機二、三來說,需要加入到這個集群里
-client 0.0.0.0 -ui : 啟動ui界面
都啟動完成后,可以通過如下命令觀察consul日志,了解啟動情況:
docker logs 容器id/容器名稱
8. 檢查集群狀態(tài):
docker exec -it 容器id /bin/sh
通過該命令進入容器,查看集群信息:
[release@sh-lbs02 data]$ docker exec -it consul /bin/sh/?
# consul members
至此,集群已啟動完成,consul的端口打開較多,可以在主機上觀察其端口情況:
[release@sh-web02 ~]$netstat -tlnp|grep consul
[sudo] passwordfor release:
tcp? ? ? ? 00192.168.0.1:83000.0.0.0:*? ? ? ? ? ? ? LISTEN330/consul? ? ? ? ?
tcp? ? ? ? 00192.168.0.1:83010.0.0.0:*? ? ? ? ? ? ? LISTEN330/consul? ? ? ? ?
tcp? ? ? ? 00192.168.0.1:83020.0.0.0:*? ? ? ? ? ? ? LISTEN330/consul? ? ? ? ?
tcp? ? ? ? 00127.0.0.1:85000.0.0.0:*? ? ? ? ? ? ? LISTEN330/consul? ? ? ? ?
tcp? ? ? ? 00127.0.0.1:86000.0.0.0:*? ? ? ? ? ? ? LISTEN330/consul
9. 如何啟動consul客戶端?假設(shè)consul客戶端與服務(wù)端在同一個主機上:
首先,建立客戶端的配置目錄和數(shù)據(jù)目錄:
mkdir-p /app/consul_cli/data
mkdir-p /app/consul_cli/conf
其次,在配置目錄下分配客戶端使用的端口,避免與服務(wù)端的端口沖突:
cd /app/consul_cli/conf
touch basic.json
vi basic.json
#內(nèi)容如下:
{
? ? ? ? "ports": {
? ? ? ? ? ? ? ? "http":18501,
? ? ? ? ? ? ? ? "dns":18601,
? ? ? ? ? ? ? ? "rpc":18401,
? ? ? ? ? ? ? ? "serf_lan":18301,
? ? ? ? ? ? ? ? "serf_wan":18302,
? ? ? ? ? ? ? ? "server":18300? ? ? ? }
}
最后,啟動客戶端:
docker run? --net=host --name consul-cli -v /app/consul_cli/data:/consul/data -v /app/consul_cli/conf:/consul/config -d docker.io/consul consul agent -bind=10.21.14.166 -data-dir/consul/data -config-dir/consul/config -join10.21.14.164