一、nacos功能
- 服务注册:
当一个服务启动时,它会将自己的基本信息(如服务名、IP地址、端口号)注册到Nacos服务器中。服务提供者通过Nacos客户端将服务注册信息发送给Nacos服务器,并将其保存在服务注册表中。如果服务是集群部署的,则每个服务的实例都会记录在列表中 - 服务心跳:
Nacos客户端进行服务注册时,会定期发送心跳信号,告诉服务端该服务实例还活着,防止被剔除。默认每5秒发送一次心跳,通过参数可以调整心跳间隔时间 - 服务同步:
Nacos服务器集群间通过同步任务保持数据一致性,确保每个节点上的数据一致。权威节点负责同步和广播数据给其他节点,以保证整个集群数据的一致性 - 服务发现:
服务消费者可以通过Nacos获取服务提供者的实例列表,并根据负载均衡策略选择一个实例进行调用。服务消费者启动时,会从Nacos服务器获取服务提供者的实例列表,并存放在本地内存中,根据负载策略选择一个实例进行调用 - 服务健康检查:
Nacos服务器会定时对客户端进行健康检查,确保服务实例的健康状态。如果超过15s未收到心跳且健康检查失败,Nacos服务器会标记实例为不健康,并在超过30秒没有收到心跳后剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)
二、nacos server搭建
版本对应
1、下载
wget https://github.com/alibaba/nacos/releases/download/2.1.0/nacos-server-2.1.0.tar.gz
2、解压
tar -zxvf nacos-server-2.1.0.tar.gz
3、进入nacos/bin单机启动
./startup.sh -m standalone
4、查看启动日志,查看访问地址
tail -200f /opt/app/software/nacos/logs/start.out
访问http://172.28.202.20:8848/nacos/index.html
PS:如果不能访问,将ip换成外网ip
如果用的阿里云服务器,还需要配置安全组,开发端口
5、访问,默认账号密码是nocas/nocas
登录以后
单机版nacos搭建完成
三、集群nacos搭建
准备3个nacos
将单机的nacos复制几份
mv nacos nacos8848
mv nacos nacos8850
mv nacos nacos8852
1)安装jdk
2)安装配置mysql的数据库表
新增nacos数据库
CREATE DATABASE IF NOT EXISTS nacos;
用数据库连接工具连接数据库,下载nacos的sql执行/opt/app/software/nacos8848/conf/nacos-mysql.sql
3)安装配置maven
4)修改数据源用mysql
修改config/application.properties,放开mysql配置
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=密码
5)修改集群节点配置
将conf\cluster.conf.example改为cluster.conf,添加节点配置
mv cluster.conf.example cluster.conf
修改cluster.conf
# ip:port
172.28.202.20:8848
172.28.202.20:8850
172.28.202.20:8852
启动nacos8848
如果启动报错内存不足,修改startup.sh,将值改小
访问查看,集群配置已经有了
将另外两个配置也配好,可以复制过去,修改端口
cd /opt/app/software/nacos8848/conf
cp application.properties ../../nacos8850/conf/
cp application.properties ../../nacos8852/conf/
cp cluster.conf ../../nacos8850/conf/
cp cluster.conf ../../nacos8852/conf/
cd ../bin/
cp startup.sh ../../nacos8850/bin/
cp startup.sh ../../nacos8852/bin/
# 修改启动端口
vim /opt/app/software/nacos8850/conf/application.properties
vim /opt/app/software/nacos8852/conf/application.properties
启动三个nacos
PS:如果出现后启动的把先启动的挤挂的情况,应该是服务器内存不够了,修改startup.sh,将值改小
6)nginx反向代理
安装nginx
yum install epel-release
yum install nginx
配置反向代理
upstream nacoscluster {
server 127.0.0.1:8850;
server 127.0.0.1:8852;
}
server {
listen 8847;
server_name localhost;
location /nacos/{
proxy_pass http://nacoscluster/nacos/;
}
}
启动nginx
systemctl restart nginx
通过nginx监听的8847端口访问nacos
集群nacos搭建完成
四、nacos client搭建
父pom新增依赖
<properties>
<spring.cloud.version>Hoxton.SR12</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.9.RELEASE</spring.cloud.alibaba.version>
<spring.boot.version>2.3.12.RELEASE</spring.boot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
新增pom依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
新增yaml配置application.yml
server:
port: 8021
spring:
application:
name: server-nacos
cloud:
nacos:
# nacos server的地址
server-addr: nacos-server的ip:8848
discovery:
username: nacos
password: nacos
# 命名空间
namespace: public
启动服务,查看nacos地址,服务已经注册上去了
client配置
github配置地址
配置项 | Key | 默认值 | 说明 |
---|---|---|---|
服务端地址 | spring.cloud.nacos.discovery.server-addr | 无 | Nacos Server 启动监听的ip地址和端口 |
服务名 | spring.cloud.nacos.discovery.service | ${spring.application.name} | 给当前的服务命名 |
服务分组 | spring.cloud.nacos.discovery.group | DEFAULT_GROUP | 设置服务所处的分组 |
权重 | spring.cloud.nacos.discovery.weight | 1 | 取值范围 1 到 100,数值越大,权重越大 |
网卡名 | spring.cloud.nacos.discovery.network-interface | 无 | 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址 |
注册的IP地址 | spring.cloud.nacos.discovery.ip | 无 | 优先级最高 |
注册的端口 | spring.cloud.nacos.discovery.port | -1 | 默认情况下不用配置,会自动探测 |
命名空间 | spring.cloud.nacos.discovery.namespace | 无 | 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 |
AccessKey | spring.cloud.nacos.discovery.access-key | 无 | 当要上阿里云时,阿里云上面的一个云账号名 |
SecretKey | spring.cloud.nacos.discovery.secret-key | 无 | 当要上阿里云时,阿里云上面的一个云账号密码 |
Metadata | spring.cloud.nacos.discovery.metadata | 无 | 使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息 |
日志文件名 | spring.cloud.nacos.discovery.log-name | 无 | |
集群 | spring.cloud.nacos.discovery.cluster-name | DEFAULT | 配置成Nacos集群名称 |
接入点 | spring.cloud.nacos.discovery.enpoint | UTF-8 | 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 |
是否集成Ribbon | ribbon.nacos.enabled | true | 一般都设置成true即可 |
是否开启Nacos Watch | spring.cloud.nacos.discovery.watch.enabled | true | 可以设置成false来关闭 watch |
注册的IP地址类型 | spring.cloud.nacos.discovery.ip-type | IPv4 | 可以配置IPv4和IPv6两种类型 |