基于k8s容器化部署Nacos集群

2023年 7月 15日 54.1k 0

近期,在机器上部署了三个节点的nacos集群服务用于几个小型微服务的注册配置中心,并使用了Nginx简单代理了一下,随即简单研究了下集群部署分布式部署稍微提高可用性。部署完后能够正常使用,但是发现一个问题,刷新Nacos集群节点列表,总会有一个或者两个节点时不时处于DOWNh或者SUSPICIOUS状态,于是开始了漫长的查找问题过程。集群能够正常使用,就是各服务应用总会爆出来一堆链接nacos服务异常,估计是发现不行马上又重定向到别的节点去了。最终,发现是某个节点的服务器的hostname不对(另外一个情况是cluster.conf容器里面内容旧数据,ENV配置时候也加入里面原始内容),而在nacos集群配置的是对应服务器的IP地址NACOS_INETUTILS_IP_ADDRESS,由此导致了集群节点间心跳检测失败,三次之后,节点自动下线或被置于不信任状态...

前情纪要

  • 仅集群内访问
  • 内网k8s环境外网端口开放条件
  • nacos2.2.X版本常见问题

本地搭建集群环境轻轻松松,在服务器上面提供机器搭建也是正常,到了k8s环境内网的时候就有点偏差,没问题还好,一旦没有部署成功就会出现各种问题,部署成功后出现服务掉线等
遇到问题:

  • 问题1:集群使用内网研发云k8s有部署成功之后,原本三个节点的冒出第四个节点
  • 问题2:集群部署根据自定义的环境变量进行传入参数,但是出现多余一个动态节点
  • 问题3:使用VIP地址把原本内部集群端口映射,服务注册出现大批量上线又掉线情况

不是经常性操作和部署,但是还是需要进行归纳总结梳理,后续查阅笔记记录,配置文件相关内容依据不同环境配置即可,不多加累赘,仅记录爬坑的问题

搭建架构

NACOSRaft协议同步.png

  • 3+以上Nacos节点才能构成集群;
  • Nacos Nginx Proxy用于代理转发;

准备排版

Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。来源:集群模式部署

端口 与主端口的偏移量 描述
8848 0 主端口,客户端、控制台及OpenAPI所使用的HTTP端口
9848 1000 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
9849 1001 服务端gRPC请求服务端端口,用于服务间同步等
7848 -1000 Jraft请求服务端端口,用于处理服务端间的Raft相关请求

使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。9849和7848端口为服务端之间的通信端口,请勿暴露到外部网络环境和客户端测。

arch-2.png
按照上述官方的端口分配要求,此处部署的使用三台服务器上面创建的Nacos集群端口分配如下:

节点 IP 端口(所需暴露) 备注 版本 当前线下环境部署文件路径
nacos-node1 192.168.xx.201 宿主机:8858,9858,9859,7858 容器:8858,9858,9859,7858 Nacos 节点一 nacos/nacos-server:2.2.4 /root/nacos-deploy/
nacos-node2 192.168.xx.202 宿主机:8858,9858,9859,7858 容器:8858,9858,9859,7858 Nacos 节点二 nacos/nacos-server:2.2.4 /root/nacos-deploy/
nacos-node3 192.168.xx.203 宿主机:8858,9858,9859,7858 容器:8858,9858,9859,7858 Nacos 节点三 nacos/nacos-server:2.2.4 /root/nacos-deploy/
Nacos DB Mysql 192.168.xx.206 宿主机:3306 容器:3306 Nacos数据库 mysql:5.7.34 /root/nacos-db-deploy
Nacos DB Postgres 192.168.xx.206 宿主机:5432 容器:5432 Nacos数据库 postgres:12-alpine /root/nacos-db-deploy
Nacos Nginx Proxy 192.168.xx.208 宿主机:80 容器:80 Nacos代理 1.23.2 /root/nacos-proxy-deploy
Nacos Cheak Health 192.168.xx.208 健康检查 /root/nacos-check-health

k8s互通域名

【nacos-node1】是指:负载名称
【pigcloud.svc.cluster.local】是指:固定服务名称

nacos-node1.pigcloud.svc.cluster.local:8858 
nacos-node2.pigcloud.svc.cluster.local:8858 
nacos-node3.pigcloud.svc.cluster.local:8858

域名nginx里面配置信息调整起到关键作用

创建Nacos数据库

使用的是容器化运行nacos,需要创建一个数据库,并从官方对应的版本中去导入基本数据库结构的数据文件

编译nacos2.2.4

创建mysql服务

  • docker-mysql.yml
  • 执行yml
docker-compose -f  /root/nacos-db-deploy/docker-mysql.yaml up -d
# 导入官方表数据
docker cp /root/nacos/conf/nacos-mysql.sql nacos-mysql:/tmp
docker exec -it nacos-mysql sh
mysql -uroot -p123456
create database nacos;
use nacos;
source /tmp/nacos-mysql.sql;

创建postgres服务

  • docker-postgres.yml

  • 执行yml

docker-compose -f  /root/nacos-db-deploy/postgres.yaml up -d

Nacos服务

创编yaml文件

mkdir /data/nacos2.2.4_1/logs -p
mkdir /data/nacos2.2.4_2/logs -p
mkdir /data/nacos2.2.4_2/logs -p

mkdir /root/nacos-deploy/

cat  /root/nacos-deploy/nacos1.yaml
对应内容写入
EOF

cat  /root/nacos-deploy/nacos2.yaml
对应内容写入
EOF

cat  /root/nacos-deploy/nacos3.yaml
对应内容写入
EOF

各配置中的端口非标准端口,需注意环境变量NACOS_APPLICATION_PORT如果不指定为非特定端口,那么缺省在配置中的环境变量则为8848,在同一台机器上运行三个节点会出现问题

运行Nacos

各节点运行即可

docker-compose -f /root/nacos-deploy/nacos1.yaml up -d
docker-compose -f /root/nacos-deploy/nacos2.yaml up -d
docker-compose -f /root/nacos-deploy/nacos3.yaml up -d

三个节点单独访问页面正常;通过代理访问正常;

注意:Web页面并没有使用到客户端,服务端gRPC调用服务,但是在程序中需要请求对应的端口,所以务必需要暴露出来,因为使用了非标准端口,那么在nginx做代理时就直接(伪装)映射成标准端口即可。

Nginx代理配置

此处仍然使用容器化方式运行。
配置nginx代理

mkdir /root/nacos-proxy-deploy
cat /root/nacos-proxy-deploy/nacos-nginx-proxy.yaml /root/nacos-check-healthy/nacos_check_status.py

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论