Nacos集群搭建
环境说明:由于资源有限,Nacos集群Demo是在一台虚拟机上完成的。采用Docker搭建。总共3台Nacos实例和1台Mysql实例。为了让四台应用同处一个网段下面。用docker创建一个网络,并将四个应用放到该网络中。Naocs单节点时,默认使用的是内置的数据库Derby。所以单台Nacos可以不用配置外置数据库。而集群Nacos需要保证一致性,所有的nacos使用的配置和数据必须一直,所以需要外置数据库,而Nacos官方推荐Mysql数据库。如果已安装Mysql,则创建nacos数据库,并导入官方建表sql即可。
搭建过程主要参照:docker 部署 nacos 集群
1.创建自定义网卡:
docker network create --driver bridge --subnet 172.18.0.0/16 myNetwork
说明:
--subnet # 指定子网,IP从子网下 1 开始分配,例如该例网段为172.18.X.X,IP从172.18.0.1开始分配
myNetwork # 为创建的网络的名称
2.搭建Mysql数据库
镜像准备:
docker pull mysql
创建容器:
docker run -d \
--network myNetwork --ip 172.18.0.3 \
--name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
// 搭建完毕后需要导入nacos的数据库
nacos 数据库 : nacos/nacos-mysql.sql at develop · alibaba/nacos · GitHub 。
创建一个数据库nacos_config,然后将此sql导入到数据库中执行。详细Sql 也可参见附件A
# 创建数据库
create database nacos_config
use nacos_config
3.Nacos配置文件准备
镜像准备:
docker pull nacos/nacos-server
获取配置文件:
// 先创建一个普通的nacos容器,然后从里面把配置拷到宿主机,便于之后集群时做映射,用同一份配置文件
mkdir -p /usr/local/nacos/conf
mkdir -p /usr/local/nacos/logs/nacos-server-18848
mkdir -p /usr/local/nacos/logs/nacos-server-18849
mkdir -p /usr/local/nacos/logs/nacos-server-18850
docker run -d --name=nacos -p 8848:8848 nacos/nacos-server
docker cp nacos:/home/nacos/conf /usr/local/nacos/conf
docker stop nacos && docker rm nacos
4.Nacos镜像实例1发布
docker run -d \
--network myNetwork --ip 172.18.0.4 --name nacos-server-18848 \
-e MODE=cluster \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.3 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_PORT=8848 \
-e NACOS_SERVERS="172.18.0.4:8848 172.18.0.5:8848 172.18.0.6:8848" \
-e NACOS_SERVER_IP=172.18.0.4 \
-e JVM_XMS=256m -e JVM_XMX=512m \
-v /usr/local/nacos/logs/nacos-server-18848:/home/nacos/logs \
-v /usr/local/nacos/conf:/home/nacos/conf \
-p 18848:8848 \
nacos/nacos-server
配置说明:
--network myNetwork # 将容器挂载在myNetwork网络下
--ip 172.18.0.4 # 设置静态IP,防止容器采用DHCP更改IP
-e MYSQL_SERVICE_DB_NAME=nacos_config # 设置nacos的数据库的库名,这个需要去找nacos提供的sql并导入数据库,否则报错
-e NACOS_SERVERS="172.18.0.4:8848 172.18.0.5:8848 172.18.0.6:8848" # Nacos 集群节点的IP端口
-e NACOS_SERVER_IP=172.18.0.4 # 当前Nacos的IP (最好固定,否则多网卡容易出问题)
总体映射关系如下:
172.18.0.1:18848 -> 172.18.0.4:8848 # 宿主机IP:端口 -> 容器IP:端口
172.18.0.1:18849 -> 172.18.0.5:8848
172.18.0.1:18850 -> 172.18.0.6:8848
172.17.0.1 == 172.18.0.1 #一台机器有多个IP,这两个IP相等的意思是他们是同一台机器
// nacos镜像实例2、3依此类推
docker run -d \
--network myNetwork --ip 172.18.0.5 --name nacos-server-18849 \
-e MODE=cluster \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.3 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_PORT=8848 \
-e NACOS_SERVERS="172.18.0.4:8848 172.18.0.5:8848 172.18.0.6:8848" \
-e NACOS_SERVER_IP=172.18.0.5 \
-e JVM_XMS=256m -e JVM_XMX=512m \
-v /usr/local/nacos/logs/nacos-server-18849:/home/nacos/logs \
-v /usr/local/nacos/conf:/home/nacos/conf \
-p 18849:8848 \
nacos/nacos-server
docker run -d \
--network myNetwork --ip 172.18.0.6 --name nacos-server-18850 \
-e MODE=cluster \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.3 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e NACOS_SERVER_PORT=8848 \
-e NACOS_SERVERS="172.18.0.4:8848 172.18.0.5:8848 172.18.0.6:8848" \
-e NACOS_SERVER_IP=172.18.0.6 \
-e JVM_XMS=256m -e JVM_XMX=512m \
-v /usr/local/nacos/logs/nacos-server-18850:/home/nacos/logs \
-v /usr/local/nacos/conf:/home/nacos/conf \
-p 18850:8848 \
nacos/nacos-server
// 至此,Nacos集群应该就已启动完毕,进入Nacos集群页面可看到有三个节点。
附件:
A. Nacos数据库 sql
/*
* Copyright 1999-2018 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/******************************************/
/* 数据库全名 = nacos_config */
/* 表名称 = config_info */
/******************************************/
CREATE TABLE `config_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(255) DEFAULT NULL,
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
`src_user` text COMMENT 'source user',
`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
`app_name` varchar(128) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
`c_desc` varchar(256) DEFAULT NULL,
`c_use` varchar(64) DEFAULT NULL,
`effect` varchar(64) DEFAULT NULL,
`type` varchar(64) DEFAULT NULL,
`c_schema` text,