Docker安装Nacos容器并根据Nginx实现负载均衡

 更新时间:2024年01月25日 10:46:33   作者:Java方文山  
本文主要介绍了Docker安装Nacos容器并根据Nginx实现负载均衡,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

安装之前我们需要准备一个mysql,当前安装方式是将数据持久化到数据库中的,这里的部署先是单机模式后面再讲集群模式

一、Nacos单机模式

1、MySQL容器安装

1.1.创建mysql需要的挂载目录

拉取mysql

docker pull mysql:5.7

mysql需要一个my.cnf的配置文件,目前我们还没有所以需要在宿主机上创建一个将该文件放入到目录中并且将我们的sql脚本放入到script文件中

mkdir  -p /mysql/{conf,data,script}

将我们的my.cnf文件放入到conf文件夹下,将sql脚本放入到script文件夹下

1.2.创建并运行mysql容器

为了让我们的容器之间可以相互访问,所以我们创建一个网络

docker network create --subnet 172.18.0.0/16 --gateway 172.18.1.1 net

 现在创建容器就需要为它指定我们的自定义网络 

 docker run \
 --name m1 \
 -v /mysql/conf/my.cnf:/etc/my.cnf \
 -v /mysql/data:/var/lib/mysql \
 -v /mysql/script:/script \
 --privileged=true \
 -e MYSQL_ROOT_PASSWORD=123456 \
 --net net \
 --ip 172.18.0.1 \
 -d mysql/mysql-server:5.7

1.3.创建远程连接用户并执行sql脚本

进入我们的mysql容器进行登录

docker exec -it m1 bash

mysql -uroot -p

创建所需的数据库或者使用远程工具连接创建一下也可以,我这里就一张表就不那么麻烦了

create database nacos;

因为前面做了目录挂载所以容器也会有这个脚本,切换到刚创建的数据库中执行sql

use nacos;
 
source /script/nacos-mysql.sql;

现在查看一下就会有很多的数据表了

最后我们现在需要一个账户进行远程连接所以创建一个账户并赋予权限

grant all on *.* to root@'%' identified by '密码'

没有问题退出后记得重启一下docker restart m1 

2、Nacos容器安装

2.1.创建Nacos并启动

 首先我们需要拉取一个Nacos的镜像

docker pull nacos/nacos-server

运行并启动Nacos

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 8848:8848 \
--name nacos \
--restart=always \
--net net \
--ip 172.18.0.2 \
nacos/nacos-server

 注意:这里的MYSQL打头的配置都是填写我们刚刚m1容器的信息 

2.2.开放防火墙端口

①开放端口

firewall-cmd --zone=public --add-port=8848/tcp --permanent

 ②刷新防火墙

firewall-cmd --reload

2.3.查看数据库有无数据 

首先在浏览器访问一下我们的Nacos,查看是否可以访问

 如果可以访问再查看相应的数据库,现在是没有数据的

我们在nacos配置中心随便创作一个数据再来查看一下就会有数据了,说明我们的nacos已经完全生效了。

二、Nacos集群模式

先将我们刚刚所创建的nacos容器给删除掉

docker rm -f nacos

1.创建集群Nacos

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.18.0.3:8848 172.18.0.4:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-p 8848:8848 \
--name nacos01 \
--restart=always \
--net net \
--ip 172.18.0.2 \
nacos/nacos-server

 指定Nacos为集群模式cluster并设置除自己以外的Nacos地址

这时候我们访问nacos可以看到这里的模式也变成了cluster

 现在我们将剩下的两台nacos容器搞出来

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.18.0.2:8848 172.18.0.4:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
--name nacos02 \
--restart=always \
--net net \
--ip 172.18.0.3 \
nacos/nacos-server
docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.18.0.2:8848 172.18.0.3:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
--name nacos03 \
--restart=always \
--net net \
--ip 172.18.0.4 \
nacos/nacos-server

看似我有三台nacos容器实际上我们只有一台,因为只有一台进行了端口映射 

2.负载均衡Nacos 

创建nginx的配置文件目录并将配置文件放入

 mkdir -p  /soft/nginx/conf.d

upstream nacosList {
    server nacos01:8848 weight=1;
    server nacos02:8848 weight=2;
    server nacos03:8848 weight=2;
}

server {

    listen  80;
    server_name  www.zkingedu.com;

    location / {
        root   /etc/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://nacosList;
    }

}

创建nginx容器

docker run -itd \
--name nginx \
-v /soft/nginx/conf.d:/etc/nginx/conf.d \
-p 80:80 \
--net net \
--ip 172.18.0.5 \
nginx

现在我们访问一下看看

可以看到我们去掉了端口号8848,证明我们现在是通过nginx负载均衡进行访问的 

三、注意事项

我们在发布配置的时候可能会出现以下情况

建表SQL语句应查看对应Nacos Servertag版本,我用的是1.4.0的SQL所以产生问题。

按照官方文档重新建表,或直接补全列: 

-- config_info 表
alter table config_info add encrypted_data_key varchar(255);

-- his_config_info 表
alter table his_config_info add encrypted_data_key varchar(255);

 到此这篇关于Docker安装Nacos容器并根据Nginx实现负载均衡的文章就介绍到这了,更多相关Docker Nacos负载均衡内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • k8s官方镜像代理加速方式

    k8s官方镜像代理加速方式

    这篇文章主要介绍了k8s官方镜像代理加速方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 如何解决docker logs无法实时输出脚本打印的内容

    如何解决docker logs无法实时输出脚本打印的内容

    这篇文章主要介绍了如何解决docker logs无法实时输出脚本打印的内容问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Docker 网络模式及配置方式

    Docker 网络模式及配置方式

    这篇文章主要介绍了Docker 网络模式及配置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Docker安装Mosquitto的实现示例

    Docker安装Mosquitto的实现示例

    mosquitto是一个常用的MQTT应用服务,本文主要介绍了Docker安装Mosquitto的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 详解CentOS 7 : Docker私有仓库搭建和使用

    详解CentOS 7 : Docker私有仓库搭建和使用

    本篇文章主要介绍了详解CentOS 7 : Docker私有仓库搭建和使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 如何使用Docker恢复Mysql8备份的Data数据

    如何使用Docker恢复Mysql8备份的Data数据

    这篇文章主要介绍了使用Docker恢复Mysql8备份的Data数据,下面小编给大家讲解下操作方法,对Docker恢复Mysql数据备份相关知识感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • Docker compose安装部署创建自定义网络使用举例

    Docker compose安装部署创建自定义网络使用举例

    这篇文章主要为大家介绍了Docker compose安装部署创建自定义网络使用举例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 在CentOS 7 上为docker配置端口转发以兼容firewall的解决方法

    在CentOS 7 上为docker配置端口转发以兼容firewall的解决方法

    这篇文章主要介绍了在CentOS 7 上为docker配置端口转发以兼容firewall的解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • docker 创建容器时指定容器ip的实现示例

    docker 创建容器时指定容器ip的实现示例

    在实际部署中,我们需要指定容器ip,本文主要介绍了docker 创建容器时指定容器ip,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Docker下安装zookeeper(单机和集群)

    Docker下安装zookeeper(单机和集群)

    这篇文章主要介绍了Docker下安装zookeeper(单机和集群),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论