在docker 环境下搭建nacos集群

在Docker 环境下搭建Nacos 2.x 集群

Nacos集群调用是用Nginx做反向代理的。

对于搭建过程有好多教程文档,可自行查漏补缺,本篇就我自己操作过程中出现问题点做个备忘.
1.首先创建docker network

docker network create --subnet=172.186.18.0/16 nacos-net

2.Docker 启动MySQL 创建数据库名 nacos-config 导入sql文件

docker run -itd -p 3306:3306  --name mysql-master --nacos-net --ip 172.186.18.40 --privileged=true  --restart=always -e MYSQL_ROOT_PASSWORD=123456  -e TZ=Asia/Shanghai mysql

3.创建三个Nacos v2.1.2容器

第一个Nacos容器 nacos01
docker run -itd -e PREFER_HOST_MODE=ip -e MODE=cluster -e NACOS_SERVERS="172.186.18.41:8848 172.186.18.42:8848 172.186.18.43:8848" -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=172.186.18.40 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos-config -e MYSQL_SERVICE_USER=root  -e MYSQL_SERVICE_PASSWORD=123456 -p 18848:8848 -p 19848:9848 -p 19849:9849 --name nacos01 --net nacos-net --ip 172.186.18.41 --restart=always nacos/nacos-server:v2.1.2
第二个Nacos容器 nacos02
docker run -itd -e PREFER_HOST_MODE=ip -e MODE=cluster -e NACOS_SERVERS="172.186.18.41:8848 172.186.18.42:8848 172.186.18.43:8848" -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=172.186.18.40 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos-config -e MYSQL_SERVICE_USER=root  -e MYSQL_SERVICE_PASSWORD=123456 -p 16848:8848 -p 17848:9848 -p 17849:9849 --name nacos02 --net nacos-net --ip 172.186.18.42 --restart=always nacos/nacos-server:v2.1.2
第三个Nacos容器 nacos03
docker run -itd -e PREFER_HOST_MODE=ip -e MODE=cluster -e NACOS_SERVERS="172.186.18.41:8848 172.186.18.42:8848 172.186.18.43:8848" -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=172.186.18.40 -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=nacos-config -e MYSQL_SERVICE_USER=root  -e MYSQL_SERVICE_PASSWORD=123456 -p 14848:8848 -p 15848:9848 -p 15849:9849 --name nacos03 --net nacos-net --ip 172.186.18.43 --restart=always nacos/nacos-server:v2.1.2

4.Docker运行Nginx 代理Nacos集群

为了方便,将docker Nginx里 /etc/nginx/ 全部挂载出来

docker run -itd --name nacos-nginx --net nacos-net -v /home/nacos/nginx/:/etc/nginx/ -p 8848:8848 -p 9848:9848 nginx

划重点 为什么要多加一个 -p 9848:9848 这是一个坑点
在/etc/nginx/conf.d 文件夹下添加 default.conf 配置文件内容为:

upstream lb-nocos {
		server nacos01:8848 weight=1;
		server nacos02:8848 weight=1;
		server nacos03:8848 weight=1;
	}
	server {
		listen  8848;
		server_name  localhost;
		location / {
			root   /usr/share/nginx/html;
			index  index.html index.htm;
		}
		error_page   500 502 503 504  /50x.html;
		location = /50x.html {
			root   /usr/share/nginx/html;
		}
		location /nacos {
			 # 反向代理
			proxy_pass http://lb-nocos;
		}
	}

至此如果访问Nginx代理的Nacos地址会发现Nacos已经显示有三个节点,但是只限看看,配置到项目里还是会启动失败或注册不到。
这里补充上边的坑点
Nacos2.x 版本新增了gRPC的的通信方式,所以Nginx还要代理gRPC的端口, 这个新增的端口是在主端口(8848)基础上,进行偏移量自动生成的,也就是假如主端口是8848, 那么按默认规则就是 8848+1000=9848, 还有一个是8848+1001=9849

端口与主端口偏移量描述
98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
98491001服务端gRPC请求服务端端口,用于服务间同步

因此在Nginx中,还要代理Nacos的9848端口, 注意nginx.conf文件里添加入代理gRPC部分, 与http 部分平级添加。

#这里是http代理部分为了比较放在这里
# http {

# }
# Nacos的gRPC协议配置
stream {
       # 负载均衡配置(TCP长连接配置)
       upstream lb-nocos-tcp{
         server nacos01:9848 weight=1;
         server nacos02:9848 weight=1;
         server nacos03:9848 weight=1;
       }

       server {
          listen 9848;
          proxy_pass lb-nocos-tcp;
       }
}

Nacos界面: http://docker宿主机IP:8848/nacos
在项目配置文件中server-addr=docker宿主机IP:8848 ,这样项目就能正常使用Nginx代理的Nacos集群了 ,一点按钮 咦!服务注册到Nacos集群中了.
我操作的过程中就是没有代理gRPC端口,因此项目没有启动成功。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值