3-CloudAlibaba-Nacos(集群)学习笔记2020.10.19

15 篇文章 0 订阅
13 篇文章 0 订阅

3-CloudAlibaba-Nacos(集群)学习笔记2020.10.19

前言: (官网)

生产环境都是要保证高可用, 所以需要搭建Nacos集群, 来保证不会由于只有一个注册中心情况下挂了, 整个微服都出现问题, 由于Nacos默认使用的是内置嵌入式数据库derby, 如果搭建集群会出现数据一致性问题, 每个Nacos中数据库数据都不同。

所以需要使用自定义MySQL数据库, 目前也仅支持MySQL。 (前面笔记1-注册中心中配置过自定义数据库进行持久化配置)

从官网上的集群部署架构图上看, 推荐模式是域名 + VIP模式,可读性好,而且换ip方便;

类似nginx模式, 请求发送到nginxnginx转发到具体的nacos

deployDnsVipMode.jpg

需要3个Nacos + MySQL, 参考官网的docker的集群方式。

1.0 docker方式启动nacos集群

1.1 根据之前下载好的镜像启动集群方式容器 (并自定义MySQL数据库)

我这里3个nacos都是在同一个机子上面, 正常的环境是部署在不同的服务器, 通过外网连接的。

Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定, 所以我需要自己创建一个网络组才能自定义指定IP

docker network create -d bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 自定义名称

1.2 启动假设nacos容器机子1 (由于机子内存小所以指定了jvm内存)

[root@VM-0-9-centos ~]# docker run -id --name zhihai_nacos-1 --network zhihao --ip 172.18.0.5 -e MODE=cluster -e NACOS_SERVERS="172.18.0.5:8848 172.18.0.6:8848 172.18.0.7:8848" -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=172.17.0.1 -e MYSQL_SERVICE_PORT=3307 -e MYSQL_SERVICE_DB_NAME=nacos -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=root -e JVM_XMS=128m -e JVM_XMX=128m -e JVM_XMN=64m -p 8848:8848 (镜像ID) 

我这里使用的是同一个机子, 所以使用到了指定网络组--network zhihao、与--ip 172.17.0.5 指定了容器IP, 正式环境部署机子在不同地方是不需要的, 并且由于我nacos三个服务使用了自定义网络组, 无法通过MySQL容器IP去访问了, 换一种通过bridge网络的网关IP172.17.0.1或者直接公网IP去访问部署在bridge网络的数据库。

-e MODE=cluster表示是集群模式启动。

-e NACOS_SERVERS="172.17.0.5:8848 172.17.0.6:8848 172.17.0.7:8848" 指定集群机子的IP与端口, 正式部署不同机子的情况下是外网, 例如: 119.xxxx:8848 119.xxxx:8848 119.xxxx:8848 只是IP不同。

1.3 启动假设nacos容器假设机子2

[root@VM-0-9-centos ~]# docker run -id --name zhihai_nacos-2 --network zhihao --ip 172.18.0.6 -e MODE=cluster -e NACOS_SERVERS="172.18.0.5:8848 172.18.0.6:8848 172.18.0.7:8848" -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=172.17.0.1 -e MYSQL_SERVICE_PORT=3307 -e MYSQL_SERVICE_DB_NAME=nacos -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=root -e JVM_XMS=128m -e JVM_XMX=128m -e JVM_XMN=64m -p 8849:8848  (镜像ID) 

1.4 启动假设nacos容器假设机子3

[root@VM-0-9-centos ~]# docker run -id --name zhihai_nacos-3 --network zhihao --ip 172.18.0.7 -e MODE=cluster -e NACOS_SERVERS="172.18.0.5:8848 172.18.0.6:8848 172.18.0.7:8848" -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=172.17.0.1 -e MYSQL_SERVICE_PORT=3307 -e MYSQL_SERVICE_DB_NAME=nacos -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=root -e JVM_XMS=128m -e JVM_XMX=128m -e JVM_XMN=64m -p 8850:8848  (镜像ID) 

全部启动完成后, 进行访问机子1的地址 http://公网IP:8848/nacos

然后点菜单的集群管理, 看到如下界面说明配置成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pw0dwOyF-1603175522564)(https://s1.ax1x.com/2020/10/19/0xDEGR.jpg)]

2.0 进行测试

进行注册测试, 重现突然其中一个注册中心节点挂了的情况下, 微服是否还能正常调用。

2.1 应用中的application.yml

server:
  port: 8080

spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
       # 配置Nacos地址 (集群情况下也是只需要指定一个, nacos会将注册进去的服务, 自动同步到集群的nacos)
        server-addr: 119.xx.xxx.xxx:8848 

2.2 启动应用,注册上去

然后在菜单服务管理中可以看到, 并且访问其他节点的nacos中的服务管理也可以看到注册上去的服务

[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pjkvT92h-1603175522565)(https://s1.ax1x.com/2020/10/19/0x6iOx.jpg)]

这个时候服务之间是可以正常调用的。

2.3 假设突然nacos-1 注册中心突然挂了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uG55TUOO-1603175522568)(https://s1.ax1x.com/2020/10/19/0xcYb6.jpg)]

这个时候, 8848管理界面已经无法访问。

继续进行服务之间的正常调用, 发现是没有受到影响, 服务之间是可以继续进行调用的。

到此我们就配置完成官网说的 直连ip模式,机器挂则需要修改ip才可以使用 如果配置错误或者想换IP什么的, 需要删除容器重新创建。

3.0 搭配nginx进行转发(推荐方式)

也就是官网说的挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好

与 penAPI 域名 + VIP模式,可读性好,而且换ip方便,推荐模式

3.1 增加nginxnginx.conf转发规则配置文件

我这里早在之前就已经配置好目录挂载的nginx

	#upstream的负载均衡 (公网方式)
	upstream myNacosServices {
      server 119.xx.xx.xxx:8848;
      server 119.xx.xx.xxx:8848;
      server 119.xx.xx.xxx:8848;
    }

 server {
        # 监听端口
        listen       8868 default_server;
		
        #域名可以有多个,用空格隔开 (PS: 域名 + VIP模式需要自己购买域名, 这里使用挂载VIP模式)
        server_name  localhost;

		# /  拦截访问/** 后面所有请求转发
        location / {
        	#proxy_pass 指定负载均衡名称
            proxy_pass http://myNacosServices/;
        }
    }

配置完毕, 重启nginx容器, (PS我nginx也是部署在docker上面),所以需要开放容器访问端口 : 8868

然后通过nginx去访问nacos管理界面: http://119.xx.xxx.xxx:8868/nacos 能访问到说明配置欧克。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nqTzHTxi-1603175522569)(https://s1.ax1x.com/2020/10/20/BSWawR.jpg)]

3.2 修改应用中的application.yml

server:
  port: 8080

spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
       # 配置Nacos地址, 配置为访问刚才刚刚配置好的nginx规则与监听端口
        server-addr: 119.xx.xxx.xxx:8868 

启动注册服务上去, 然后进行查看服务管理是否存在, 并重复一套流程测试, 没有问题说明一切正常,

到此就配置完成。

1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懵懵懂懂程序员

如果节省了你的时间, 请鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值