一、Nacos的介绍
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- 动态服务发现:Nacos支持DNS与RPC服务发现,提供原生SDK、OpenAPI等多种服务注册方式和DNS、HTTP与API等多种服务发现方式。
- 服务健康监测:Nacos提供对服务的实时健康检查,阻止向不健康的主机或服务实例发送请求。
- 动态配置服务:Nacos提供配置统一管理功能,能够以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
- 动态DNS服务:Nacos支持动态DNS服务权重路由,能够实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。
- 服务及其元数据管理: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=0log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pidinit_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即可访问实现负载均衡