Linkis生产部署服务器配置参考指南
1.介紹
? Linkis已經在微眾銀行大數據生產平臺穩定運行兩年有余,開發運維人員總結出了一套Linkis生產部署的指南,以讓Linkis在穩定運行的基礎上發揮出它最大的性能,同時也能夠節約服務器資源,降低使用成本。指南包括部署方式的選擇和參數配置兩大類,最后Linkis在測試環境中也久經壓測考驗,我們會將我們壓測的實踐和經驗在第四章中給出。
2.部署方案選擇
? Linkis的單機部署方式簡單,但是不能用于生產環境,因為過多的進程在同一個服務器上會讓服務器壓力過大。
? 部署方案的選擇,和公司的用戶規模、用戶使用習慣、集群同時使用人數都有關,一般來說,我們會以使用Linkis的同時使用人數和用戶對執行引擎的偏好來做依據進行部署方式的選擇。
? 下面以同時使用人數進行分段來進行詳細闡述,假設用戶偏好spark最多,hive其次,推薦服務器主機內存64G或以上。
? 在安裝EngineManager的機器上,由于會啟動用戶的引擎進程,機器的內存負載會比較高,其他類型的微服務對機器的負載則相對不會很高。
? 我們一般建議在安裝EM的服務器上預留20G左右給Linux系統、EM自身進程以及其他進程進行使用,例如128G內存的服務器,除去20G內存之后,還有100G內存可以用于啟動引擎進程。舉個例子,如果一個Spark的Driver是4G內存,那么該服務器就可以最多啟動25個spark引擎。
總使用資源計算公式: Linkis使用總資源 = 總內存 + 總核數 =
同時在線人數 * (Driver 或 Hive client內存) + 同時在線人數 * (Driver或Hive client 核數)
例如,同時使用人數50人,Spark的Driver內存2G,Hive Client內存2G,每個引擎都使用兩個核,那么就是 50 * 2G + 50 * 2核 = 100G 內存 + 100 CPU核數
參數配置前的約定(必看):
1.參數一般是在微服務安裝目錄中的conf目錄的linkis.properties進行配置,采用key=value 的形式進行配置,如 wds.linkis.enginemanager.cores.max=20。唯一例外的是engine微服務的配置需要在linkis-engine.properties進行配置。
2.參數配置之后,需要重啟微服務才能生效。engine的參數配置之后,在頁面的引擎管理器進行kill之后,再次啟動引擎就可以生效
下面提供一份參考部署方案。
2.1 同時使用人數10-50
1).服務器配置最優推薦:4臺服務器,分別命名為S1,S2,S3,S4
| SparkEngineManger | S1 | SparkEM需要獨占一臺服務器,因為假定用戶最偏好spark(如果是偏好hive,可以進行修改) |
| SparkEntrance | S2 | |
| HiveEngineManager | S3 | |
| HiveEntrance | S2 | |
| PythonEngineManager | S3 | |
| PythonEntrance | S2 | |
| 其他(Eureka,gateway等) | S4 | 如果這臺機器壓力過大,可以再加一臺服務器,將服務進行分開部署 |
2). 服務器配置最低配置:2臺服務器
3). 參數配置
如果需要進行,需要在微服務安裝目錄下的conf目錄中的linkis.properties和linkis-engine.properties中進行配置。參數配置一般分為Entrance和EngineManager兩種參數類型。
a)Entrance微服務
| wds.linkis.rpc.receiver.asyn.queue.size.max | 指定entrance微服務接收到的RPC消息的隊列大小 | 2000 |
| wds.linkis.rpc.receiver.asyn.consumer.thread.max | 指定Entrance微服務RPC消費線程池大小 | 100 |
b)EngineManager微服務
注:其中Linkis定義了保護資源的概念,保護資源的目的在于預留出一定的資源,EM不會將最大資源用盡,啟動保護機器的作用。
| wds.linkis.enginemanager.memory.max | 用于指定該EM進程啟動的所有引擎的總內存 | 40G(64)或100G(128) |
| wds.linkis.enginemanager.cores.max | 用于指定該EM進程啟動的所有引擎的總核數 | 20 |
| wds.linkis.enginemanager.engine.instances.max | 用于指定該EM進程啟動的所有引擎的總個數 | 20 |
| wds.linkis.enginemanager.protected.memory | 用于指定該EM進程用于保護的內存 | 2G(意味著最多可以使用38(40-2)G內存) |
| wds.linkis.enginemanager.protected.cores.max | 用于指定該EM進程用于保護的核數 | 2(意味著最多可以使用18(20-2)核數) |
| wds.linkis.enginemanager.protected.engine.instances | 用于指定該EM進程用于保護的引擎個數 | 1(意味著最多可以啟動19(20-1)個引擎) |
2.2 同時使用人數 50-100
1).服務器配置推薦:7臺服務器,分別命名為S1,S2…S7
| SparkEngineManger | S1,S2 | |
| SparkEntrance | S5 | |
| HiveEngineManager | S3,S4 | |
| HiveEntrance | S5 | |
| PythonEngineManager | S4 | |
| PythonEntrance | S4 | |
| Eureka,Gateway,RM | S6 | Eureka和RM需要高可用部署 |
| PublicService,RM,Datasource,Eureka | S7 | Eureka和RM需要高可用部署 |
2). 服務器配置最低配置:4臺服務器
3). 參數配置
a)Entrance微服務
| wds.linkis.rpc.receiver.asyn.queue.size.max | 指定entrance微服務接收到的RPC消息的隊列大小 | 3000 |
| wds.linkis.rpc.receiver.asyn.consumer.thread.max | 指定Entrance微服務RPC消費線程池大小 | 120 |
b)EngineManager微服務
| wds.linkis.enginemanager.memory.max | 用于指定該EM進程啟動的所有引擎的總內存 | 40G(64)或100G(128) |
| wds.linkis.enginemanager.cores.max | 用于指定該EM進程啟動的所有引擎的總核數 | 20 |
| wds.linkis.enginemanager.engine.instances.max | 用于指定該EM進程啟動的所有引擎的總個數 | 20 |
| wds.linkis.enginemanager.protected.memory | 用于指定該EM進程用于保護的內存 | 2G(意味著最多可以使用38(40-2)G內存) |
| wds.linkis.enginemanager.protected.cores.max | 用于指定該EM進程用于保護的核數 | 2(意味著最多可以使用18(20-2)核數) |
| wds.linkis.enginemanager.protected.engine.instances | 用于指定該EM進程用于保護的引擎個數 | 1(意味著最多可以啟動19(20-1)個引擎) |
2.3 同時使用人數 100-300
1).服務器配置推薦:11臺服務器,分別命名為S1,S2…S11
| SparkEngineManger | S1,S2,S3,S4 | |
| SparkEntrance | S8 | |
| HiveEngineManager | S5,S6,S7 | |
| HiveEntrance | S8 | |
| PythonEngineManager | S9 | |
| PythonEntrance | S9 | |
| Eureka,Gateway,RM | S10 | Eureka和RM需要高可用部署 |
| PublicService,RM,Datasource,Eureka | s11 | Eureka和RM需要高可用部署 |
2). 服務器配置最低配置:6臺服務器
3). 參數配置
a)Entrance微服務
| wds.linkis.rpc.receiver.asyn.queue.size.max | 指定entrance微服務接收到的RPC消息的隊列大小 | 4000 |
| wds.linkis.rpc.receiver.asyn.consumer.thread.max | 指定Entrance微服務RPC消費線程池大小 | 150 |
b)EngineManager微服務
| wds.linkis.enginemanager.memory.max | 用于指定該EM進程啟動的所有引擎的總內存 | 40G(64)或100G(128) |
| wds.linkis.enginemanager.cores.max | 用于指定該EM進程啟動的所有引擎的總核數 | 20 |
| wds.linkis.enginemanager.engine.instances.max | 用于指定該EM進程啟動的所有引擎的總個數 | 20 |
| wds.linkis.enginemanager.protected.memory | 用于指定該EM進程用于保護的內存 | 2G(意味著最多可以使用38(40-2)G內存) |
| wds.linkis.enginemanager.protected.cores.max | 用于指定該EM進程用于保護的核數 | 2(意味著最多可以使用18(20-2)核數) |
| wds.linkis.enginemanager.protected.engine.instances | 用于指定該EM進程用于保護的引擎個數 | 1(意味著最多可以啟動19(20-1)個引擎) |
2.4 同時使用人數 300-500
1).服務器配置推薦15臺服務器,分別命名為S1,S2,S3,S4
| SparkEngineManger | S1,S2,S3,S4,S5,S6,S7 | |
| SparkEntrance | S12 | |
| HiveEngineManager | S8,S9,S10,S11 | |
| HiveEntrance | S12 | |
| PythonEngineManager | S13 | |
| PythonEntrance | S13 | |
| Eureka,Gateway,RM | S14 | Eureka和RM需要高可用部署 |
| PublicService,RM,Datasource,Eureka | s15 | Eureka和RM需要高可用部署 |
2). 服務器配置最低配置:10臺服務器
3). 參數配置
a)Entrance微服務
| wds.linkis.rpc.receiver.asyn.queue.size.max | 指定entrance微服務接收到的RPC消息的隊列大小 | 5000 |
| wds.linkis.rpc.receiver.asyn.consumer.thread.max | 指定Entrance微服務RPC消費線程池大小 | 150 |
b)EngineManager微服務
| wds.linkis.enginemanager.memory.max | 用于指定該EM進程啟動的所有引擎的總內存 | 40G(64)或100G(128) |
| wds.linkis.enginemanager.cores.max | 用于指定該EM進程啟動的所有引擎的總核數 | 20 |
| wds.linkis.enginemanager.engine.instances.max | 用于指定該EM進程啟動的所有引擎的總個數 | 20 |
| wds.linkis.enginemanager.protected.memory | 用于指定該EM進程用于保護的內存 | 2G(意味著最多可以使用38(40-2)G內存) |
| wds.linkis.enginemanager.protected.cores.max | 用于指定該EM進程用于保護的核數 | 2(意味著最多可以使用18(20-2)核數) |
| wds.linkis.enginemanager.protected.engine.instances | 用于指定該EM進程用于保護的引擎個數 | 1(意味著最多可以啟動19(20-1)個引擎) |
2.5 同時使用人數 500以上
1).服務器配置推薦:25臺服務器,命名為S1,S2…S19,S25
| SparkEngineManger | S1,S2,S3,S4,S5,S6,S7 | |
| S8,S9,S10 | ||
| SparkEntrance | S17 | |
| HiveEngineManager | S11,S12,S13,S14,S15, | |
| S16 | ||
| HiveEntrance | S17 | |
| PythonEngineManager | S18,S19 | |
| PythonEntrance | S20 | |
| Eureka, RM | S21 | Eureka和RM需要高可用部署 |
| RM, ,Eureka | S22 | Eureka和RM需要高可用部署 |
| Eureka,PublicService | S23 | Eureka和RM需要高可用部署 |
| Gateway, Datasource | S24 |
2). 服務器最低配置:15臺服務器
3). 參數配置
a)Entrance微服務
| wds.linkis.rpc.receiver.asyn.queue.size.max | 指定entrance微服務接收到的RPC消息的隊列大小 | 5000 |
| wds.linkis.rpc.receiver.asyn.consumer.thread.max | 指定Entrance微服務RPC消費線程池大小 | 200 |
b)EngineManager微服務
| wds.linkis.enginemanager.memory.max | 用于指定該EM進程啟動的所有引擎的總內存 | 40G(64)或100G(128) |
| wds.linkis.enginemanager.cores.max | 用于指定該EM進程啟動的所有引擎的總核數 | 20 |
| wds.linkis.enginemanager.engine.instances.max | 用于指定該EM進程啟動的所有引擎的總個數 | 20 |
| wds.linkis.enginemanager.protected.memory | 用于指定該EM進程用于保護的內存 | 2G(意味著最多可以使用38(40-2)G內存) |
| wds.linkis.enginemanager.protected.cores.max | 用于指定該EM進程用于保護的核數 | 2(意味著最多可以使用18(20-2)核數) |
| wds.linkis.enginemanager.protected.engine.instances | 用于指定該EM進程用于保護的引擎個數 | 1(意味著最多可以啟動19(20-1)個引擎) |
3.其他通用參數配置
Linkis除了Entrance和EngineManager兩類微服務外,還有其他的微服務也有自身的參數進行配置。
3.1 PublicService自定義配置
publicService微服務承載了Linkis運行的各類輔助性功能,包括文件編輯保存,結果集讀取等內容。
| wds.linkis.workspace.filesystem.get.timeout | 用于指定獲取文件系統的超時時間 | 10000(單位是ms) |
| wds.linkis.workspace.resultset.download.maxsize | 用于指定下載結果集的最多行數 | 5000(最多下載5000)或-1(全量下載) |
3.2 Engine類微服務
引擎類的微服務是隨時啟隨時用的,包括spark、hive以及python引擎,引擎類的微服務的配置參數需要在EngineManager的安裝目錄中的conf下面的linkis-engine.properties中進行修改。
| wds.linkis.engine.max.free.time | 用于指定一個引擎如果空閑多久會被kill | 3h(意味著一個引擎沒有執行任務三小時后,就會被自動kill) |
4.總結
Linkis的部署方案和使用方式息息相關,同時使用人數是最大的影響因素,為了能夠讓使用者能夠舒適地使用,同時降低集群服務器成本,需要運維開發人員進行嘗試,聽取用戶反饋,如果已經部署的方案不合適,需要適時恰當地進行部署方案的更改。
原文鏈接:
https://github.com/WeBankFinTech/Linkis/wiki/Linkis%E7%94%9F%E4%BA%A7%E9%83%A8%E7%BD%B2%E5%8F%82%E8%80%83%E6%8C%87%E5%8D%97
總結
以上是生活随笔為你收集整理的Linkis生产部署服务器配置参考指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linkis 编译文档
- 下一篇: Linkis EngineConnPlu