执行方式
./startup.sh -p 3333 ./startup.sh -p 4444 ./startup.sh -p 5555 #注意:提示服务器内存不够,可以把nacos启动脚本里-Xms和-Xmx jvm内存调整小一点 # 同时通过window浏览器访问: :3333/nacos/#/login :4444/nacos/#/login :5555/nacos/#/loginNginx的配置,由它作为负载均衡器
修改Nginx的配置文件Nginx.conf
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream cluster { server 127.0.0.1:3333; server 127.0.0.1:4444; server 127.0.0.1:5555; } server { listen 1111; server_name localhost; location / { # root html; # index index.html index.htm; proxy_pass ; } } }按照指定配置文件启动Nginx
cd /usr/local/nginx/sbin ./nginx -c /opt/nginx/conf/nginx.conf开始测试
测试通过Nginx访问Nacos:http//192.168.42.82:1111/nacos/#/login,成功访问!
新建一个配置测试数据库,Linux服务器的MySQL也插入一条记录!
微服务测试
微服务springalibaba-provider-payment9002启动注册进nacos集群
yml配置文件
server: port: 9002 spring: application: name: nacos-payment-provider # 微服务名称 cloud: nacos: discovery: # server-addr: localhost:8848 # 配置Nacos地址 # 换成Nginx的1111端口,做集群 server-addr: 192.168.42.1:1111 management: endpoints: web: exposure: include: '*' # 监控端点全部打开结果:成功启动!
高可用总结
5. Sentinel熔断与限流 5.1 Sentiel简介官网
主要特性
与Hystrix对比
Hystrix需要我们自己手工搭建监控平台,没有一套Wbe界面可以给我们进行更加细粒度化的配置,流控,速率控制,服务熔断,服务降级。
Sentinel单独一个组件,可以独立出来。直接界面化的细粒度统一配置。
Sentiel可以解决的问题
服务雪崩
服务降级
服务熔断
服务限流
...
5.2 安装Sentiel控制台Sentinel分为两部分:
核心库(Java客户端)不依赖任何框架/库,能够运行于所有Java运行时环境,同时对Dubbo / Spring Cloud等框架也有较好的支持。
控制台(Dashboard)基于Spring Boot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器.
下载
运行命令
# 前提:Java8环境,8080端口不被占用 java -jar sentinel-dashboard-1.7.0.jar访问Sentinel管理界面
:8080
登陆账号密码均为sentinel
5.3 初始化演示工程启动Nacos8848,:8848/nacos/#/login
新建Moudle:cloudalibaba-sentinel-service8401
pom.xml
<!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--SpringCloud ailibaba sentinel-datasource-nacos 后续做持久化用到--> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> <!--SpringCloud ailibaba sentinel --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <!--openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!--其他基础包-->yml配置文件
server: port: 8401 spring: application: name: cloudalibaba-sentinel-service cloud: nacos: discovery: server-addr: localhost:8848 # Nacos服务注册中心地址 sentinel: transport: dashboard: localhost:8080 # 配置Sentinel dashboard地址 # 默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口 port: 8719 datasource: ds1: nacos: server-addr: localhost:8848 dataId: cloudalibaba-sentinel-service groupId: DEFAULT_GROUP data-type: json rule-type: flow management: endpoints: web: exposure: include: '*' feign: sentinel: enabled: true # 激活Sentinel对Feign的支持主启动
@EnableDiscoveryClient @SpringBootApplication public class MainApp8401 { public static void main(String[] args) { SpringApplication.run(MainApp8401.class, args); } }业务类FlowLimitController
@RestController @Slf4j public class FlowLimitController { @GetMapping("/testA") public String testA() { return "==> testA"; } @GetMapping("/testB") public String testB() { log.info(Thread.currentThread().getName() + "\t" + "==> testB"); return "==> testB"; } }启动Sentinel8080,启动微服务8401