1. 程式人生 > 實用技巧 >RabbitMq的部署(docker)和操作(python)詳解

RabbitMq的部署(docker)和操作(python)詳解

Apollo

以下僅列出Apollo的搭建,更多詳情請查閱
Apollo環境搭建

準備工作

1.1 執行時環境

1.1.1 OS

服務端基於Spring Boot,啟動指令碼理論上支援所有Linux發行版,建議CentOS 7。

1.1.2 Java

  • Apollo服務端:1.8+
  • Apollo客戶端:1.7+

由於需要同時執行服務端和客戶端,所以建議安裝Java 1.8+。

對於Apollo客戶端,執行時環境只需要1.7+即可。
注:對於Apollo客戶端,如果有需要的話,可以做少量程式碼修改來降級到Java 1.6,詳細資訊可以參考Issue 483
在配置好後,可以通過如下命令檢查:

java -version

樣例輸出:

java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)

1.2 MySQL

  • 版本要求:5.6.5+

Apollo的表結構對timestamp使用了多個default宣告,所以需要5.6.5以上版本。

連線上MySQL後,可以通過如下命令檢查:

SHOW VARIABLES WHERE Variable_name = 'version';
Variable_name Value
version 5.7.11

注1:MySQL版本可以降級到5.5,詳見mysql 依賴降級討論。

注2:如果希望使用Oracle的話,可以參考vanpersl在Apollo 0.8.0基礎上開發的Oracle適配程式碼,Oracle版本為10.2.0.1.0。

注3:如果希望使用Postgres的話,可以參考oaksharks在Apollo 0.9.1基礎上開發的Pg適配程式碼,Postgres的版本為9.3.20,也可以參考xiao0yy在Apollo 0.10.2基礎上開發的Pg適配程式碼,Postgres的版本為9.5。

部署步驟

2.1 建立資料庫

Apollo服務端共需要兩個資料庫:ApolloPortalDB和ApolloConfigDB,我們把資料庫、表的建立和樣例資料都分別準備了sql檔案,只需要匯入資料庫即可。

需要注意的是ApolloPortalDB只需要在生產環境部署一個即可,而ApolloConfigDB需要在每個環境部署一套,如fat、uat和pro分別部署3套ApolloConfigDB。

注意:如果你本地已經建立過Apollo資料庫,請注意備份資料。我們準備的sql檔案會清空Apollo相關的表。

2.1.1 建立ApolloPortalDB

2.1.1.1 手動匯入SQL建立

通過各種MySQL客戶端匯入apolloportaldb.sql即可。

以MySQL原生客戶端為例:

source /your_local_path/scripts/sql/apolloportaldb.sql

2.1.2 建立ApolloConfigDB

2.1.2.1 手動匯入SQL

通過各種MySQL客戶端匯入apolloconfigdb.sql即可。

以MySQL原生客戶端為例:

source /your_local_path/scripts/sql/apolloconfigdb.sql

2.2 虛擬機器/物理機部署

2.2.1 獲取安裝包

可以通過兩種方式獲取安裝包:

  1. 直接下載安裝包
    • 從GitHub Release頁面下載預先打好的安裝包
    • 如果對Apollo的程式碼沒有定製需求,建議使用這種方式,可以省去本地打包的過程
  2. 通過原始碼構建
    • 從GitHub Release頁面下載Source code包或直接clone原始碼後在本地構建
    • 如果需要對Apollo的做定製開發,需要使用這種方式
2.2.1.1 直接下載安裝包
2.2.1.1.1 獲取apollo-configservice、apollo-adminservice、apollo-portal安裝包

從GitHub Release頁面下載最新版本的apollo-configservice-x.x.x-github.zip、apollo-adminservice-x.x.x-github.zip和apollo-portal-x.x.x-github.zip即可。

2.2.1.1.2 配置資料庫連線資訊

Apollo服務端需要知道如何連線到你前面建立的資料庫,資料庫連線串資訊位於上一步下載的壓縮包中的config/application-github.properties中。

2.2.1.1.2.1 配置apollo-configservice的資料庫連線資訊
  1. 解壓apollo-configservice-x.x.x-github.zip
  2. 用程式設計師專用編輯器(如vim,notepad++,sublime等)開啟config目錄下的application-github.properties檔案
  3. 填寫正確的ApolloConfigDB資料庫連線串資訊,注意使用者名稱和密碼後面不要有空格!
  4. 修改完的效果如下:
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8
spring.datasource.username = someuser
spring.datasource.password = somepwd

注:由於ApolloConfigDB在每個環境都有部署,所以對不同的環境config-service需要配置對應環境的資料庫引數

2.2.1.1.2.2 配置apollo-adminservice的資料庫連線資訊
  1. 解壓apollo-adminservice-x.x.x-github.zip
  2. 用程式設計師專用編輯器(如vim,notepad++,sublime等)開啟config目錄下的application-github.properties檔案
  3. 填寫正確的ApolloConfigDB資料庫連線串資訊,注意使用者名稱和密碼後面不要有空格!
  4. 修改完的效果如下:
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8
spring.datasource.username = someuser
spring.datasource.password = somepwd

注:由於ApolloConfigDB在每個環境都有部署,所以對不同的環境admin-service需要配置對應環境的資料庫引數

2.2.1.1.2.3 配置apollo-portal的資料庫連線資訊
  1. 解壓apollo-portal-x.x.x-github.zip
  2. 用程式設計師專用編輯器(如vim,notepad++,sublime等)開啟config目錄下的application-github.properties檔案
  3. 填寫正確的ApolloPortalDB資料庫連線串資訊,注意使用者名稱和密碼後面不要有空格!
  4. 修改完的效果如下:
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?useSSL=false&characterEncoding=utf8
spring.datasource.username = someuser
spring.datasource.password = somepwd
2.2.1.1.2.4 配置apollo-portal的meta service資訊

Apollo Portal需要在不同的環境訪問不同的meta service(apollo-configservice)地址,所以我們需要在配置中提供這些資訊。預設情況下,meta service和config service是部署在同一個JVM程序,所以meta service的地址就是config service的地址。

對於1.6.0及以上版本,可以通過ApolloPortalDB.ServerConfig中的配置項來配置Meta Service地址,詳見apollo.portal.meta.servers - 各環境Meta Service列表

使用程式設計師專用編輯器(如vim,notepad++,sublime等)開啟apollo-portal-x.x.x-github.zip中config目錄下的apollo-env.properties檔案。

假設DEV的apollo-configservice未繫結域名,地址是1.1.1.1:8080,FAT的apollo-configservice綁定了域名apollo.fat.xxx.com,UAT的apollo-configservice綁定了域名apollo.uat.xxx.com,PRO的apollo-configservice綁定了域名apollo.xxx.com,那麼可以如下修改各環境meta service服務地址,格式為${env}.meta=http://${config-service-url:port},如果某個環境不需要,也可以直接刪除對應的配置項(如lpt.meta):

dev.meta=http://192.168.64.101:8080
fat.meta=http://192.168.64.101:8180
uat.meta=http://192.168.64.101:8380
pro.meta=http://192.168.64.101:8480

除了通過apollo-env.properties方式配置meta service以外,apollo也支援在執行時指定meta service(優先順序比apollo-env.properties高):

  1. 通過Java System Property ${env}_meta
    • 可以通過Java的System Property ${env}_meta來指定
    • 如java -Ddev_meta=http://config-service-url -jar xxx.jar
    • 也可以通過程式指定,如System.setProperty("dev_meta", "http://config-service-url");
  2. 通過作業系統的System Environment${ENV}_META
    • 如DEV_META=http://config-service-url
    • 注意key為全大寫,且中間是_分隔

注1: 為了實現meta service的高可用,推薦通過SLB(Software Load Balancer)做動態負載均衡

注2: meta service地址也可以填入IP,0.11.0版本之前只支援填入一個IP。從0.11.0版本開始支援填入以逗號分隔的多個地址(PR #1214),如http://1.1.1.1:8080,http://2.2.2.2:8080,不過生產環境還是建議使用域名(走slb),因為機器擴容、縮容等都可能導致IP列表的變化。

2.2.2 部署Apollo服務端

2.2.2.1 部署apollo-configservice

將對應環境的apollo-configservice-x.x.x-github.zip上傳到伺服器上,解壓後執行scripts/startup.sh即可。如需停止服務,執行scripts/shutdown.sh.

記得在scripts/startup.sh中按照實際的環境設定一個JVM記憶體,以下是我們的預設設定,供參考:

export JAVA_OPTS="-server -Xms6144m -Xmx6144m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=4096m -XX:MaxNewSize=4096m -XX:SurvivorRatio=18"

注1:如果需要修改JVM引數,可以修改scripts/startup.sh的JAVA_OPTS部分。

注2:如要調整服務的日誌輸出路徑,可以修改scripts/startup.sh和apollo-configservice.conf中的LOG_DIR。

注3:如要調整服務的監聽埠,可以修改scripts/startup.sh中的SERVER_PORT。另外apollo-configservice同時承擔meta server職責,如果要修改埠,注意要同時ApolloConfigDB.ServerConfig表中的eureka.service.url配置項以及apollo-portal和apollo-client中的使用到的meta server資訊,詳見:2.2.1.1.2.4 配置apollo-portal的meta service資訊和1.2.2 Apollo Meta Server。

注4:如果ApolloConfigDB.ServerConfig的eureka.service.url只配了當前正在啟動的機器的話,在啟動apollo-configservice的過程中會在日誌中輸出eureka註冊失敗的資訊,如com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused。需要注意的是,這個是預期的情況,因為apollo-configservice需要向Meta Server(它自己)註冊服務,但是因為在啟動過程中,自己還沒起來,所以會報這個錯。後面會進行重試的動作,所以等自己服務起來後就會註冊正常了。

注5:如果你看到了這裡,相信你一定是一個細心閱讀文件的人,而且離成功就差一點點了,繼續加油,應該很快就能完成Apollo的分散式部署了!不過你是否有感覺Apollo的分散式部署步驟有點繁瑣?是否有啥建議想要和作者說?如果答案是肯定的話,請移步 #1424,期待你的建議!

2.2.2.2 部署apollo-adminservice

將對應環境的apollo-adminservice-x.x.x-github.zip上傳到伺服器上,解壓後執行scripts/startup.sh即可。如需停止服務,執行scripts/shutdown.sh.

記得在scripts/startup.sh中按照實際的環境設定一個JVM記憶體,以下是我們的預設設定,供參考:

export JAVA_OPTS="-server -Xms2560m -Xmx2560m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=1024m -XX:MaxNewSize=1024m -XX:SurvivorRatio=22"

注1:如果需要修改JVM引數,可以修改scripts/startup.sh的JAVA_OPTS部分。

注2:如要調整服務的日誌輸出路徑,可以修改scripts/startup.sh和apollo-adminservice.conf中的LOG_DIR。

注3:如要調整服務的監聽埠,可以修改scripts/startup.sh中的SERVER_PORT。

2.2.2.3 部署apollo-portal

將apollo-portal-x.x.x-github.zip上傳到伺服器上,解壓後執行scripts/startup.sh即可。如需停止服務,執行scripts/shutdown.sh.

記得在startup.sh中按照實際的環境設定一個JVM記憶體,以下是我們的預設設定,供參考:

export JAVA_OPTS="-server -Xms4096m -Xmx4096m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=384m -XX:NewSize=1536m -XX:MaxNewSize=1536m -XX:SurvivorRatio=22"

注1:如果需要修改JVM引數,可以修改scripts/startup.sh的JAVA_OPTS部分。

注2:如要調整服務的日誌輸出路徑,可以修改scripts/startup.sh和apollo-portal.conf中的LOG_DIR。

注3:如要調整服務的監聽埠,可以修改scripts/startup.sh中的SERVER_PORT。

Apollo相關介紹

效果圖:預設賬號apollo admin