转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。
关于配置中心,之前用过公司自研的配置中心工具,用过Apollo,用过Gitlab和Gogs。最近的项目选了nacos,本文为记录nacos集群非docker方式搭建过程。
2.1 3台服务器都关闭防火墙和selinux
2.2 版本:当前推荐的稳定版本为1.4.2或2.0.1。
2.3 依赖组建:Nacos 依赖 Java 环境来运行(如果是从代码开始构建并运行Nacos,还需要为此配置 Maven环境)。官方要求确保是在以下版本环境中安装使用:
1) 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
2) 64 bit JDK 1.8+;
3) Maven 3.2.x+(本文不需要);
3.1.1 安装MySQL
MySQL安装版本为5.7.20(安装过程省略):
3.1.2 在官网下载nacos安装包,上传到服务器并解压
最近nacos出来了新的版本2.0.2,在2.0.1基础上修复了一些bug,因此下载的 nacos-server-2.0.2.zip这个包。上传到/home目录并解压:
3.1.3 初始化数据库:
?将nacos-server-2.0.2.zip解压后,conf目录下就有初始化sql,将该sql导入数据库。导入之前记得先创建nacos数据库
mysql> CREATE DATABASE `nacos` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> grant all privileges on nacos.* to "nacos"@"%" identified by "nacos@passwd"; #密码自行修改
mysql> flush privileges;
mysql> use nacos;
mysql> source /home/nacos/conf/nacos-mysql.sql;
mysql> show tables;
创建好之后,有这些表:
3.1.4 修改配置文件:
1)修改application.properties文件:
cd /home/nacos/conf
cp application.properties application.properties_bak20210719
修改application.properties文件里面的数据库信息:
第33行:去掉spring.datasource.platform=mysql的注释
第36行:去掉db.num=1的注释
第39行:去掉注释,并将 127.0.0.1:3306/nacos 替换为你的的MySQL数据库IP地址和database名
第40、41行:去掉注释,将默认的数据库用户名和密码nacos改为你真实的的nacos库的用户名和密码
2)修改cluster.conf,配置集群信息:
cd /home/nacos/conf
cp cluster.conf.example cluster.conf
注释掉cluster.conf文件末尾三行192的IP,添加下列内容:
10.0.0.101 #如果不指定端口,就用默认端口8848
10.0.0.102
10.0.0.103
3.1.5 启动服务:
cd /home/nacos/bin/
sh startup.sh #单机版就用 sh startup.sh -m standalone启动
在3个节点都启动之后,/home/nacos/conf/cluster.conf文件会被刷新:
如需停止服务,就执行如下命令:
cd /home/nacos/bin/ && sh shutdown.sh
3.1.6 在10.0.0.102和10.0.0.103重复第4、5步骤,完成nacos安装8、登录三个节点验证,默认账号为nacos/nacos:
http://10.0.0.101:8848/nacos/
http://10.0.0.102:8848/nacos/
http://10.0.0.103:8848/nacos/
如test101节点:
登录后,查看集群节点和元数据信息是否正常:
比如test101的元数据:
验证集群数据同步:
可以在任意节点创建一个新的命名空间,一个test配置文件,然后到剩余两个节点查看是否正常同步。
通过hostname创建集群需要在通过IP创建集群基础上增加/修改以下配置:
3.2.1 在3台服务器添加/etc/hosts解析:
10.0.0.101 test101
10.0.0.102 test102
10.0.0.103 test103
3.2.2 修改配置文件nacos/conf/application.properties时,除了修改数据库信息外,还需要放开第25行?nacos.inetutils.prefer-hostname-over-ip=false的注释,并将false改成true。
3.2.3 修改配置文件nacos/conf/cluster.conf时,集群信息不再用IP,而是改成hostname:
3.2.4 三个节点依次启动应用后,在nacos界面看到集群节点就是hostname了:
注意事项:
1)从IP转向hostname或者从hostname集群转向用IP创建集群,就删除以下目录。原来的数据不会丢失,数据写到MySQL数据库的(生产慎用!):
nacos/data
nacos/logs
nacos/bin/work
nacos/bin/logs
2)用hostname创建集群,如果某一个节点在hosts解析了多个域名,nacos都会读取到,集群节点的元数据就会出现异常,比如我之前在安装另一个环境时遇到的:
编译安装一个nginx,在nginx/conf/domains下添加一个nacos配置文件后启动nginx即可。
如在test101安装一个nginx,配置文件:
[root@test101 conf]# cat domains/www.nacos-test.com
upstream nacos-cluster {
server 10.0.0.101:8848;
server 10.0.0.102:8848;
server 10.0.0.103:8848;
}
server {
listen 80;
server_name www.nacos-test.com;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://nacos-cluster;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
配置好之后,启动nginx,在windows本地C:\Windows\System32\drivers\etc\hosts文件添加一行解析:
10.0.0.101 www.nacos-test.com
即可使用http://www.nacos-test.com/nacos访问了。
有一次测试nacos,在修改nacos配置文件后,提交配置时web界面出现报错:
caused: PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO his_config_info (id,data_id,group_id,tenant_id,app_name,content,md5,src_ip,src_user,gmt_modified,op_type) VALUES(?,?,?,?,?,?,?,?,?,?,?)]; SQL state [HY000]; error code [1114]; The table 'his_config_info' is full; nested exception is java.sql.SQLException: The table 'his_config_info' is full;caused: The table 'his_config_info' is full;
原因:
最后找到原因,是nacos连接的mysql数据库所在的服务器磁盘满了(也可能是表数据量太大)
官网链接:
英文版:https://nacos.io/en-us/docs/quick-start.html
中文版:https://nacos.io/zh-cn/docs/quick-start.html