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 獲取安裝包
可以通過兩種方式獲取安裝包:
- 直接下載安裝包
- 從GitHub Release頁面下載預先打好的安裝包
- 如果對Apollo的程式碼沒有定製需求,建議使用這種方式,可以省去本地打包的過程
- 通過原始碼構建
- 從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的資料庫連線資訊
- 解壓apollo-configservice-x.x.x-github.zip
- 用程式設計師專用編輯器(如vim,notepad++,sublime等)開啟config目錄下的application-github.properties檔案
- 填寫正確的ApolloConfigDB資料庫連線串資訊,注意使用者名稱和密碼後面不要有空格!
- 修改完的效果如下:
# 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的資料庫連線資訊
- 解壓apollo-adminservice-x.x.x-github.zip
- 用程式設計師專用編輯器(如vim,notepad++,sublime等)開啟config目錄下的application-github.properties檔案
- 填寫正確的ApolloConfigDB資料庫連線串資訊,注意使用者名稱和密碼後面不要有空格!
- 修改完的效果如下:
# 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的資料庫連線資訊
- 解壓apollo-portal-x.x.x-github.zip
- 用程式設計師專用編輯器(如vim,notepad++,sublime等)開啟config目錄下的application-github.properties檔案
- 填寫正確的ApolloPortalDB資料庫連線串資訊,注意使用者名稱和密碼後面不要有空格!
- 修改完的效果如下:
# 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高):
- 通過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");
- 通過作業系統的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 admin