文章目录
Alibaba微服务组件Nacos注册中心
1.什么是nacos
注册中心+配置中心+服务管理 平台
注册中心演变过程
管理所有微服务、解决微服务之问调用关系错综复杂、难以维护的问题;
注册中心核心功能
Nacos discovery
服务注册:Nacos Client会通过发送REST请求的方式向Nacos server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Sevet接收到注册请求后,就会把这些元款据信息存储在一个双层的内存Map中。
服务心跳︰在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳
服务同步: Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。leader raft
服务发现: 服务消费者(Nlacos Cient)在调用服务提供者的服务时,会发送一个REST请求给Nacos Sever,获取上面注册的服务清单,并且缓行在Nacos Client本地,同时会在Nacs cient本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存
服务健康检查: Nacos Server会开启一个定时任务用来检查注册服务实例的狸康情况,对于超过15s没有收到客户诟心跳的实例会将它的ealty属性置为lase(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)
主流的注册中心区别
CAP C 一致性 A 可用性 P 分区容错性
Nacos Server部署
下载地址https://github.com/alibaba/nacos/releases
修改bin\startup.sh改成单机启动(默认集群)
双击startup.cmd
访问地址nacos首页账号密码都为nacos
Nacos client搭建
复制模块order 和 stock
取名为order-nacos和stock -nacos
父工程添加子模块
<module>order-nacos</module>
<module>stock-nacos</module>
order-nacos和stock -nacos
1.引入依赖
<!-- nacos服务注册发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.配置文件(order-nacos)
server:
port: 8020
#应用名称 nacos会将该名称当作服务名称
spring:
application:
name: order-service
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
username: nacos
password: nacos
namespace: public
配置文件(stock -nacos)
server:
port: 8021
#应用名称 nacos会将该名称当作服务名称
spring:
application:
name: stock-service
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
username: nacos
password: nacos
namespace: public
主启动类 注解
@EnableDiscoveryClient
可加可不加
启动 查看nacos发现两个服务列表
(order-nacos)更改controller
String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
访问 localhost:8020/order/add 报错
(order-nacos)主启动类加上注解@LoadBalanced
默认轮询
@SpringBootApplication
//@EnableDiscoveryClient
public class OrderNacosApplication {
public static void main(String[] args) {
SpringApplication.run(OrderNacosApplication.class,args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate=builder.build();
return restTemplate;
}
}
再次访问localhost:8020/order/add 成功回显
get一个新技能
启动一个完全一样的项目,但端口号不一样
点击apply->ok
stock-nacos控制层改变
@RestController
@RequestMapping("/stock")
public class StockController {
@Value("${server.port}")
String port;
@RequestMapping("/reduct")
public String reduct(){
System.out.println("扣减库存");
return "扣减库存"+port;
}
}
重新启动 8020 8021 8022
再次访问localhost:8020/order/add
发现 回显的端口号8021 8022重复跳转(负载均衡的轮询机制 ribbon)
Nacos 管理界面详细介绍
命名空间的概念
namespace: public
pro环境 dev环境 分隔开来
分组的概念和命名空间差不多
雪崩保护-就是保护阈值
0-1之间 百分比
ephemeral: false # 永久实例 默认是true 临时实例
# 哪怕宕机了也不会删除实例
健康实例 — 不健康实例
健康实例数/总实例数 < 保护阈值
1/2 < 0.6 那么就用把挂了的机子先给它用,防止服务雪崩
权重 和负载均衡器有关 越大让别人访问它越多
注册中心配置项详解
spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
namespace: public
# namespace: public #相同特征的服务进行归类分组管理
# ephemeral: false # 默认=true(临时实例) ―当服务宕机超过心跳就会将实例剔除掉 #永久实例―哪怕宕机了也不会删除实例当服务宕机永远不会剔除掉
#service: 默认取${spring.application.name},也可以通过该选项配置
#group:默认DEFAULT_GROUP更细的相同特征的服务进行归类分组管理
#weight:通常要结合安装权重的负载均衡策略,权重越高分配的流量就越大
#metadata : version=1可以结合元数据做扩展
Nacos集群部署
linux部署 jdk maven nginx作为负载均衡 mysql
下载 nacos-server-1.4.1.tar.gz
mkdir nacos
# 或者利用wget的方式下载
tar -zxvf nacos-server-1.4.1.tar.gz # 解压
创建3份 ls
[root@localhost nacos]# ls
nacos8849 nacos8850 nacos8851
## 要先装好mysql的环境
[root@localhost nacos]# cd nacos8849/conf/ # 进入配置文件
vim application.properties # 修改一下
server.port=8849
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
db.user.0=root
db.password.0=root
window下拿nacos/conf/nacos-mysql.sql
导入运行
[root@localhost conf]# cp cluster.conf.example cluster.conf
加上下面三行保存退出:
虚拟机ip:8849
虚拟机ip:8850
虚拟机ip:8851
:wq
[root@localhost nacos8849]# cd bin
[root@localhost bin]# vim startup.sh
本来2g改成521m(如果内存很给力就不用了)
[root@localhost bin]# ./startup.sh #启动
# 访问测试
复制nacos8849/conf/application.properties文件给其他两个
复制nacos8849/conf/cluster.conf文件给其他两个
复制nacos8849/bin/startup.sh文件给其他两个
#更改一下8850 8851中application.properties中的端口号
启动8850 8851
配置nginx
1.添加言方源仓库
yum install -y yum-utils
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
2.安装openresty
yum install -y openresty
cd /usr/local/openresty/
cd nginx
[root@localhost nginx]# vim conf/nginx.conf
upstream nacoscluster {
server ${ip}:8849;
server ${ip}:8850;
server ${ip}:8851;
}
server{
listen 8847;
server_name localhost;
location /nacos/ {
proxy_pass http://nacoscluster/nacos;
}
}
:wq
[root@localhost nginx]# cd sbin
[root@localhost nginx]#./nginx
ip:8847/nacos/
更改application.yml配置(order-nacos stock-nacos)
server-addr: ip:8847
启动8020 8021 8022