標籤:

快速搭建微服務--手把手教你服務註冊與發現

快速搭建微服務--手把手教你服務註冊與發現

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

  1. 從阿里雲安裝Docker: curl -sSL acs-public-mirror.oss-cn-hangzhou.aliyuncs.com | sh -
  2. 設置鏡像加速(在國內很多東西會被牆,建議使用鏡像加速)
    1. 首先要有自己的阿里雲賬戶(當然是免費的)
    2. 在阿里雲中找到鏡像倉庫-> Docker Hub 鏡像站點-> 您的專屬加速地址
    3. 執行加速器配置腳本, 別忘了把地址換成 "您的專屬加速地址"

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-EOF

{

"registry-mirrors": ["your-mirror-address"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

二、安裝 Etcd

  1. 下載 etcd 地址: github.com/coreos/etcd/
  2. 搭建 etcd 的容器,因為要搭建的是etcd 集群,所以要創建多個etcd容器,我們用3個。
    1. 寫 Dockerfile, 當然用官方的 Iamge 也可以。

FROM centos:7 COPY etcd /opt/etcd/etcd

RUN chmod +x /opt/etcd/etcd

EXPOSE 2379 2380 CMD ["/opt/etcd/etcd"]

    1. Build Image: Docker build -rm -t etcd_image ./
    2. 啟動容器,etcd啟動參數詳解

# 啟動容器1

dk run --name ec_1 -p 12379:2379 -p 12380:2380 -d etcd_image

--name ec_node_1

--listen-peer-urls 0.0.0.0:2380

--listen-client-urls 0.0.0.0:2379

--advertise-client-urls 192.168.196.88:12379

--initial-advertise-peer-urls 192.168.196.88:12380

--initial-cluster-token etcd-cluster-1

--initial-cluster ec_node_1=192.168.196.88:12380,ec_node_2=192.168.196.88:22380,ec_node_3=192.168.196.88:32380

--initial-cluster-state new

# 啟動容器2

dk run --name ec_2 -p 22379:2379 -p 22380:2380 -d etcd_image

--name ec_node_2

--listen-peer-urls 0.0.0.0:2380

--listen-client-urls 0.0.0.0:2379

--advertise-client-urls 192.168.196.88:22379

--initial-advertise-peer-urls 192.168.196.88:22380

--initial-cluster-token etcd-cluster-1

--initial-cluster ec_node_1=192.168.196.88:12380,ec_node_2=192.168.196.88:22380,ec_node_3=192.168.196.88:32380

--initial-cluster-state new

# 啟動容器3

dk run --name ec_3 -p 32379:2379 -p 32380:2380 -d etcd_image

--name ec_node_3

--listen-peer-urls 0.0.0.0:2380

--listen-client-urls 0.0.0.0:2379

--advertise-client-urls 192.168.196.88:32379

--initial-advertise-peer-urls 192.168.196.88:32380

--initial-cluster-token etcd-cluster-1

--initial-cluster ec_node_1=192.168.196.88:12380,ec_node_2=192.168.196.88:22380,ec_node_3=192.168.196.88:32380

--initial-cluster-state new

  1. 至此我們的 etcd集群搭建完成了。

三、安裝 Etcd-viewer

  1. 搭建 etcd-viewer 的容器,直接從官方拉鏡像:
    1. docker run -d -p 18080:8080 nikfoundas/etcd-viewer
    2. 訪問etcd-viewer: http://192.168.196.88:18080
  1. 在etcd-viewer 中添加registry,成功之後如下圖所示
    1. ec_1, http://192.168.196.88:12379
    2. ec_2, http://192.168.196.88:22379
    3. ec_3, http://192.168.196.88:32379

四、安裝 Registrator

  1. 獲取 Registrator鏡像: docker pull gliderlabs/registrator
  2. 啟動 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

  1. 啟動之後,就可以看見在當前宿主機啟動著的所有容器,通過etcd-viewer就可以看到。

  1. 至此 docker + etcd + etcd-viewer + registrator, 這個基於docker的服務註冊的環境搭建完成了。

五、測試Service Registrator環境

  1. 寫一個簡單的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))}

  1. 寫 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"]

  1. 創建並啟動容器,我們測試的時候啟動3個。
    1. docker run --name http_1 -d -P simple-http
    2. docker run --name http_2 -d -P simple-http
    3. docker run --name http_3 -d -P simple-http
  1. 創建完以後再查看容器是否都啟動成功,docker ps -a
  2. 驗證服務註冊成功到etcd中,查看 etcd-viewer: http://192.168.196.88:18080

  1. 可以看到我們的服務都已經自動的寫到了etcd集群中。再做兩個測試:
    1. 動態添加容器,etcd中可以看到新服務。
    2. 動態添加容器,etcd中可以看到服務減少。
    3. 停止某個etcd容器,etcd集群還可以正常發現服務。

服務註冊與發現環境搭建完成

推薦閱讀:

istio源碼解析系列(三)-Mixer工作流程淺析
《微服務設計》閱讀筆記(三)如何建模服務
istio源碼解析系列(一)-istio開發環境搭建
《微服務設計》閱讀筆記(六)部署
微服務架構實戰經驗系列【基本概念】

TAG:微服務架構 |