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

it2023-03-06  89

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

前言: (官网)

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

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

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

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

需要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 增加nginx的nginx.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)