Nacos集群
采用Raft选举算法构建就集群,至少三台服务器才能组合为有效的集群。
如果嫌麻烦也可以单机启动,见上一章。
集群启动
1.在xxx/nacos/config目录下复制出示例文件,如下
cp cluster.conf.example cluster.conf
2.配置MySQL数据库,执行nacos-mysql.sql文件完成建表工作
3.在application.propertis文件里配置MySQL连接信息
4.打开cluster.conf文件,添加集群的ip和端口
ip1:8848
ip2:8848
ip3:8848
5.在3台Nacos节点上分别执行下面的启动命令
sh xxx/nacos/bin/startup.sh
startup.sh后面不需要加-m参数,默认就是集群启动的方式
Raft算法
-
集群为了保证集群中数据的一致性,其采用了 Raft 算法。这是一种通过对日志进行复制管理来达到一致性的算法。
-
Raft 通过选举 Leader 由 Leader 节点负责管理日志复制来实现各个节点间数据的一致性。
-
Raft 算法不是强一致性算法,是最终一致性算法。
角色 | 作用 |
---|---|
Leader(领导) | 处理客户端写的请求,也可以处理客户端读请求;同时负责日志复制工作,整个集群中只有一个 Leader |
Candidate(参选者) | 当有Leader挂掉或重新启动时,参与竞选Leader节点 |
Follower(跟随者) | 用于接收Leader或者Candidate的请求并进行处理 |
SpringCloud注册服务
1.创建启动引导配置文件 bootstrap.yml
spring:
cloud:
nacos:
config:
file-extension: yml
discovery:
server-addr: '127.0.0.1:8848'
username: nacos
password: nacos
application:
name: nacos-cloud-demo
profiles:
active: dev
2.在nacos的配置列表里添加 nacos-cloud-demo-dev.yml 文件的配置
server:
port: 8080
spring:
cloud:
nacos:
config:
server-addr: '127.0.0.1:8848'
discovery:
server-addr: '127.0.0.1:8848'
username: nacos
password: nacos
application:
name: nacos-cloud-demo
custome:
test: 'zhangsan'
3.配置maven的jar包引用
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<alibaba.version>2.2.5.RELEASE</alibaba.version>
<spring-boot.version>2.3.1.RELEASE</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<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>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
4.配置java类启动后,就可以通过nacos发布改变custome.test内容了
@Controller
@RefreshScope
@RequestMapping("config")
public class ConfigController {
@Value("${custome.test:lisi}")
private String test;
/**
* 标记useLocalCache参数可以通过nacos动态改变,默认是false.
*/
@Value("${useLocalCache:false}")
private boolean useLocalCache;
@RequestMapping(value = "/get", method = GET)
@ResponseBody
public String get() {
return "useLocalCache: "+useLocalCache +"\n\n test:"+test;
}
}