三台Linux服务器,
IP1:192.168.65.200;IP2:192.168.65.201;IP3:192.168.65.202,
MySql_V5.7.24:192.168.65.201
nacos版本:2.0.3
Nacos 官方文档 https://nacos.io/zh-cn/docs/quick-start.html
Nacos下载页面
https://github.com/alibaba/nacos/releases
百度网盘下载:
https://pan.baidu.com/s/1e23DaCHNkyCR2RSjxLwBoA 提取码:zhan
生产推荐服务配置: 4核以上cpu / 4G以上内存 / 100G+ SATA 磁盘 3台
1.提供yum源,安装基础包。
2.提供时间服务地址,做时间同步设置。
3.提供mysql5.7以上数据库,做nacos数据持久化。
4、安装JDK1.8+,建议普通用户安装,nacos也使用普通用户安装。
5、安装依赖
yum install -y zip unzip libcurl lrzsz expat-devel gcc* cpp binutils glibc* zlib* zlib-devel* make automake autoconf libtool zlib* openssl* pcre pcre-devel* openssl-devel* tree nmap sysstat dos2unix telnet bash-completion bash-completion-extras vim nc lsof net-tools rsync ntp* open-sshclients screen nload sysstat wget kernel-devel xmlto nfs-utils rpcbind ncurses-devel openssl-devel unixODBC-devel m4 libX11-devel libXi-devel libXext-devel mesa*
IP1服务器:192.168.65.200
3.1、创建nacos普通用户
[root@CentOS7-0001 /]# useradd -o -u 889 -g 0 nacos
[root@CentOS7-0001 /]# passwd nacos
[root@CentOS7-0001 /]# usermod -a -G root nacos
[root@CentOS7-0001 /]# su - nacos
3.2、 解压nacos到安装目录
[root@CentOS7-0001 /]# cd /srv/nacos/software
[nacos@CentOS7-0001 software]$ tar zxvf nacos-server-2.0.3.tar.gz
3.3 配置mysql数据库
root用户登录MySql,新建nacos用户,并授权。
mysql> create database nacos default character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> grant SELECT, INSERT, UPDATE, DELETE, ALTER, DROP, CREATE,Show view,Create view,Index on nacos.* to 'nacos'@'%' identified by 'nacos';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
MySql5.7密码默认策略必须满足:数字、小写字母、大写字母 、特殊字符、长度至少8位,如果想去掉可在/etc/my.cnf配置文件[mysqld]节点下增加validate_password=off配置,重启数据库。
3.4、执行初始化脚本
l切换到nacos数据库初始化表,脚本nacos-mysql.sql(nacos解压目录下/nacos/conf)
mysql> source nacos-mysql.sql;
MySql初始化表信息:
3.5、 修改Nacos的Mysql的数据库配置
l将application.properties中的myql连接注释去掉,改成对应的数据库地址
说明:
修改nacos的access日志不输出(日志很大,建议关闭)
###If turn on the access log
server.tomcat.accesslog.enabled=false
如果需要支持Prometheus,修改如下
###Metrics for prometheus
management.endpoints.web.exposure.include=*
3.6、启动nacos
[nacos@CentOS7-0001 software]$ cd nacos2.0.3/bin
[nacos@CentOS7-0001 bin]$ startup.sh -m standalone
到此单机模式安装完成,默认端口:8848 默认用户密码:nacos/nacos
地址栏输入:http://192.168.65.100:8848/nacos进入到管理中台
关闭直接执行shutdown.sh命令。
4.1、修改集群配置
修改集群配置/srv/nacos/software/nacos-2.0.3/conf/cluster.conf(如果是单机的可以不用处理)
#打开配置文件所在目录
cd /srv/nacos/software/nacos-2.0.3/conf/
#复制修改集群配置文件名
cp cluster.conf.example cluster.conf
#修改集群配置(以下是3套nacos对应的IP和端口)
vim cluster.conf
172.24.129.200:8848
172.24.129.201:8848
172.24.129.202:8848
4.2、部署其他节点
将已经部署好的IP1服务上nacos拷贝到另外2台机器上
scp -r /srv/nacos/software/nacos-2.0.3 nacos@IP2:/srv/nacos/software/
scp -r /srv/nacos/software/nacos-2.0.3 nacos@IP3:/srv/nacos/software/
4.3、启动服务
无启动/关闭顺序,关闭使用./shutdown.sh,如果是单机启动使用 startup.sh -m standalone
[nacos@CentOS7-0001 software]$ cd /srv/nacos/software/nacos-2.0.3/bin
[nacos@CentOS7-0001 bin]$ ./startup.sh
4.4、至此集群版nacos配置完成
nacos端口 8848 初始账号/密码 nacos/nacos
Chrom或者火狐浏览器访问 http://192.168.65.200:8848/nacos
默认端口:
4.5、微服务调用nacos环境变量配置
所有需要调用nacos的服务器,添加环境变量。标红的地方具体请根据实际nacos信息调整,需要是开发不需要配置,直接加到微服务配置中即可,/home/nacos/.bashrc添加参考如下:
export SPRING_PROFILES_ACTIVE=dev export
SPRING_CLOUD_CONFIG_GROUP=ave_1.1.2 export
SPRING_CLOUD_CONFIG_USERNAME=nacos export
SPRING_CLOUD_CONFIG_PASSWORD=nacos1009 export
SPRING_CLOUD_CONFIG_URI=192.168.65.200:8848192.168.65.201:8848,192.168.65.202:8848 export JASYPT_ENCRYPTOR_PASSWORD=nacos
让环境变量生效 source /home/nacos/.bashrc
服务注册 curl -X POST
‘http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080’
服务发现 curl -X GET
‘http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName’
发布配置 curl -X POST
“http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld”
获取配置 curl -X GET
“http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test”
六、Nacos集群原理说明
6.1、Nacos原理
Nacos 集群采用 Raft 算法实现,用于选举出 Nacos 集群中最重要的 Leader(领导)节点,
每个节点都拥有以下三种角色中的一种,最少三个节点才能组成一个有效的集群。
Leader:领导者,集群中最重要的角色,用于向其他节点下达指令。
Candidate:参选者,参与竞选 Leader 的节点。
Follower:跟随者,用于接收来自 Leader 或者 Candidate 的请求并进行处理。
6.2、Nacos 集群中选举过程
1、当最开始的时候,所有 Nacos 节点都没有启动。角色默认都为 Follower(跟随者)
2. 当第一个节点(192.168.65.200)启动后,节点角色会变为 Candidate(参选者),200 节点征求自己能否成为 Leader(领导者)节点。只有算上自己获得超过半数的选票,这个 Candidate 才能转正为 Leader。因为 200 发起选举投票,但 201/202 两个节点不在线,尽管 200 会投自己一票,但在总 3 票中未过半数,因此无法成为 Leader。因为第一次选举没有产生 Leader,过段时间200同时会再次向其他节点发起投票请求争取其他节点同意,直到同意票过半。
3. 在 Raft 算法中,成为 Leader 的必要条件是某个 Candidate 获得过半选票,如果 201 节点上线,遇到200 再次发起投票。201 投票给 200 节点,201 获得两票超过半数就会成为 Leader,202 节点自动成为 Follower(跟随者)。之后 202 节点上线,因为集群中已有 Leader,因此自动成为 Follower。
5. 当 Leader 节点宕机或停止服务,会在剩余 2 个 Nacos 节点中产生新的 Leader。如下所示202获得两票成为 Leader,201 成为 Follower,200已经下线但角色暂时仍为 Leader。
之后 200 恢复上线,但此时 Nacos 集群已有 Leader 存在,200 自动变为 Follower
说明:对于 Nacos 集群来说,只要 UP 状态节点不少于"1+N/2",集群就能正常运行。但少于“1+N/2”,集群仍然可以提供基本服务,但已无法保证 Nacos 各节点数据一致性。
在 Raft 算法中,只有 Leader 才拥有数据处理与信息分发的权利。因此当微服务启动时,假如注册中心指定为 Follower 节点,则步骤如下:
第一步,Follower 会自动将注册心跳包转给 Leader 节点;
第二步,Leader 节点完成实质的注册登记工作;
第三步,完成注册后向其他 Follower 节点发起“同步注册日志”的指令;
第四步,所有可用的 Follower 在收到指令后进行“ack应答”,通知 Leader 消息已收到;
第五步,当 Leader 接收过半数 Follower 节点的 “ack 应答”后,返回给微服务“注册成功”的响应信息。
此外,对于其他无效的 Follower 节点,Leader 仍会不断重新发送,直到所有 Follower 的状态与 Leader 保持同步。
以上便是 Nacos 节点间的数据同步主体流程