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,是一个比较和合适的、可用于生产环境的部署方案。

使用systemd部署r-nacos的更多相关文章

  1. Springboot War包部署下nacos无法注册问题

    目录 1. @EnableDiscoveryClient的使用 2. EnableDiscoveryClientImportSelector类的作用 3.AutoServiceRegistration ...

  2. 基于Docker部署Dubbo+Nacos服务

    一.说明 本文介绍基于 Docker 部署一套 Dubbo + Nacos 的微服务环境,并解决容器里的 IP 及端口的访问问题. 基于上文<基于jib-maven-plugin快速构建微服务d ...

  3. 基于Kubernetes(k8s)部署Dubbo+Nacos服务

    一.说明 本文介绍基于 Kubernetes(k8s) 环境集成阿里云 私有镜像仓库 来部署一套 Dubbo + Nacos 的微服务系统,并使用 Kubernetes DNS 以及 port-for ...

  4. debian9使用systemd部署etcd集群

    在centos上,是可以直接使用yum安装etcd的: # yum list | grep etcd etcd.x86_64 3.2.9-3.el7 @extras 但是,在debian上却没有安装包 ...

  5. 全网最新的nacos 2.1.0集群多节点部署教程

    原文链接:全网最新的nacos 2.1.0集群多节点部署教程-语雀 基本信息 进度整理中 版本 2.1.0 版本发布日期 2022-04-29 git revision number b5845313 ...

  6. Spring Cloud Alibaba | Nacos集群部署

    目录 Spring Cloud Alibaba | Nacos集群部署 1. Nacos支持三种部署模式 2. 集群模式下部署Nacos 2.1 架构图 2.2 下载源码或者安装包 2.3 配置集群配 ...

  7. Nacos 集群部署

    关于nacos 集群部署,网上的示例往往不全或不可用,而官方的教程太简单了.官方也提供了一个 docker  + nacos 的伪集群的 部署示例.但毕竟是 伪, 不能实际生产使用. 全网就几乎就没有 ...

  8. 在 K8S 上部署以 mysql 数据库作为后端存储的单机版 nacos

    Nacos 被用于: 服务发现 微服务配置信息管理 部署 nacos 时,需要用到如下两个镜像,这两个镜像均来自于 nacos 官方发布到 docker hub 的镜像, nacos/nacos-se ...

  9. Spring Cloud Alibaba基础教程:Nacos的集群部署

    继续说说生产环境的Nacos搭建,通过上一篇<Spring Cloud Alibaba基础教程:Nacos的数据持久化>的介绍,我们已经知道Nacos对配置信息的存储原理,在集群搭建的时候 ...

  10. Nacos系列:Nacos的三种部署模式

    三种部署模式 Nacos支持三种部署模式 1.单机模式:可用于测试和单机使用,生产环境切忌使用单机模式(满足不了高可用) 2.集群模式:可用于生产环境,确保高可用 3.多集群模式:可用于多数据中心场景 ...

随机推荐

  1. Sunnyui画曲线溢出错误

    之前用sunnyui做展示数据库数据曲线的时候.偶然会报溢出错误,也不报错错误在哪,就是直接程序都跑不动了. 后面发现 设置曲线上下限的时候,当上下限一样的时候就会导致溢出错误.sunnyui的曲线也 ...

  2. Java图片加水印

    采用Java自带的Image IO 废话不多说,上菜 1.  文字水印 1 import sun.font.FontDesignMetrics; 2 3 import javax.imageio.Im ...

  3. 【OpenGL ES】FBO离屏渲染

    1 前言 ​ OpenGL 默认把 framebuffer 当作渲染目的地,它由窗口系统创建并管理.应用程序也可以创建额外非可显示的 framebuffer object(FBO),以区别窗口系统提供 ...

  4. eclipse项目右击找不到build path

    右击项目–>properties–>Project Facets–>勾选右侧的Java,然后保存. 此时再操作就有了.

  5. 【Android 逆向】【攻防世界】android2.0

    这是一道纯算法还原题 1. apk安装到手机,提示输入flag,看来输入就是flag 2. jadx 打开apk查看 this.button.setOnClickListener(new View.O ...

  6. 海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储

    前言   Hik防爆摄像头录像,因为防爆摄像头会有对应的APP软件,与普通的网络摄像头和球机不一样,默认认为它不可以通过web网页配置,所以弄了个来实测确认.  经测试实际上也是可以通过web网页配置 ...

  7. django中修改QueryDict数据类型和转成普通字典

    修改QueryDict的几种方式 简介 在正常的请求/响应周期中访问时,request.POST和request.GET上的QueryDict将是不可变的. 要获得可变版本,您需要使用QueryDic ...

  8. Apifox:成熟的测试工具要学会自己写接口文档

    好家伙, 在开发过程中,我们总是避免不了进行接口的测试, 而相比手动敲测试代码,使用测试工具进行测试更为便捷,高效 今天发现了一个非常好用的接口测试工具Apifox 相比于Postman,他还拥有一个 ...

  9. 【Azure 服务总线】Spring Cloud 的应用 使用Service Bus 引起 org.springframework.beans.BeanInstantiationException 异常,无法启动

    问题描述 Spring Cloud 的应用原本正常运行,但是重新发布了一次应用后,发现使用 Service Bus 服务的应用都无法启动并报 BeanInstantiationException  异 ...

  10. 彩虹猫IDA分析记录

    目录 彩虹猫分析 概述 无参启动 带/main参数启动 带/watchdog参数启动 MBR引导程序和动画程序 第一段 引导代码 第二段 动画代码 其他函数 扭曲桌面 扰乱鼠标 钩子函数 桌面绘制图标 ...