nacos集群搭建

一、规划

   nacos至少要3台主机才能搭建集群,所以这里分配的ip是:
128.30.14.245:8848
128.30.14.249:8848
128.30.14.221:8848

二、集群配置

  由于已经是集群模式,不怕丢数据,出鉴于nacos的数据量小,所以决定采取内置数据库的模式启动nacos。
** 注意,nacos的群集若使用嵌入式(内置)数据库则会同步配置中心的数据,若使用外部数据库,则不同步!**,也就是说多个nacos服务应该使用同一个数据库才能做到配置数据共享!

1、建立cluster.conf

分别在三台主机的nacos/conf下建立cluster.conf集群配置文件,将上集的ip:port填入:

128.30.14.245:8848
128.30.14.249:8848
128.30.14.221:8848

2、修改application.properties

  修改这个配置文件,将数据库配置的注释掉,并且指定本机的ip:
在这里插入图片描述

3、建立集群启动脚本

分别于三台服务器上建立启动脚本,vi start-clust.sh, 指定为内置模式

#!/bin/bash
./startup.sh -p embedded

三、启动并测试

  分别启动三台主机的start-clust.sh,当启动第一台时,tail -f logs/start.out会发现它一直在starting …,因为它在等待其他小伙伴。所以,你要继续启动其他两台主机的nacos。然后它们都能启动成功:
在这里插入图片描述
测试一下,在其中一台nacos里面建立一个DataID,
在这里插入图片描述
其他nacos里面也即时同步过去了:
在这里插入图片描述
再看一下节点列表,都上线了:
在这里插入图片描述

四、SpringCloud端nacos集群的配置

  官方及网络上多是介绍利用nginx来转发到nacos集群,这个方案一旦nginx无法用域名来访问,其实是多了一重意外:nginx主机宕机了又怎么办? 所以以下介绍如何在cloud项目里面指定nacos集群参数:

1、配置discovery的参数

用逗号分隔3个nacos的ip:地址

2、配置dubbo注册器

由于新版的dubbo端支持多注册器注册,具体请参阅org.apache.dubbo.spring.boot.autoconfigure.DubboConfigurationProperties#setRegistries(Map<String, RegistryConfig> registries),传入的是map参数,所以:
在这里插入图片描述

3、测试

在dubbo-2.7.8.jar!/org/apache/dubbo/config/ServiceConfig.class:397
registryURLs的内容,可以得知,除了向我们配置里面的4个nacos服务器注册provider服务之外还向自己也注册了一份。
在这里插入图片描述
代码如下:

while(var10.hasNext()) {
            URL registryURL = (URL)var10.next();
            if (!"injvm".equalsIgnoreCase(url.getProtocol())) {
              url = url.addParameterIfAbsent("dynamic", registryURL.getParameter("dynamic"));
              URL monitorUrl = ConfigValidationUtils.loadMonitor(this, registryURL);
              if (monitorUrl != null) {
                url = url.addParameterAndEncoded("monitor", monitorUrl.toFullString());
              }
              if (logger.isInfoEnabled()) {
                if (url.getParameter("register", true)) {
                  logger.info("Register dubbo service " + this.interfaceClass.getName() + " url " + url + " to registry " + registryURL);
                } else {
                  logger.info("Export dubbo service " + this.interfaceClass.getName() + " to url " + url);
                }
              }

              String proxy = url.getParameter("proxy");
              if (StringUtils.isNotEmpty(proxy)) {
                registryURL = registryURL.addParameter("proxy", proxy);
              }

              Invoker<?> invoker = PROXY_FACTORY.getInvoker(this.ref, this.interfaceClass, registryURL.addParameterAndEncoded("export", url.toFullString()));
              DelegateProviderMetaDataInvoker wrapperInvoker = new DelegateProviderMetaDataInvoker(invoker, this);
              Exporter<?> exporter = PROTOCOL.export(wrapperInvoker);
              this.exporters.add(exporter);
            }
          }

最终向nacos发起注册url的方法:com.alibaba.nacos.client.naming.net.NamingProxy#registerService
调用com.alibaba.nacos.common.http.client.NacosRestTemplate#execute来发送数据。
最后查看一下log,已经能成功向3台nacos服务器注册上provider服务了:

 INFO 12864 --- [           main] org.apache.dubbo.config.ServiceConfig    :  [DUBBO] Register dubbo service com.freestyle.seatabusiness.api.service.AccountService url dubbo://128.30.202.25:20880/com.freestyle.seatabusiness.api.service.AccountService?anyhost=true&application=dubbo-business-account-service-provider&bind.ip=128.30.202.25&bind.port=20880&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.freestyle.seatabusiness.api.service.AccountService&metadata-type=remote&methods=addAccount,debit&pid=12864&qos.accept.foreign.ip=false&qos.enable=false&release=2.7.8&side=provider&timestamp=1640137663016 to registry registry://128.30.14.245:8848/org.apache.dubbo.registry.RegistryService?application=dubbo-business-account-service-provider&dubbo=2.0.2&group=seata-business&pid=12864&qos.accept.foreign.ip=false&qos.enable=false&registry=nacos&release=2.7.8&timestamp=1640137663014, dubbo version: 2.7.8, current host: 172.23.176.1
 ...
 INFO 12864 --- [           main] org.apache.dubbo.config.ServiceConfig    :  [DUBBO] Register dubbo service com.freestyle.seatabusiness.api.service.AccountService url dubbo://128.30.202.25:20880/com.freestyle.seatabusiness.api.service.AccountService?anyhost=true&application=dubbo-business-account-service-provider&bind.ip=128.30.202.25&bind.port=20880&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.freestyle.seatabusiness.api.service.AccountService&metadata-type=remote&methods=addAccount,debit&pid=12864&qos.accept.foreign.ip=false&qos.enable=false&release=2.7.8&side=provider&timestamp=1640137663016 to registry registry://128.30.14.249:8848/org.apache.dubbo.registry.RegistryService?application=dubbo-business-account-service-provider&dubbo=2.0.2&group=seata-business&pid=12864&qos.accept.foreign.ip=false&qos.enable=false&registry=nacos&release=2.7.8&timestamp=1640137663016
 ...
INFO 12864 --- [           main] org.apache.dubbo.config.ServiceConfig    :  [DUBBO] Register dubbo service com.freestyle.seatabusiness.api.service.AccountService url dubbo://128.30.202.25:20880/com.freestyle.seatabusiness.api.service.AccountService?anyhost=true&application=dubbo-business-account-service-provider&bind.ip=128.30.202.25&bind.port=20880&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.freestyle.seatabusiness.api.service.AccountService&metadata-type=remote&methods=addAccount,debit&pid=12864&qos.accept.foreign.ip=false&qos.enable=false&release=2.7.8&side=provider&timestamp=1640137663016 to registry registry://128.30.14.221:8848/org.apache.dubbo.registry.RegistryService?application=dubbo-business-account-service-provider&dubbo=2.0.2&group=seata-business&pid=12864&qos.accept.foreign.ip=false&qos.enable=false&registry=nacos&release=2.7.8&timestamp=1640137663016
...
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值