Nacos 集群部署
关于nacos 集群部署,网上的示例往往不全或不可用,而官方的教程太简单了。官方也提供了一个 docker + nacos 的伪集群的 部署示例。但毕竟是 伪, 不能实际生产使用。
全网就几乎就没有一个 完整的教程???!!!
怎么办呢? 自己动手吧。
准备数据库
数据库用了 mysql, 其实nacos 也是支持mysql 主从集群的,不过简单起见, 这里就只用了一个 mysql 节点。 mysql 是需要自己事先安装 配置的(需要执行 nacos 提供的 conf/nacos-mysql.sql 脚本)
这个其实很简单。schema 名字不重要,重要的是 执行 nacos 的sql 脚本就好了。
准备nacos
一般集群需要至少3个节点。我们先准备3台机器: 192.168.11.200、192.168.11.196、192.168.11.126
nacos 的默认服务端口是 8848 ,但是由于 我们的机器上还有其他nacos 服务正在作用,所以, 我们这里把端口改为 8748, 如下:
192.168.11.200:8748
192.168.11.196:8748
192.168.11.126:8748
我们需要nacos-server 的安装包, 1.0.0.zip 版本并没有 集群的展示功能, 我们这里使用 nacos-server-1.1.0.zip, 这个也是最新的 nacos server 安装包。 (从github 上下载非常耗时, 最好把这个安装包 共享起来)
安装目录是 /app, 没有的话, 需要自己创建。 将nacos-server-1.1.0.zip 上传到 /app 目录, 然后进入cd /app,
执行下面的 shell (需要3个节点上都要执行!!):
unzip nacos-server-1.1.0.zip -d nacos-cluster && cd nacos-cluster/nacos && cp conf/cluster.conf.example conf/cluster.conf &&
echo "192.168.11.200:8748
192.168.11.196:8748
192.168.11.126:8748" > conf/cluster.conf && sed -i s/server\.port=8848/server\.port=8748/ conf/application.properties && echo "
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.11.200:3316/test3?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456" >> conf/application.properties && sh bin/startup.sh
上面的脚本,需要按照情况修改, 主要是其中的 端口、 数据库配置。 上面的脚本 包括了 启动 nacos。
如果 3个节点都能正常访问了,那么就表明集群部署基本正常了,如果有问题, 那么可以查看nacos 的日志, 位于 logs目录, 主要 是下面几个日志文件:
/app/nacos-cluster/nacos/start.out
/app/nacos-cluster/nacos/nacos.out
/app/nacos-cluster/nacos/naming-raft.out
观察集群
3个节点都正常启动之后, 可以分别登录 各个web 界面查看 集群的节点、健康状态:
http://192.168.11.126:8748/nacos/#/clusterManagement?dataId=&group=&appName=&namespace=&serverId=
http://192.168.11.196:8748/nacos/#/clusterManagement?dataId=&group=&appName=&namespace=&serverId=
http://192.168.11.200:8748/nacos/#/clusterManagement?dataId=&group=&appName=&namespace=&serverId=
最开始的时候, 所有节点都没有启动, 集群任期 应该都是0

(看到这个图片, 说明 3个节点都正常启动了, 否则请检查是否有步骤遗漏了!)
如果我们只启动一个节点,那么它的状态会是 candidate:

处于candidate 状态的 集群会一直进行选举, 从而任期也会一直增加:

最先启动的节点, 一般就是 leader , 但这个时候还只是 准leader,需要至少多数节点都启动了, 才能做一个决断。如下面的 126:

在没有leader 产生之前, 集群会进行多次的选举。 每次的选举 任期会加1。 从而 最后会进行大概 2次的选举, 从而 126 的任期是2;最后加入的 节点已经没有了选举的机会, 故直接作为 follower 加入, 其任期默认是0;
如果某一个或某几个节点都挂了, 只要剩余节点不少于 1+ 1/N ,那么 集群仍然能够正常运行; 挂掉的节点重新加入集群后,如果此时集群已经有了leader, 那么它的角色一般是follower, 它的任期是0( 就跟一个新节点一样的);
当然,如果集群的剩余节点少于 1+ 1/N,集群仍然是可以工作的,只是已经无法保证 高可用了。
任期低节点一般是没有资格参与选举的,leader 一般是在 任期高的几个节点之中产生(至少会有2个节点)。

如果把126 的nacos 杀掉,我们会观察到 多个leader,其实这个时候的 126 已经死了, 至少集群保留它之前的状态。同时 集群会重新选举,如下,我们看到200 被选举为 leader,126 的状态被保留(其实他已经死掉了), 同时任期 +1:

在已经存在leader 的集群中,如果挂掉的节点不是 leader,那么不会重新进行选举。 挂掉的节点虽不可用(其状态会一直保留直到重启), 不会影响集群的使用。
如果我们又把 126 启动起来, 那么它的角色会是 follower,任期是0:

我们再把 200 的nacos 杀掉, 那么又会产生新的 leader:

Nacos + Docker 集群
nacos 官方 https://hub.docker.com/r/nacos/nacos-server 有提供docker 的镜像:nacos/nacos-server,我们拿来用即可:
docker run --name nacos --net=host --env MODE=cluster --env NACOS_SERVERS="192.168.11.126:8748 192.168.11.196:8748 192.168.11.200:8748" --env MYSQL_DATABASE_NUM=1 --env MYSQL_MASTER_SERVICE_HOST=192.168.11.200 --env MYSQL_MASTER_SERVICE_PORT=3316 --env MYSQL_MASTER_SERVICE_DB_NAME=test3 --env MYSQL_MASTER_SERVICE_USER=root --env MYSQL_MASTER_SERVICE_PASSWORD=123456 --env NACOS_SERVER_PORT=8848 -d -p 8748:8848 nacos/nacos-server
上面的语句即启动了 docker nacos ,同时通过env 设置了所有的相关的参数 比如数据库、端口等。 特别需要注意的是, 网络模式是 host,也就是使用直接宿主机的网络, 这个是最简单的nacos +docker 集群,否则我们可能需要做比较多的docker网络配置。 另外注意, --net=host 应该放在命令的前面, 不能放最后, 否则不会生效。
NACOS_SERVERS 是所有的节点+端口 配置,目前只能写死, nacos 不提供自动扩容等功能。
如果配置有误,我们只能删除nacos 容器,重新配置 : docker stop nacos && docker rm nacos 。
3个节点都执行上面的命令之后,我们的nacos 集群就做好了!
通过Nginx配置真正的集群
上面的集群,虽然可用, 但仍不是真正的集群, 我们一般不会这么用。官方推荐,nacos集群一般有3种方式:
http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。
http://VIP:port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。
http://nacos.com:port/openAPI 域名 + VIP模式,可读性好,而且换ip方便,推荐模式
域名的方式比较麻烦,暂不考虑。vip 的方式也稍稍麻烦。 这里我使用 nginx 的方式。 nginx 做集群很简单, 只要 nginx.conf 做如下的配置就好了:
upstream nacos_server {
server 192.168.11.200:8748;
server 192.168.11.196:8748;
server 192.168.11.126:8748;
}
server {
listen 8648;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://nacos_server;
index index.html index.htm;
}
}
8648 的nginx 提供的 nacos 服务接口,可以自定义。 我们访问
192.168.11.139:8648/nacos/#/clusterManagement?dataId=&group=&appName=&namespace=&serverId=
,就可以看到:

我们可以简单测试一下,杀掉 126 或 196 上的 nacos ,看服务是否正常。 后面,我们对微服务提供nacos服务的时候,只要配置这个nginx 端口就好了!!
其他注意事项
nacos 默认是需要登录, 有些麻烦,开发测试的时候,我们可以把它关闭,怎么办呢? 修改 conf/application.properties 的相关配置即可:
### turn off security
spring.security.enabled=false
management.security=false
security.basic.enabled=false
nacos.security.ignore.urls=/**
#nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
另外,我们发现 nacos 的日志实在增长太快, 可以tomcat.accesslog 关闭:
server.tomcat.accesslog.enabled=true – 改为false
另外,我们可以把 日志级别调整一下,修改 conf/nacos-logback.xml 即可。
参考:
https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
https://hub.docker.com/r/nacos/nacos-server
Nacos 集群部署的更多相关文章
- Spring Cloud Alibaba | Nacos集群部署
目录 Spring Cloud Alibaba | Nacos集群部署 1. Nacos支持三种部署模式 2. 集群模式下部署Nacos 2.1 架构图 2.2 下载源码或者安装包 2.3 配置集群配 ...
- Nacos集群部署:
Nacos集群部署: 官网: https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html 1: 下载 Nacos1.2.0 链接:http ...
- Nacos(九):Nacos集群部署和遇到的问题
前言 前面的系列文章已经介绍了Nacos的如何接入SpringCloud,以及Nacos的基本使用方式 之前的文章中都是基于单机模式部署进行讲解的,本文对Nacos的集群部署方式进行说明 环境准备 J ...
- nacos集群部署
对于nacos的集群部署,建议大家参考nacos官网进行,地址:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html 下面是我自己部署na ...
- docker nacos 集群部署
1.准备机器3台 192.168.101.14 192.168.101.15 192.168.101.16 2.初始化sql(如果我们要搭建集群的话,那么肯定是不能用内嵌的数据库,不然数据无法共享.集 ...
- Spring Cloud Alibaba基础教程:Nacos的集群部署
继续说说生产环境的Nacos搭建,通过上一篇<Spring Cloud Alibaba基础教程:Nacos的数据持久化>的介绍,我们已经知道Nacos对配置信息的存储原理,在集群搭建的时候 ...
- linux下nacos的1.1.3版本集群部署
windows单机版参见0.9.0.RELEASE版本的spring cloud alibaba nacos实例 ,linux集群版我们还是用上次下载的nacos压缩包,通过rz -y上传到wlf用户 ...
- nacos 1.1.x 集群部署笔记
Nacos 是什么? https://nacos.io/zh-cn/docs/what-is-nacos.html 服务(Service)是 Nacos 世界的一等公民.Nacos 支持几乎所有主流类 ...
- 【Nacos】本地集群部署
关于Nacos已经展开了四篇入门文章: 初探Nacos(一)-- 单机模式启动 初探Nacos(二)-- SpringCloud使用Nacos的服务注册与发现 初探Nacos(三)-- SpringB ...
随机推荐
- 【Android - 控件】之MD - RecyclerView的使用
RecyclerView是Android 5.0新特性——Material Design中的一个控件,它将ListView.GridView整合到一起,可以使用极少的代码在ListView.GridV ...
- Django总结目录
Django总结目录 1. django框架简介及自定义简易版框架 2. 路由层 3. 视图层 4. 模板层 5. 模型层 5.1 基本操作 5.2 多表操作 5.3 进阶相关 6. 组件 6.1 a ...
- int main (int argc, const char * argv[0]) 中参数的含义;指针数组和数组指针
恩,有的编译器初始化时候会产生这样的参数 argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名 1. 几种C++ 常见的参数种类 int main(void); in ...
- X86架构CPU常识(主频,外频,FSB,cpu位和字长,倍频系数,缓存,CPU扩展指令集,CPU内核和I/O工作电压,制造工艺,指令集,超流水线与超标量)
1.主频 主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度. CPU的主频=外频×倍频系数.很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差. ...
- 环境变量PATH、cp命令、mv命令、文档查看cat/more/less/head/tail 各个命令的使用介绍
第2周第2次课(3月27日) 课程内容: 2.10 环境变量PATH2.11 cp命令2.12 mv命令2.13 文档查看cat/more/less/head/tail 2.10 环境变量PATH P ...
- 虚拟机中linux系统常用命令解释及vim3种命令模式详解
1.man man 加上一个命令可以打开此命令具体使用方法,方便我们更好的了解新命令的使用(下图为我输入命令“man ls”虚拟机界面) 2.cd 切换目录 cd ..(返回上一级目录) cd ~( ...
- 走近深度学习,认识MoXing:初识华为云ModelArts的王牌利器 — MoXing
[摘要] 本文为MoXing系列文章第一篇,主要介绍什么是MoXing,MoXing API的优势以及MoXing程序的基本结构. MoXing的概念 MoXing是华为云深度学习服务提供的网络模型开 ...
- UILabel(label控件)的详细使用及特殊效果
转自:http://blog.sina.com.cn/s/blog_af73e7a70101ahlm.html UILabel *label = [[UILabelalloc] initWithFra ...
- IDEA2019.3安装和激活
1.JetBrain网站下载它旗舰版,有zip也有exe, 我下载的zip包,752M 2.解压到自己系统目录下,比如: D:\ideaIU-2019.3.win 3.去导bin目录下,将idea6 ...
- 支持100+业务线、累计发布17万次|宜信容器云的A点与B点(分享实录)
宜信公司从2018年初开始建设容器云,至今,容器云的常用基本功能已经趋于完善,主要包括服务管理.应用商店.Nginx配置.存储管理.CI/CD.权限管理等,支持100+业务线.3500+的容器运行.伴 ...