nacos为什么会有mysql_Nacos

如何实现配置在集群间同步的?

前提步骤部署MySQL,并执行sql脚本创建nacos schema

参照官网的nacos集群部署指南——nacos 集群部署指南

启动nacos集群

开始设置在集群中任意登陆一台nacos server节点,然后创建配置

再次登陆其余节点,会发现配置信息已经同步到其余的节点中了

配置信息如何在集群间同步?

其实,这个配置信息同步是很简单的——直接从MySQL中读取就好了,在集群模式下,nacos-server需要使用数据库进行存储config配置信息,然后其他nacos-server config节点直接从数据库中读取即可1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32(params = "search=accurate", method = RequestMethod.GET)

public Page (HttpServletRequest request,

HttpServletResponse response,

@RequestParam("dataId") String dataId,

@("group") String group,

@RequestParam(value = "appName", required = false) String appName,

@RequestParam(value = "tenant", required = false,

defaultValue = StringUtils.EMPTY) String tenant,

@RequestParam(value = "config_tags", required = false) String configTags,

@RequestParam("pageNo") int pageNo,

@RequestParam("pageSize") int pageSize){

Map configAdvanceInfo = new HashMap(100);

if (StringUtils.isNotBlank(appName)) {

configAdvanceInfo.put("appName", appName);

}

if (StringUtils.isNotBlank(configTags)) {

configAdvanceInfo.put("config_tags", configTags);

}

try {

return persistService.findConfigInfo4Page(pageNo, pageSize, dataId, group, tenant,

configAdvanceInfo);

} catch (Exception e) {

String errorMsg = "serialize page error, dataId=" + dataId + ", group=" + group;

log.error(errorMsg, e);

throw new RuntimeException(errorMsg, e);

}

}

CommunicationController的作用

既然部署了nacos-server config集群,那么nacos-client连接的时候,基本上都是写上nacos-server cluster集群下所有节点的IP地址信息,那么这里就会有一个问题了,假设现在有三台nacos-server-config,分别为nacos-A/nacos-B/nacos-C,同时有一个nacos-client,它连接到了nacos-A,但是运维的同学,却在nacos-B进行了配置发布,那么nacos-client要怎么才能获取到最新的配置信息,换句话说,nacos-A要怎么才能知道配置已经更新了?这个时候CommunicationController的作用就体现出来了

CommunicationController是用于其他节点通知的控制器,是被动接受配置更新通知的。那么,这个通知是怎么发出的呢?这个时候回到ConfigController.publishConfig关键代码1

2

3

4

5

6

7

8

9

10

11

12

13

14

15if (StringUtils.isBlank(betaIps)) {

if (StringUtils.isBlank(tag)) {

// 配置信息持久化存储

persistService.insertOrUpdate(srcIp, srcUser, configInfo, time, configAdvanceInfo, false);

// 进行事件发布

EventDispatcher.fireEvent(new ConfigDataChangeEvent(false, dataId, group, tenant, time.getTime()));

} else {

persistService.insertOrUpdateTag(configInfo, tag, srcIp, srcUser, time, false);

EventDispatcher.fireEvent(new ConfigDataChangeEvent(false, dataId, group, tenant, tag, time.getTime()));

}

} else {

// beta publish,配置信息灰度发布

persistService.insertOrUpdateBeta(configInfo, betaIps, srcIp, srcUser, time, false);

EventDispatcher.fireEvent(new ConfigDataChangeEvent(true, dataId, group, tenant, time.getTime()));

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值