Bootstrap

【Docker】Nacos的单机部署及集群部署

一、Nacos的介绍

Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  1. 动态服务发现:Nacos支持DNS与RPC服务发现,提供原生SDK、OpenAPI等多种服务注册方式和DNS、HTTP与API等多种服务发现方式。
  2. 服务健康监测:Nacos提供对服务的实时健康检查,阻止向不健康的主机或服务实例发送请求。
  3. 动态配置服务:Nacos提供配置统一管理功能,能够以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
  4. 动态DNS服务:Nacos支持动态DNS服务权重路由,能够实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。
  5. 服务及其元数据管理:Nacos支持从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的SLA以及最首要的metrics统计数据。

二、单机部署

1、准备

开启docker

systemctl start docker

创建目录

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

my.cnf配置文件从主机拖到conf文件夹中

my.cnf

[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8
 
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
 
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
# default: sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# modeified: 
sql_mode= STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_allowed_packet=10M
default-time_zone='+8:00'
default_authentication_plugin=mysql_native_password

创建一个mysql容器:m1,自动连接了默认网络中的网桥(Bridge)

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

2、数据准备

登录MySQL容器

进入:

docker exec -it m1 bash

登入mysql:

mysql -uroot -p

输入设置好的密码:123456

创建一个数据库存放数据:

create database nacos;

使用数据库:

use nacos;

对应目录放入我们的数据脚本

执行指定路径中sql的脚本:

source  /script/nacos-mysql.sql;  

之后查看数据表:

show tables; 

进行用户的授权及密码设置:

grant all on *.* to root@'%' identified by '123456'; 

重启mysql :

docker restart m1

3、下载Nacos镜像

下载Nacos镜像

docker pull nacos/nacos-server

查看m1容器信息:

docker inspect m1

找到对应的IP,后面需要

4、开发访问端口

查看防火墙列表的端口:
 

firewall-cmd --zone=public --list-ports

开放端口8848:
 

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

更新防火墙端口:
 

firewall-cmd --reload

5、配置

创建并且运行nacos,及配置MySQL中的用户密码及m1的IP和端口映射

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.17.0.2 \
-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 \
nacos/nacos-server

可以使用命令查看该容器是否运行成功:

docker logs nacos

然后就可以进行访问了

三、集群部署

1、创建容器

创建自定义网络

docker network create --subnet 172.18.0.0/16  mode

将自定义网络和网桥连接

docker network connect mode m1

查看m1容器

docker inspect m1

2、配置

创建并且运行nacos01并进行配置

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.18.0.102:8848  172.18.0.103:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=m1 \
-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 \
--net  mode \
--ip  172.18.0.101 \
--restart=always \
nacos/nacos-server

创建多个并进行配置

nacos02 

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.18.0.101:8848  172.18.0.103:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=m1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
--name nacos02 \
--net  mode \
--ip  172.18.0.102 \
--restart=always \
nacos/nacos-server

nacos03

docker run -itd \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_SERVERS="172.18.0.101:8848  172.18.0.102:8848" \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=m1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
--name nacos03 \
--net  mode \
--ip  172.18.0.103 \
--restart=always \
nacos/nacos-server

可查看节点

3、负载均衡

在mode目录中创建目录:

mkdir -p nginx/conf.d

在conf.d目录中创建并且编辑配置文件default.conf

编辑

vim default.conf

集群nacos01,nacos02,nacos03的容器IP

#服务器的集群
upstream nacosList {  
    server nacos01:8848 weight=1; 
    server nacos02:8848 weight=1; 
    server nacos03:8848 weight=1; 
} 
 
server {
 
    listen  80;
    server_name  www.wfzldr.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;
    }
 
}

创建并且运行负载均衡的容器

docker run -itd \

--name nginx \

-v /root/mode/nginx/conf.d:/etc/nginx/conf.d \

-p 80:80 \

--net mode \

nginx

ip地址/nacos即可访问实现负载均衡

;