1、 前言
r-nacos是一個用rust實現的nacos服務。相較於java nacos來說,是一個提供相同功能,啟動更快、佔用系統資源更小(初始記憶體小於10M)、效能更高、執行更穩定的服務。
r-nacos設計上完全相容最新版本nacos面向client sdk 的協議(包含1.x的http OpenApi,和2.x的grpc協議), 支援使用nacos服務的應用平遷到 r-nacos。
r-nacos在本地測試使用很簡單,透過./rnacos
直接啟動應用即可。
但是生產環境中還是需要更規範的方式部署執行。
目前的linux服務基本預設支援systemd統一管理服務。
本文主要記錄使用systemd部分r-nacos的過程說明。
2、規劃r-nacos執行位置
- 服務應用放到
/opt/rnacos/
中 - r-nacos配置使用
/etc/rnacos/env.conf
- 資料放到
/var/rnacos/io/
中 - systemd 服務配置放到
/lib/systemd/system/rnacos.service
3、部署
- 下載服務應用
mkdir -p /opt/rnacos/
cd /opt/rnacos/
#download from github
curl -LO https://github.com/r-nacos/r-nacos/releases/download/v0.5.0/rnacos-x86_64-unknown-linux-musl.tar.gz
#download from gitee
#curl -LO https://gitee.com/hqp/rnacos/releases/download/v0.5.0/rnacos-x86_64-unknown-linux-musl.tar.gz
tar -xvf rnacos-x86_64-unknown-linux-musl.tar.gz
- 增加r-nacos服務配置
mkdir -p /etc/rnacos/
cat >/etc/rnacos/env.conf <<EOF
# rnacos 指定配置檔案有兩種方式:
# 1. 預設檔案(放置於執行目錄下,檔名為“.env”,自動讀取)
# 2. 指定檔案(放置於任意目錄下, 透過 命令列引數“-e 檔案路徑”形式指定, 如“./rnacos -e /etc/rnacos/conf/default.cnf”)
# 更多說明請參照 https://r-nacos.github.io/r-nacos/deplay_env.html
# r-nacos監聽http埠,預設值:8848
RNACOS_HTTP_PORT=8848
#r-nacos監聽grpc埠,預設值:HTTP埠+1000(即9848)
#RNACOS_GRPC_PORT=9848
#r-nacos獨立控制檯埠,預設值:HTTP埠+2000(即10848);設定為0可不開啟獨立控制檯
#RNACOS_HTTP_CONSOLE_PORT=10848
#r-nacos控制檯登入1小時失敗次數限制預設是5,一個使用者連續登陸失敗5次,會被鎖定1個小時 ,預設值:1
RNACOS_CONSOLE_LOGIN_ONE_HOUR_LIMIT=5
#http工作執行緒數,預設值:cpu核數
#RNACOS_HTTP_WORKERS=8
#配置中心的本地資料庫sled資料夾, 會在系統執行時自動建立 ,預設值:nacos_db
RNACOS_CONFIG_DB_DIR=nacos_db
#節點id,預設值:1
RNACOS_RAFT_NODE_ID=1
#節點地址Ip:GrpcPort,單節點執行時每次啟動都會生效;多節點叢集部署時,只取加入叢集時配置的值,預設值:127.0.0.1:GrpcPort
RNACOS_RAFT_NODE_ADDR=127.0.0.1:9848
#是否當做主節點初始化,(只在每一次啟動時生效)節點1時預設為true,節點非1時為false
#RNACOS_RAFT_AUTO_INIT=true
#是否當做節點加入對應的主節點,LeaderIp:GrpcPort;只在第一次啟動時生效;預設值:空
#RNACOS_RAFT_JOIN_ADDR=127.0.0.1:9848
#日誌等級:debug,info,warn,error;所有http,grpc請求都會打info日誌,如果不關注,可以設定為error 減少日誌量,預設值:info
RUST_LOG=info
EOF
- 初始化r-nacos資料目錄
mkdir -p /var/rnacos/io/
# 如果使用rnacos使用者執行,則要開放目錄寫許可權給使用者
# adduser rnacos
# chown -R rnacos:rnacos /var/rnacos
- 初始化r-nacos 服務配置
cat >/lib/systemd/system/rnacos.service <<EOF
[Unit]
Description=r-nacos server
After=network.target
[Service]
#使用指定使用者執行
#User=rnacos
#Group=rnacos
ExecStart=/opt/rnacos/rnacos -e /etc/rnacos/env.conf
# 程序異常關閉時會自動重啟
Restart=always
WorkingDirectory=/var/rnacos/io
[Install]
WantedBy=multi-user.target
EOF
- 重新載入並啟動服務
# 重新載入配置
systemctl daemon-reload
# 啟用服務並馬上啟動
systemctl enable --now rnacos
# 檢視服務狀態
systemctl status rnacos
把上以的指令碼連起來執行,r-nacos服務即可部署完成。
4、管理服務
- 使用
systemctl
管理服務
常用的命令
# 檢視服務狀態
systemctl status rnacos
# 啟動服務
systemctl start rnacos
# 關閉服務
systemctl stop rnacos
# 啟動服務,開機自動啟動
systemctl enable rnacos
# 禁用服務,開機不啟動
systemctl disable rnacos
- 同時可以結合使用
journalctl
管理檢視服務日誌
# 檢視日誌
journalctl -u rnacos
# 檢視最新日誌
journalctl -u rnacos -f
其它journalctl日誌管理方式,可以單獨支瞭解,這裡不展開。
5、驗證服務
5.1 shell 本地 http驗證
- 配置中心http api例子
# 設定配置
curl -X POST 'http://127.0.0.1:8848/nacos/v1/cs/configs' -d 'dataId=t001&group=foo&content=contentTest'
# 查詢
curl 'http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=t001&group=foo'
- 註冊中心http api例子
# 註冊服務例項
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance' -d 'port=8000&healthy=true&ip=192.168.1.11&weight=1.0&serviceName=nacos.test.001&groupName=foo&metadata={"app":"foo","id":"001"}'
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance' -d 'port=8000&healthy=true&ip=192.168.1.12&weight=1.0&serviceName=nacos.test.001&groupName=foo&metadata={"app":"foo","id":"002"}'
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance' -d 'port=8000&healthy=true&ip=192.168.1.13&weight=1.0&serviceName=nacos.test.001&groupName=foo&metadata={"app":"foo","id":"003"}'
# 查詢服務例項
curl "http://127.0.0.1:8848/nacos/v1/ns/instance/list?&namespaceId=public&serviceName=foo%40%40nacos.test.001&groupName=foo&clusters=&healthyOnly=true"
5.2 nacos客戶端應用驗證
如果客戶端應用與nacos服務不在同一臺機器,需要開放8848
,9848
埠給內網應用使用。(注意8848
,9848
埠不能暴露到外網上)
在客戶端應用中配置好nacos服務後,即可執行驗證。
5.3 使用r-nacos控制檯
開放10848
埠後,可以透過對應ip+埠在瀏覽器訪問控制檯。
新控制檯有完備的使用者管理、登陸校驗、許可權控制,支援對外網暴露。
系統會預設建立一個名為admin的使用者,密碼為admin。
6、總結
r-nacos是一個用rust實現的nacos服務,我們用它平替java nacos以降低服務佔用記憶體,提升服務的穩定性。
systemd提供便捷的服務託管功能,可以方便的將一個命令執行的應用,轉化成一個可方便控制的後臺服務。
使用systemd部署r-nacos,是一個比較和合適的、可用於生產環境的部署方案。