docker搭建nacos集群 实现nginx反向代理

Docker平台实现nacos集群部署及Nginx反向代理

提示:
系统测试平台:Win10系统
▲ 默认docker已经安装成功
版本说明:
Docker版本:19.03.12
Nacos版本: 1.3.2
Mysql版本:8.0.21
Nginx版本:1.19.2


一、文章结构简述

  1. 自己搭建的Naocs集群操作(Nginx(1台) + Nacos(3台) + Mysql(1台)), 所用的组件版本,详见上方的版本说明
  2. Nacos官方说明的搭建方式操作(Naocs(3台) + Mysql(2台,主从)),版本为官方文档中写明的版本

先说自己搭建的,再讲官方的,其中的曲折会如实记录,配置文件会详细贴出!

二、我的Naocs集群

1 docker设置共享文件

为了配置集群的方便性,已经后续官网配置的可行性,此设置务必配置,否则后续Nacos官网配置的文件无法运行!

1.1 本地主机创建共享文件夹

1.2 设置docker共享文件路径

2 pull所需镜像

命令:
   Mysql拉取:
     docker pull mysql
   Naocs拉取:
     docker pull nacos/nacos-server
   Nginx拉取:
     docker pull nginx

验证是否已经pull到本地:

3 自定义network, 后续在运行容器的时使用


简要说明:

/*
* 默认创建的是bridge网络
* 111.111.111.0/24最后的24,
* 代表网段前24位相同,后8位不同, 
* 即该网段范围为:111.111.111.1~111.111.111.254
*/
docker network create --subnet 111.111.111.0/24 anet 

// 检查自定义的anet是否成功
docker network ls

后续用到的是此网段运行容器,也可以选择docker默认的网段运行容器。

4 配置Mysql

4.1 创建Mysql容器

# --net anet 指定采用自定义网络anet
# --network-alias mysql_main 指定网络范围别名,**备后续配置nacos数据库使用**
# MYSQL_ROOT_PASSWORD=root 指定mysql登录密码,必须添加,否则无法启动容器
docker run -d -p 3306:3306 --network anet --network-alias mysql_main -e MYSQL_ROOT_PASSWORD=root --name mysql_main mysql:latest

验证是否启动成功:

在这里插入图片描述

4.2 创建Nacos数据库

Nacos官方数据源sql链接

操作步骤:
  1. 鼠标点击选中文档中的内容
  2. Ctrl + C, 全部复制
  3. 在本地创建一个sql文件,Ctrl + V 粘贴文本
  4. 保存文件,文件后缀为.sql


方法一: 通过第三方链接sql库工具 Navicat链接mysql容器,并导入sql文件,运行即可


创建数据库:

注意,字符集必须时utf8,因为nacos目前只认utf8字符集,utf8mb4也不行

在这里插入图片描述
导入保存的mysql文件:

在这里插入图片描述

方法二: 进入mysql容器,copy本地sql文件到容器内部,运行

# 查看mysql的容器id, 我的是4080fca966f5
docker ps
# copy本地sql文件到容器内部目录, copy到home根目录下
docker cp C:\Users\xxx\Desktop\nacos-sql.sql 4080fca966f5:/home
# 进入mysql容器内部
docker exec -it 4080fca966f5 /bin/bash 

# 登录mysql
mysql -u root -p
# 再输入mysql密码登录进去

# 创建数据库命令
CREATE DATABASE IF NOT EXISTS nacos_config default charset utf8 COLLATE utf8_general_ci;
# 导入sql脚本
use nacos_config
# source后面跟sql脚本的绝对路径
source /home/nacos-sql.sql
# 导入成功后,查验是否成功
show tables

5 配置Nacos

5.1 运行一个示例容器,拷贝配置文件

# 运行命令
docker run -d --name nacos-test nacos/nacos-server:latest
# 查看运行的容器ID, 我的是 5c0a4eb39a94 
docker ps 
# copy配置文件到本地共享目录下,供后续映射本地卷使用
docker cp 5c0a4eb39a94:/home/nacos/conf/application.properties D:\Document\Docker\nacos\conf

注意: 本地卷目录地址,必须是先前配置的docker共享目录,否则运行容器时,无法成功完成映射,谨记!!

5.2 配置Nacos文件

打开copy的配置文件,编辑配置

配置application.properties

# 配置application.properties,在文件的最后位置添加以下内容
spring.datasource.platform=mysql

db.num=1
# mysql_main:3306是mysql容器的网络别名
db.url.0=jdbc:mysql://mysql_main:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
# 启动mysql时设置的密码
db.password=root

5.3 启动三台Nacos实现集群

1. 启动

# 启动nacos-1
docker run -d -p 8847:8848 --network anet --network-alias nacos-1 --name nacos-1 -e TZ="Asia/Shanghai" -e PREFER_HOST_MODE="hostname" -e MODE=cluster -e NACOS_SERVERS="nacos-1:8848 nacos-2:8848 nacos-3:8848" -v D:\Document\Docker\nacos\conf\application.properties:/home/nacos/conf/application.properties nacos/nacos-server:latest
# 启动nacos-2
docker run -d -p 8848:8848 --network anet --network-alias nacos-2 --name nacos-2 -e TZ="Asia/Shanghai" -e PREFER_HOST_MODE="hostname" -e MODE=cluster -e NACOS_SERVERS="nacos-1:8848 nacos-2:8848 nacos-3:8848" -v D:\Document\Docker\nacos\conf\application.properties:/home/nacos/conf/application.properties nacos/nacos-server:latest
# 启动nacos-cluster-123
docker run -d -p 8849:8848 --network anet --network-alias nacos-3 --name nacos-3 -e TZ="Asia/Shanghai" -e PREFER_HOST_MODE="hostname" -e MODE=cluster -e NACOS_SERVERS="nacos-1:8848 nacos-2:8848 nacos-3:8848" -v D:\Document\Docker\nacos\conf\application.properties:/home/nacos/conf/application.properties nacos/nacos-server:latest

3. 启动参数说明

docker run -d \ # 后台运行容器
-p 8847:8848 \ # 主机8847端口映射容器8848端口
--network anet \ # 采用自定义的网络 anet
--network-alias nacos-1 \ # 设置网络别名 nacos-1
--name nacos-1 \ # 容器名称 nacos-1
-e TZ="Asia/Shanghai" \ # 时区环境变量 上海
-e PREFER_HOST_MODE="hostname" \ #首选主机模式
-e MODE=cluster \ # 设置集群模式
-e NACOS_SERVERS="nacos-1:8848 nacos-2:8848 nacos-3:8848" \ # nacos集群地址
-v D:\Document\Docker\nacos\conf\application.properties:/home/nacos/conf/application.properties \ # 本地配置文件映射到nacos配置文件
nacos/nacos-server:latest # 启动的nacos镜像

application.properties配置文件的映射,主要目的是映射我们创建的mysq容器

2. 验证:
因为我们配置的Nacos依赖的数据库是自定义的Mysql容器,所以我们应该先启动Mysql容器,再启动Nacos容器

Nacos默认登录名:naocs, 密码:nacos
此时登录进去之后,发现另外两台nacos容器已经注入:


至此,3台nacos集群+Mysql(主)已经配置成功,接下来,配置nginx

6 配置Nginx

6.1 运行一个示例容器,拷贝配置文件

# 启动
docker run -d --name nginx-test nginx 
# 进入容器
docker exec -it nginx-test /bin/bash 

# 进入容器内部后,找到配置文件路径
cd /etc/nginx/
# 查看nginx.conf配置文件


copy配置文件default.conf到本地docker共享路径:

# copy配置文件default.conf到本地路径下
docker cp 704d92e2e528:/etc/nginx/conf.d/default.conf  D:\Document\Docker\nginx 
# 也可以copy前端html到本地,此映射可有可无
docker cp 704d92e2e528:/usr/share/nginx/html  D:\Document\Docker\nginx\html

6.2 配置集群,实现反向代理

打开我们copy到本地的default.conf文件,编辑并保存:
注意:标有 "#新增" 的说明是在原有的配置文件中新添加的内容。注意添加内容的位置。

#新增,为了演示,故不配置权重
upstream cluster {
	server nacos-1:8848;
	server nacos-2:8848;
	server nacos-3:8848;
}

server {
    listen       80;
    server_name  localhost;
	#新增,配置nginx的日志级别debug
	#error_log /var/log/nginx/debug.log debug;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    #新增,转向集群配置
	location /nacos {
        proxy_pass http://cluster;
    }

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

6.3 启动新的Nginx

# 启动命令
docker run -d -p 80:80 --name nginx --network anet -v D:\Document\Docker\nginx\html:/usr/share/nginx/html -v D:\Document\Docker\nginx\log:/var/log/nginx -v D:\Document\Docker\nginx\default.conf:/etc/nginx/conf.d/default.conf nginx:latest
# 查看启动的nginx容器
docker ps 

启动命令简要:

docker run -d \
-p 80:80 \ # 主机80端口映射容器80端口
--name nginx \ # 容器名称nginx
--network anet \ # 指定网络,anet
-v D:\Document\Docker\nginx\html:/usr/share/nginx/html \ # 映射html到主机
-v D:\Document\Docker\nginx\log:/var/log/nginx \ # 映射日志文件到主机
-v D:\Document\Docker\nginx\default.conf:/etc/nginx/conf.d/default.conf \ # 映射主机配置文件到nginx
nginx:latest 

注意: --network anet必须添加,因为我们之前启动的nacos,mysql都在此网络下,只有同一网络容器之间才能互通!

6.4 验证Nginx配置是否成功

Nginx容器启动成功:

Nginx反向代理成功:

至此,我的Nacos集群配置全部完成,实现 Nginx(1台) + Nacos(3台) + Mysql(1台)的配置。

三 Nacos官方Docker集群

Nacos官方集群文档地址,必读

1 下载官方指定的集群包

git clone https://github.com/nacos-group/nacos-docker.git


注意:clone下的包,必须在docker设置的共享目录下! 我的在D:\Document\Docker目录下,故把clone的文件包放在此目录。

2. 启动nacos集群

因为上面我们自己启动的Nacos集群用到了3306等端口,与官方集群配置有冲突,所以需要先把我们自己搭建的集群容器全部关掉,再用官方的方式启动集群!

# 进入此文件夹,到根目录
cd nacos-docker
# 启动,等待一段时间,因为官方启动的镜像,本地如果没有需要下载
docker-compose -f example/cluster-hostname.yaml up 

3. 验证是否成功

  1. 查看启动日志

  2. 新打开一个cmd, 查看docker启动的容器

  3. 页面访问测试

注意:启动Nacos集群的cmd终端不能关闭!

至此:官方集群配置已经说明完毕,相对来说是个无脑操作 (●’◡’●)

(本文完 !)
如果有涉及到本文内容,必须付此原文链接,并简要说明!

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本教程将介绍如何使用Docker搭建Nacos集群,并通过Nginx进行反向代理实现负载均衡。 准备工作: 1. 安装DockerDocker Compose 2. 准备三台服务器,分别作为Nacos集群的三个节点 步骤一:下载Nacos镜像 在每个服务器上执行以下命令下载Nacos镜像: ``` docker pull nacos/nacos-server:latest ``` 步骤二:创建Docker Compose文件 在任意一台服务器上创建一个文件夹,命名为nacos,进入该文件夹并创建docker-compose.yml文件,内容如下: ``` version: '3' services: nacos1: image: nacos/nacos-server:latest container_name: nacos1 ports: - "8848:8848" environment: - MODE=cluster - NACOS_SERVER_IP=192.168.1.11 restart: always nacos2: image: nacos/nacos-server:latest container_name: nacos2 ports: - "8849:8848" environment: - MODE=cluster - NACOS_SERVER_IP=192.168.1.12 restart: always nacos3: image: nacos/nacos-server:latest container_name: nacos3 ports: - "8850:8848" environment: - MODE=cluster - NACOS_SERVER_IP=192.168.1.13 restart: always ``` 其中,nacos1、nacos2、nacos3分别对应三个节点,分别监听的端口分别为8848、8849、8850。NACOS_SERVER_IP指定了当前节点的IP地址,这个需要根据实际情况进行修改。 步骤三:启动Nacos集群nacos文件夹下执行以下命令启动Nacos集群: ``` docker-compose up -d ``` 执行完毕后,可以通过以下命令查看容器启动情况: ``` docker-compose ps ``` 步骤四:配置Nginx反向代理 在任意一台服务器上安装Nginx,并修改配置文件/etc/nginx/nginx.conf,增加如下内容: ``` http { upstream nacos { server 192.168.1.11:8848; server 192.168.1.12:8849; server 192.168.1.13:8850; } server { listen 80; server_name nacos.example.com; location / { proxy_pass http://nacos; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } ``` 其中,nacos.example.com为Nacos的访问域名,需要根据实际情况进行修改。配置中创建了一个名为nacos的upstream,包括三个节点的IP地址和端口号。在server块中,通过proxy_pass将请求转发到nacos upstream。 重启Nginx生效。 至此,Nacos集群Nginx反向代理已经搭建完成,可以通过访问http://nacos.example.com:80/进行验证。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_函数_

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值