網(wǎng)站建設(shè)的前景長沙優(yōu)化網(wǎng)站廠家
關(guān)于 Consul 服務(wù)
- Consul是Go語言寫的開源的服務(wù)發(fā)現(xiàn)軟件
- Consul具有服務(wù)發(fā)現(xiàn)、健康檢查、 服務(wù)治理、微服務(wù)熔斷處理等功能
Consul 部署方式1: 直接在linux 上面部署 consul 集群
1 )下載
- 在各個服務(wù)器上 下載 consul 后解壓并將其目錄配置到環(huán)境變量中,方便調(diào)用 consul 命令
2 )部署: server端與搭建集群
- 準(zhǔn)備3臺服務(wù)器
服務(wù)器 啟動
- server_1
- $
consul agent -server -bootstrap-expect 3 -node=server_1 -bind=192.168.1.10 -ui -data-dir=/root/consul_dir/data -client 0.0.0.0
-server
表示啟動的是服務(wù)端-bootstrap-expect 3
表示待啟動的服務(wù)數(shù)量-node
指定節(jié)點的名稱-bind
指定綁定的當(dāng)前的ip地址-ui
表示可以在web中訪問-data-dir
指定的存儲目錄-client 0.0.0.0
表示所有客戶端都可加入
- $
- server_2
- $
consul agent -server -bootstrap-expect 3 -node=server_2 -bind=192.168.1.11 -ui -data-dir=/root/consul_dir/data -client 0.0.0.0
- 可以繼續(xù)在后面追加 -join 參數(shù)來追加到集群
- 目前不這么做,參考下面拆解
- $
- server_3
- $
consul agent -server -bootstrap-expect 3 -node=server_3 -bind=192.168.1.12 -ui -data-dir=/root/consul_dir/data -client 0.0.0.0
- $
服務(wù)器 加入
-
server_2
- $
consul join 192.168.1.10
- $
-
server_3
- $
consul join 192.168.1.10
- $
基于以上server端對應(yīng)的集群搭建好了
3 )部署: client端與加入搭建集群
- 準(zhǔn)備1臺客戶端
客戶端 啟動
- client_1
- $
consul agent -data-dir=/root/consul_dir/data -node=client_1 -bind=192.168.1.13 -ui -client 0.0.0.0
- $
客戶端 加入
- client-01:
- $
consul join 192.168.1.10
- $
Consul 部署方式2: Docker 上面部署 consul 集群
和 Linux 里面的部署流程,基本一致
1 )文檔
- https://hub.docker.com/_/consul
2 )下載鏡像
- $
docker pull consul
3 )部署
-
3.1 啟動創(chuàng)建第一個節(jié)點 consul1容器
- $
docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul agent -server -bootstrap-expect=3 -ui -bind=0.0.0.0 -client=0.0.0.0
- 這個指定了端口,比較麻煩
- 或
- $
docker run --name consul1 -d -p 8500:8500 consul agent -server -bootstrap-expect=3 -ui -bind=0.0.0.0 -client=0.0.0.0
- 這個比較推薦
- $
-
3.2 啟動第二個容器前需要找到 consul1容器的ip地址
- 方法1
- $
docker network ls
找到網(wǎng)絡(luò)列表 - $
docker inspect NETWORKID
一般是 bridge 的網(wǎng)絡(luò)
- $
- 方法2
- $
docker inspect --format='{{.NetworkSettings.IPAddress}}' consul1
- 推薦
- $
- 假設(shè)找到的 ip 是: 192.168.1.10
- 方法1
-
3.3 啟動第二個節(jié)點(端口8501), 加入到 consul1
- $
docker run --name consul2 -d -p 8501:8500 consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 192.168.1.10
- $
-
3.4 啟動第三個節(jié)點(端口8502), 加入到 consul1
- $
docker run --name consul2 -d -p 8502:8500 consul agent -server -ui -bootstrap-expect=3 -bind=0.0.0.0 -client=0.0.0.0 -join 192.168.1.10
- $
-
3.5 啟動一個consul客戶端(端口8503), 加入到 consul1
- $
docker run --name consul_client1 -d -p 8503:8500 consul agent -ui -bind=0.0.0.0 -client=0.0.0.0 -join 192.168.1.10
- 客戶端可以不指定端口
- $
4 )驗證
- 目前3個服務(wù)端和1個服務(wù)器端都做好了,驗證一下
- $
docker ps
- $
- 進入一個consul中查看
- $
docker exec -it consul1 consul members
- 可查看到集群的信息
- $
- 訪問
- xxx.xxx.xxx.xxx:xxxx
- 上面任意一臺機器ip和端口都可訪問
- xxx.xxx.xxx.xxx:xxxx
- 如果里面用到了微服務(wù),并發(fā)量不大的情況下,可以把多個consul服務(wù)端放在一臺機器上
- 如果并發(fā)量比較大,就需要把consul部署在多臺服務(wù)器上
- 部署到一臺服務(wù)器的好處是,容器之間通信比較方便,默認(rèn)是通過 bridge 網(wǎng)絡(luò)橋接
在多臺服務(wù)器搭建consul集群
1 )直接在 linux 服務(wù)器上運行 consul
- 同上方式,不再復(fù)述
2 )仍舊選擇 docker 平臺
- 注意,在
-join
時,涉及到不同主機的通信,需要借助物理的ip - 可以把docker容器直接映射在當(dāng)前物理機上,使用
--net=host
參數(shù),例如docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.10 --name consul1 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.10 -client=0.0.0.0
docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.11 --name consul2 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.11 -client=0.0.0.0 -join 192.168.1.10
docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.12 --name consul3 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.12 -client=0.0.0.0 -join 192.168.1.10
- 如果要后臺運行
nohup + 上面命令 + &
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.10 --name consul1 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.10 -client=0.0.0.0 &
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.11 --name consul2 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.11 -client=0.0.0.0 -join 192.168.1.10 &
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.12 --name consul3 -v /consul_server/data:/consul/data consul agent -server -bootstrap-expect=3 -ui -bind=192.168.1.12 -client=0.0.0.0 -join 192.168.1.10 &
nohup docker run --net=host -e CONSUL_BIND_INTERFACE=ens33 -h=192.168.1.13 --name consul4 consul agent -bind=192.168.1.13 -client=0.0.0.0 -join 192.168.1.10 &
- 相當(dāng)于在物理機上運行consul, 注意上述ip可替換成hostname, 需要配置hostname, 因為ip可能會變化
- 以上consul集群部署好之后,就可以準(zhǔn)備微服務(wù)集群和API網(wǎng)管集群了
Consule集群結(jié)合Swarm集群部署微服務(wù)項目
關(guān)于整體架構(gòu)分層
-
A. 各個客戶端 訪問nginx
-
B. nginx 服務(wù)器,用于總體轉(zhuǎn)發(fā)服務(wù)
-
C. API服務(wù)網(wǎng)關(guān)集群
- API服務(wù)網(wǎng)關(guān)可以配置到微服務(wù)集群中,這樣就可以減少通信相關(guān)配置,具體看當(dāng)時網(wǎng)絡(luò)環(huán)境
- 需要注冊到 consul
-
D. 微服務(wù)集群: 各類應(yīng)用程序微服務(wù)
- 每個微服務(wù)需要注冊到consul
-
E. consul服務(wù)注冊集群
- 用于服務(wù)發(fā)現(xiàn)管理
-
F. 數(shù)據(jù)庫集群
- 目前數(shù)據(jù)庫沒有做集群處理
-
以下步驟是大體步驟,比較粗略,忽略一些細(xì)節(jié)贅述,僅供參考
1 )將各個微服務(wù)項目打包,比如goWeb應(yīng)用, 這個步驟是前置任務(wù)
- 檢查各個服務(wù)提供連接的配置信息,檢查部署環(huán)境對應(yīng)的配置信息是否正確
- 如果微服務(wù)鏡像中配置了支持打包, 比如 Dockerfile中, 則忽略此步驟
- 如果在windows下開發(fā),需要打包成linux程序
- filename : 文件名
set CGO_ENABLED=0 set GOOS=linux set GOARCH=amd64 go build -o filename main.go
- filename : 文件名
- 將文件上傳,如果不是docker部署,需要將服務(wù)器的目錄設(shè)置為可執(zhí)行
- $
chmod -R 777 目錄
- $
- 執(zhí)行項目 $
nohup ./filename &
- 驗證可正常運行
2 )準(zhǔn)備mysql以及redis數(shù)據(jù)庫等環(huán)境
- 啟動 mysql
- $
docker run --name ityingMysql -p 3306:3306 -v /root/mysql/conf.d:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
- $
- 啟動 redis
- $
docker run -p 6379:6379 --name redis -v /docker/redis/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data --restart=always -d redis redis-server /etc/redis/redis.conf
- $
3 )整理微服務(wù)應(yīng)用
3.1 microA程序的 A微服務(wù)
配置dockerfile,簡單示例僅供參考 micro_a_Dockerfile
FROM centos
ADD /wwwroot/micro_a.tar.gz /root
WORKDIR /root
RUN chmod -R 777 micro_a
WORKDIR /root/micro_a
ENTRYPOINT ["./micro_a"]
3.2 microB程序 B微服務(wù)
配置dockerfile,簡單示例僅供參考 micro_b_Dockerfile
FROM centos
ADD /wwwroot/micro_b.tar.gz /root
WORKDIR /root
RUN chmod -R 777 micro_b
WORKDIR /root/micro_b
ENTRYPOINT ["./micro_b"]
3.3 microC程序 C微服務(wù)
配置dockerfile,簡單示例僅供參考 micro_c_Dockerfile
FROM centos
ADD /wwwroot/micro_c.tar.gz /root
WORKDIR /root
RUN chmod -R 777 micro_c
WORKDIR /root/micro_c
ENTRYPOINT ["./micro_c"]
4 )對微服務(wù)進行 鏡像build
- $
docker build -f micro_a_Dockerfile -t micro_a_img:latest .
- $
docker build -f micro_b_Dockerfile -t micro_b_img:latest .
- $
docker build -f micro_c_Dockerfile -t micro_c_img:latest .
5 )配置微服務(wù) docker-compose.yml
version: "3"
services:# 配置 redis 數(shù)據(jù)庫redis:image: redisrestart: alwaysdeploy:replicas: 1 #副本數(shù)量# 配置 a 微服務(wù)micro_a:image: micro_a_imgrestart: alwaysdeploy:replicas: 6 # 副本數(shù)量resources: # 資源limits: #配置cpucpus: "0.3" # 設(shè)置該容器最多只能使用 30% 的 CPUmemory: 500M # 設(shè)置該容器最多只能使用 500M內(nèi)存restart_policy: #定義容器重啟策略, 用于代替 restart 參數(shù)condition: on-failure #只有當(dāng)容器內(nèi)部應(yīng)用程序出現(xiàn)問題才會重啟# 配置 b 微服務(wù)micro_b:image: micro_b_imgrestart: alwaysdeploy:replicas: 6 #副本數(shù)量resources: #資源limits: #配置cpucpus: "0.3" # 設(shè)置該容器最多只能使用 30% 的 CPUmemory: 500M # 設(shè)置該容器最多只能使用 500M內(nèi)存restart_policy: #定義容器重啟策略, 用于代替 restart 參數(shù)condition: on-failure #只有當(dāng)容器內(nèi)部應(yīng)用程序出現(xiàn)問題才會重啟depends_on:- captcha_micro# 配置 c 微服務(wù)micro_c:image: micro_c_imgrestart: alwaysports:- 8080:8080deploy:replicas: 6 #副本數(shù)量resources: #資源limits: #配置cpucpus: "0.3" # 設(shè)置該容器最多只能使用 30% 的 CPUmemory: 500M # 設(shè)置該容器最多只能使用 500M內(nèi)存restart_policy: #定義容器重啟策略, 用于代替 restart 參數(shù)condition: on-failure #只有當(dāng)容器內(nèi)部應(yīng)用程序出現(xiàn)問題才會重啟depends_on:- micro_b # 依賴b微服務(wù)
- 注: 上面用到了redis數(shù)據(jù)庫, 但不是集群,當(dāng)前只是一個簡單的服務(wù)
6 )創(chuàng)建集群
- 關(guān)鍵命令如下
- $
docker swarm init --advertise-addr 192.168.1.10
- $
docker swarm join-token worker
- $
docker swarm join-token manager
- $
- 具體配置不再贅述,參考前文描述
7 )部署項目
- $
docker stack deploy --compose-file docker-compose.yml microSwarm
- microSwarm 是你給這套微服務(wù)集群起的響亮亮的名字
- 進行各個服務(wù)的啟動后的驗證,不再贅述
8 )調(diào)用測試
- 客戶端連接 consul 服務(wù)器實現(xiàn)調(diào)試, 不再贅述
9 )注意事項
- 如果是前后端分離的項目
- 先集成運維環(huán)境,并測試, 這里一般包含集群
- 再部署后端服務(wù),并測試服務(wù)的連通性
- 再部署前端服務(wù),并測試接口服務(wù)的正常
- 如果,微服務(wù)環(huán)境運維環(huán)境復(fù)雜
- 還要檢查微服務(wù)的版本迭代是否正常,否則上線可能會遇到問題