快速搭建微服務--手把手教你服務註冊與發現
Build MicroService Platform --- Service Register and Discovery
Docker + Etcd + Registrator + App
現在的微服務很火,網路上各種文章也特別多,準備寫一個快速搭建微服務的系列文章,讀本文之前最好有點微服務的基礎知識,這樣比較好理解,以Golang為開發語言(因為這個目前比較火哈)
今天下午有時間就寫第一部分,微服務的服務註冊與發現,下次準備寫Gate相關的分享。- 本文原創: 王星鴿,轉發請加入原創建鏈接
- 使用Centos7 的虛擬機, IP: 192.168.196.88
- 在安裝Docker 之前,還是先關閉防火牆吧,因為有很多的埠需要開
- 搭建環境的時候要了解基本的使用docker命令。
- 本文共分5部分
- 安裝 Docker
- 安裝 etcd
- 安裝 etcd-viewer
- 安裝 registrator
- 測試
一、安裝 Docker
- 從阿里雲安裝Docker: curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
- 設置鏡像加速(在國內很多東西會被牆,建議使用鏡像加速)
- 首先要有自己的阿里雲賬戶(當然是免費的)
- 在阿里雲中找到鏡像倉庫-> Docker Hub 鏡像站點-> 您的專屬加速地址
- 執行加速器配置腳本, 別忘了把地址換成 "您的專屬加速地址"
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-EOF{"registry-mirrors": ["your-mirror-address"]
}EOFsudo systemctl daemon-reloadsudo systemctl restart docker二、安裝 Etcd
- 下載 etcd 地址: https://github.com/coreos/etcd/releases
- 搭建 etcd 的容器,因為要搭建的是etcd 集群,所以要創建多個etcd容器,我們用3個。
- 寫 Dockerfile, 當然用官方的 Iamge 也可以。
FROM centos:7 COPY etcd /opt/etcd/etcd
RUN chmod +x /opt/etcd/etcd EXPOSE 2379 2380 CMD ["/opt/etcd/etcd"]- Build Image: Docker build -rm -t etcd_image ./
- 啟動容器,etcd啟動參數詳解
# 啟動容器1
dk run --name ec_1 -p 12379:2379 -p 12380:2380 -d etcd_image--name ec_node_1
--listen-peer-urls http://0.0.0.0:2380 --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://192.168.196.88:12379 --initial-advertise-peer-urls http://192.168.196.88:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster ec_node_1=http://192.168.196.88:12380,ec_node_2=http://192.168.196.88:22380,ec_node_3=http://192.168.196.88:32380 --initial-cluster-state new# 啟動容器2dk run --name ec_2 -p 22379:2379 -p 22380:2380 -d etcd_image--name ec_node_2
--listen-peer-urls http://0.0.0.0:2380 --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://192.168.196.88:22379 --initial-advertise-peer-urls http://192.168.196.88:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster ec_node_1=http://192.168.196.88:12380,ec_node_2=http://192.168.196.88:22380,ec_node_3=http://192.168.196.88:32380 --initial-cluster-state new# 啟動容器3dk run --name ec_3 -p 32379:2379 -p 32380:2380 -d etcd_image--name ec_node_3
--listen-peer-urls http://0.0.0.0:2380 --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://192.168.196.88:32379 --initial-advertise-peer-urls http://192.168.196.88:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster ec_node_1=http://192.168.196.88:12380,ec_node_2=http://192.168.196.88:22380,ec_node_3=http://192.168.196.88:32380 --initial-cluster-state new- 至此我們的 etcd集群搭建完成了。
三、安裝 Etcd-viewer
- 搭建 etcd-viewer 的容器,直接從官方拉鏡像:
- docker run -d -p 18080:8080 nikfoundas/etcd-viewer
- 訪問etcd-viewer: http://192.168.196.88:18080
- 在etcd-viewer 中添加registry,成功之後如下圖所示
- ec_1, http://192.168.196.88:12379
- ec_2, http://192.168.196.88:22379
- ec_3, http://192.168.196.88:32379
四、安裝 Registrator
- 獲取 Registrator鏡像: docker pull gliderlabs/registrator
- 啟動 Registrator容器,Registrator啟動參數詳解
docker run -d --name=registrator --net=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest etcd://192.168.196.88:12379
- 啟動之後,就可以看見在當前宿主機啟動著的所有容器,通過etcd-viewer就可以看到。
- 至此 docker + etcd + etcd-viewer + registrator, 這個基於docker的服務註冊的環境搭建完成了。
五、測試Service Registrator環境
- 寫一個簡單的Golang 的http服務,並編譯生成可執行文件
package mainimport ( "net/http" "github.com/julienschmidt/httprouter" "log")func High(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { w.Write([]byte("done"))}var ( router = httprouter.New())func main() { router.GET("/test", High) log.Fatal(http.ListenAndServe("0.0.0.0:80", router))}
- 寫 Dockerfile 來生成測試服務的鏡像,寫好就生成鏡像: docker build --rm -t simple-http ./
FROM alpine:latestRUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2COPY simpleService /opt/simpleServiceRUN chmod +x /opt/simpleServiceEXPOSE 80CMD ["/opt/simpleService"]
- 創建並啟動容器,我們測試的時候啟動3個。
- docker run --name http_1 -d -P simple-http
- docker run --name http_2 -d -P simple-http
- docker run --name http_3 -d -P simple-http
- 創建完以後再查看容器是否都啟動成功,docker ps -a
- 驗證服務註冊成功到etcd中,查看 etcd-viewer: http://192.168.196.88:18080
- 可以看到我們的服務都已經自動的寫到了etcd集群中。再做兩個測試:
- 動態添加容器,etcd中可以看到新服務。
- 動態添加容器,etcd中可以看到服務減少。
- 停止某個etcd容器,etcd集群還可以正常發現服務。
服務註冊與發現環境搭建完成
推薦閱讀:
※istio源碼解析系列(三)-Mixer工作流程淺析
※《微服務設計》閱讀筆記(三)如何建模服務
※istio源碼解析系列(一)-istio開發環境搭建
※《微服務設計》閱讀筆記(六)部署
※微服務架構實戰經驗系列【基本概念】
TAG:微服務架構 |