使用systemd部署r-nacos

拾玄發表於2024-03-26

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執行位置

  1. 服務應用放到 /opt/rnacos/
  2. r-nacos配置使用 /etc/rnacos/env.conf
  3. 資料放到 /var/rnacos/io/
  4. systemd 服務配置放到 /lib/systemd/system/rnacos.service

3、部署

  1. 下載服務應用
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
  1. 增加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
  1. 初始化r-nacos資料目錄
mkdir -p /var/rnacos/io/

# 如果使用rnacos使用者執行,則要開放目錄寫許可權給使用者
# adduser rnacos
# chown -R rnacos:rnacos /var/rnacos
  1. 初始化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
  1. 重新載入並啟動服務
# 重新載入配置
systemctl daemon-reload
# 啟用服務並馬上啟動
systemctl enable --now rnacos

# 檢視服務狀態
systemctl status rnacos

把上以的指令碼連起來執行,r-nacos服務即可部署完成。

4、管理服務

  1. 使用systemctl管理服務

常用的命令

# 檢視服務狀態
systemctl status rnacos

# 啟動服務
systemctl start rnacos

# 關閉服務
systemctl stop rnacos

# 啟動服務,開機自動啟動
systemctl enable rnacos

# 禁用服務,開機不啟動
systemctl disable rnacos

  1. 同時可以結合使用journalctl 管理檢視服務日誌
# 檢視日誌
journalctl -u rnacos
# 檢視最新日誌
journalctl -u rnacos  -f

其它journalctl日誌管理方式,可以單獨支瞭解,這裡不展開。

5、驗證服務

5.1 shell 本地 http驗證

  1. 配置中心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'

  1. 註冊中心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,是一個比較和合適的、可用於生產環境的部署方案。

相關文章