Nacos使用总结

官网 :http://nacos.io

下载地址 本文下载的为2.0.0版本:

https://github.com/alibaba/nacos/releases

Linux/Unix/Mac

启动命令:(默认启动为集群模式)

  • 单机模式 - 用于测试和单机试用
sh startup.sh -m standalone
  • 集群模式 - 用于生产环境,确保高可用,官方建议至少3个或3个以上的节点来实现集群模式
sh startup.sh -m cluster

根据cluster.conf.example修改生成 cluster.conf

127.0.0.1:8848
127.0.0.1:18848
127.0.0.1:28848

 最好用nginx做下反向代理

upstream nacos_backend
{
 server localhost:8848;
 server localhost:18848;
 server localhost:28848;
}

location  /nacos/
  {
   proxy_pass http://nacos_backend;
   proxy_set_header Host $host;
   add_header Access-Control-Allow-Origin *;
  proxy_set_header X-Real_IP $remote_addr;
   proxy_set_header Referer $http_referer;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
  • 多集群模式 - 用于多数据中心场景 TODO...

关闭nacos:

[root@VM-0-15-centos bin]# sh shutdown.sh 
The nacosServer(26890) is running...
Send shutdown request to nacosServer(26890) OK

启动端口

Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。

端口与主端口的偏移量描述
98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
98491001服务端gRPC请求服务端端口,用于服务间同步等

客户端拥有相同的计算逻辑,用户如同1.X的使用方式,配置主端口(默认8848),通过相同的偏移量,计算对应gRPC端口(默认9848)。

因此如果客户端和服务端之前存在端口转发,或防火墙时,需要对端口转发配置和防火墙配置做相应的调整。

 

打开页面

http://127.0.0.1/nacos/index.html

默认账号是nacos,默认密码nacos

[root@VM-0-15-centos logs]# jps -l
30601 sun.tools.jps.Jps
26890 /data/download/nacos/target/nacos-server.jar

数据持久化

默认情况下,Nacos使用嵌入式数据库derby 实现数据的存储,所以我们如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。修改

新建数据库nacos,刷入SQL脚本nacos-mysql.sql,修改application.properties,

### Connect URL of DB:
db.url.0=jdbc:mysql://172.17.0.15:3306/nacos?autoReconnect=true&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf-8
db.user.0=root
db.password.0=ooxxooxx

数据库表如下:

mysql> show tables;
+----------------------+
| Tables_in_nacos      |
+----------------------+
| config_info          |
| config_info_aggr     |
| config_info_beta     |
| config_info_tag      |
| config_tags_relation |
| group_capacity       |
| his_config_info      |
| permissions          |
| roles                |
| tenant_capacity      |
| tenant_info          |
| users                |
+----------------------+
12 rows in set (0.00 sec)

其中config_info 记录了配置信息,his_config_info记录了输入的历史版本,users记录了登陆账号。

再次启动当看到如下信息,说明mysql存储已经开启

2021-04-05 15:35:50,810 INFO Started Nacos in 12.238 seconds (JVM running for 12.789)

2021-04-05 15:35:50,811 INFO Nacos started successfully in stand alone mode. use external storage

目前对我们有用的功能如下:

服务发现:

代码地址:https://github.com/alibaba/nacos/tree/develop/naming

描述主要开发者状态排期
服务注册与发现nkorange稳定0.1.0
健康检查(服务端探测、客户端心跳)xuanyin稳定0.1.0
路由策略(权重、保护阈值、就近访问)wangjianwei稳定0.1.0

 配置管理

代码地址:https://github.com/alibaba/nacos/tree/develop/config

描述主要开发者状态排期
配置管理(发布、修改、查询、监听配置)yanlinly稳定0.1.0
灰度配置yanlinly稳定1.1.0
加密配置 不支持

 如何使用?

下载客户端

implementation group: 'com.alibaba.nacos', name: 'nacos-client', version: '2.0.0';

 

修改配置的的话,服务器日志生成在这个文件下:

/usr/local/nacos8848/logs/config-client-request.log

命名空间的创建,别名和ID最好一致,否则ID容易生成一长串的3fdd5065-f742-4f4f-9b80-015b7c5468ae,很难肉眼去识别。

SDK使用:

初始化客户端(指定namespace):

        String serverId = "10018";
        String configCenter = "110.15.9.113";
        String nameSpace = "dev";
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.SERVER_ADDR, configCenter);
        properties.put(PropertyKeyConst.NAMESPACE, nameSpace);
        ConfigService configService = NacosFactory.createConfigService(properties);

发布配置(指定group,dataId)

用于通过程序自动发布 Nacos 配置,以便通过自动化手段降低运维成本。

注意:创建和修改配置时使用的同一个发布接口,当配置不存在时会创建配置,当配置已存在时会更新配置。

public boolean publishConfig(String dataId, String group, String content) throws NacosException;

@Since 1.4.1
public boolean publishConfig(String dataId, String group, String content, String type) throws NacosException;
boolean successful = configService.publishConfig(serverId, SystemConstant.SERVER_TYPE_GAME, content);

获取配置

用于服务启动的时候从 Nacos 获取配置。

public String getConfig(String dataId, String group, long timeoutMs) throws NacosException
String config = null;
try {
     config = configService.getConfig(serverId, SystemConstant.SERVER_TYPE_GAME, 5000);
} catch (NacosException e) {
                    logger.error(e.getMessage(), e);
}
logger.debug("读取配置 config=\n{}", config);

删除配置

用于通过程序自动删除 Nacos 配置,以便通过自动化手段降低运维成本。

注意: 当配置已存在时会删除该配置,当配置不存在时会直接返回成功消息。

public boolean removeConfig(String dataId, String group) throws NacosException

 

configService.removeConfig(serverId, SystemConstant.SERVER_TYPE_GAME);

监听配置

如果希望 Nacos 推送配置变更,可以使用 Nacos 动态监听配置接口来实现。

public void addListener(String dataId, String group, Listener listener) 

 举例:

        AbstractConfigChangeListener listener = new AbstractConfigChangeListener() {
            @Override
            public void receiveConfigChange(ConfigChangeEvent event) {
                logger.debug("{}", event.getChangeItems());
            }

            @Override
            public void receiveConfigInfo(final String configInfo) {
                logger.debug("更新配置 config=\n{}", configInfo);
            }
        };

        configService.addListener(serverId, SystemConstant.SERVER_TYPE_GAME, listener);

删除监听(一定是要曾经加到监听去的对象):

configService.removeListener(serverId, SystemConstant.SERVER_TYPE_GAME, listener);

 

获取服务器状态,值为UP为正常,DOWN为跪了

    String getServerStatus();

关闭客户端:

  configService.shutDown();

运行过程中会有如下8个线程产生,感觉很冗余:

目前遇到的两个问题:

1.启动会占用1.5秒,Response ,Request包扫描,GRPC 初始化,耗时过长,

2.生成了过多的线程数,目测8根

 

nacos单机模式报错:server is DOWN now, please try again later!

删除nacos目录下data/protocol目录,重新启动nacos服务

流子 CSDN认证博客专家 游戏程序员
关注游戏服务器架构及优化,监控预警,智能运维,数据统计分析等,对IO,MOBA,FPS,全球同服方面很感兴趣,希望能和兴趣相投的人一起搞点事。
https://github.com/jiangguilong2000/gamioo
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值