集群环境搭建
Nacos单例模式不推荐用在生产环境,所以需要对nacos服务做高可用,而nacos集群正是为了解决这个问题而来的。既然是集群,那么就涉及到数据存储一致性问题,虽然nacos提供了内嵌derby数据库及本地文件等形式,但是不能在跨服务器节点实例间进行数据同步或保持一致,所以,需要一个独立的存储系统,目前nacos1.4.3版本推荐使用的是开源的MySQL数据库。
| Nacos集群构建
| 集群验证及使用
| 一些注意事项
一、Nacos集群构建
1、前置环境准备
1.1 JDK/JRE
因为nacos采用java开发,其需要运行在jdk/jre环境,所以需要先安装jdk/jre,这里推荐1.8+版本以上,具体安装过程请读者自行查阅资料。
1.2 MySQL8.x
正如上面介绍,目前版本的nacos集群本身没有提供能够解决跨服务器节点nacos实例数据一致的支持,其推荐使用开源的MySQL数据库(推荐8+版本),使其作为一个独立的存储系统,供各个nacos共同使用,解决了数据一致性的问题。官方建议MySQL至少是主备形式,也可以是集群模式,做到高可用即可,具体的搭建过程请读者查阅资源自行实现。
2、服务器环境
序号 | IP地址 | 系统类型 | 操作系统 |
1 | 182.168.157.134 | Linux | CentOS7.x |
2 | 182.168.157.136 | Linux | CentOS7.x |
3 | 182.168.157.147 | Linux | CentOS7.x |
3、具体部署过程
以下操作需在三台服务器同步操作:
# 解压缩nacos服务软包
$ tar -xvf nacos-server-1.4.3.tar.gz
$ cd nacos
$ pwd
/home/nacos
# 创建集群配置文件
$ cd /home/nacos/conf
$ cp cluster.conf.example cluster.conf
$ vim cluster.conf
182.168.157.134:8848
182.168.157.136:8848
182.168.157.147:8848
# 外置数据源配置
$ cd /home/nacos/conf
$ vim application.properties
db.num=1
db.url.0=jdbc:mysql://182.168.157.134:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
db.user.0=root
db.password.0=root@test123
# 防火墙端口放行
如果内网服务器开启了防火墙,各nacos节点均须开放8848和7848端口,否则参与nacos集群的各个节点之间无法选举,进而集群选举失败。另外,安装了mysql的服务器若开启了防火墙,也需要开放3306端口,否则无法链接到数据库。
4、nacos服务启动
三台机器同步执行如下命令,以集群模式启动,关闭可使用sh shutdown.sh:
$ cd /home/nacos/bin
$ sh startup.sh
启动完成后,可查看/home/nacos/logs下的nacos.log日志,查看启动是否完成或分析某些问题。若一切正常时,可访问任何一台机器的nacos网站,如:
http://182.168.157.134:8848/nacos/#/login
默认nacos的账号和密码:nacos/nacos,输入登录即可。
集群是否搭建成功,登录nacos后,切换到菜单:集群管理->节点列表,可看到上图所示三台机器的IP和状态信息。
5、开启安全认证
若要为nacos开启安全认证,需要在每个nacos的application.properties配置文件中添加如下内容,添加后需要重启nacos实例才能生效:
nacos.core.auth.enabled=true
注意:
开启密码认证后,服务程序注册及配置时,需要添加用户名和密码才能注册或配置成功。具体的账号和密码,可在nacos ui控制台手动添加和修改,默认账号/密码:nacos/nacos。
二、集群验证及使用
这里我们以springboot服务为例,验证下nacos集群是否可正常注册,具体项目构建不在这里介绍,这里仅罗列一些关键的配置内容,这里构建的服务为provider-service,我们来试试它能否注册到nacos集群中。
1、pom.xml配置
<dependencies>
<!-- service registry -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency></dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
这里选用了nacos spring cloud组件,因为其提供了一些便捷的API和简洁配置。
2、bootstrap.yml配置
spring:
application:
name: provider-service
cloud:
nacos:
### 指定用户名和密码
username: nacos
password: nacos
### 服务注册与发现
discovery:
### 服务注册地址及端口
server-addr: 182.168.157.134:8848,182.168.157.136:8848,182.168.157.147:8848
如上所示,如果不指定username和password时,服务无法注册到nacos,而server-addr指定集群各个服务器nacos实例的IP和端口号,中间使用,号分割即可。
3、启动程序注册
服务程序启动后,若控制台无报错,就可在nacos ui控制台的服务列表中看到服务provider-service已注册成功。
默认情况下,服务注册到nacos的默认空间public中,而所属分组为默认分组DEFAULT_GROUP,即代表服务已注册到集群中。
说明:
当我们关掉当前的leader实例后,其它备选nacos实例会自动晋升为leader,继续对外提供正常服务。
三、一些注意事项
1、MySQL依赖
Nacos1.4.3版本构建的集群环境,其依赖的统一独立存储系统依然选用开源的mysql数据库,这里推荐使用8+版本,另外,考虑到mysql高可用情况,官方建议mysql至少为主备模式或是集群模式。
2、防火墙放行
如果内网服务器开启了防火墙,各nacos节点均须开放8848端口,否则参与nacos集群的各个节点之间无法选举,进而集群选举失败。另外,安装了mysql的服务器若开启了防火墙,也需要开放3306端口,否则无法链接到数据库。