欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-17 22:34:28
...

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

前言: (官网)

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

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

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

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

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

需要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内存)

[aaa@qq.com ~]# 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

[aaa@qq.com ~]# 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

[aaa@qq.com ~]# 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