五阶段大纲
文章目录随堂笔记笔记乱码问题课程安排(17到18天)开发环境常用地址Spring Cloud Netflixeureka高可用04调用02、03Zuul API 网关Hystrix dashboardVMware离线安装Docker配置中心RabbitmqBus 配置刷新链路跟踪向注册中心注册时,选择正确网卡,注册ip地址订单流量削峰分布式事务搭建业务案例全局唯一id发号器订单远程调用 stora
文章目录
随堂笔记
这是随堂笔记, 详细内容请参考在线笔记:
https://blog.csdn.net/weixin_38305440
笔记乱码问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2jj7DWoR-1636982358216)(note.assets/image-20200613174552258.png)]
课程安排(17到18天)
- Spring Cloud Netflix(6)
- RabbitMQ(2)
- 分布式事务(3)
- RocketMQ(1)
- Docker(2)
- Elasticsearch
- Kubernetes(3)
Spring Cloud Netflix
- 注册中心
- Nacos
- Eureka
- 配置中心
- Nacos
- Spring Cloud Config
- 远程调用、负载均衡
- Feign、Ribbon
- 系统容错、限流
- Sentinel
- Hystrix
- API网关
- Spring Cloud Gateway
- Zuul
- 数据监控
- Sentinel
- Hystrix Dashboard+Turbine
- 链路跟踪监控:Sleuth+Zipkin
eureka
服务的注册和发现
搭建eureka注册中心服务器
- 新建 module: sp05-eureka
- 调整pom.xml
- 父项目
- 添加 eureka server 依赖
- yml
- 关闭自我保护模式
- 主机名
- 针对单台服务器,不向自己注册,不从自己拉取
- 启动类注解:
@EnableEurekaServer
触发 eureka 服务器的自动配置
eureka四条运行机制
- 客户端启动时,会反复连接注册中心尝试注册,直到注册成功为止
- 客户端每30秒发送一次心跳数据,服务器连续3次收不到一个服务的心跳,会删除它的注册信息
- 客户端每30秒拉取一次注册表,刷新本地注册表缓存
- 自我保护模式
- 由于网络中断,15分钟内,85%服务器出现心跳异常,自动进入保护模式,
自我保护模式下所有的注册信息都不删除 - 网络恢复后,自动退出保护模式
- 开发调试期间,可以关闭保护模式,避免影响调试
- 由于网络中断,15分钟内,85%服务器出现心跳异常,自动进入保护模式,
客户端连接 eureka 注册中心
修改 2,3,4 项目
-
添加 eureka client 依赖
-
yml
eureka连接地址: http://eureka1:2001/eureka
高可用
02商品服务
- 右键点击02的启动配置
或者点上面的启动配置下拉菜单
选择 “Edit Configuration” - 对02创建两个启动配置,设置启动参数
--server.port=xxxx
05eureka注册中心
04调用02、03
- 在 04 的 pom.xml 添加依赖: openfeign
- 启动类添加注解:
@EnableFeignClients
触发Feign的自动配置 - 定义远程调用接口:
- ItemClient
- UserClient
- OrderServiceImpl,实现远程调用
Feign 集成 Ribbon 负载均衡和重试
- Feign集成Ribbon,默认实现了负载均衡和重试
Ribbon的重试
远程调用失败,可以自动发起重试调用
- 异常
- 服务器宕机
- 后台服务阻塞超时
重试参数:
- MaxAutoRetries - 单台服务器的重试次数,模式0
- MaxAutoRetriesNextServer - 更换服务器的次数,默认1
- ReadTimeout - 等待响应的超时时间,默认1000
- OkToRetryOnAllOperations - 是否对所有类型请求都重试,默认只对GET请求重试
- ConnectTimeout - 与后台服务器建立连接的等待超时时间,默认1000
Zuul API 网关
- 统一的访问入口
- 统一的权限校验
- 集成 Ribbon 负载均衡和重试
- 集成 Hystrix 容错和限流
统一的访问入口
-
新建模块: sp06-zuul
-
添加依赖:
- eureka client
- zuul
- sp01
-
yml 配置路由转发规则
# **包含深层路径 # * 只包含一层路径 # 服务id设置成访问子路径,是默认规则, # zuul根据注册表的注册信息完成自动配置 # 最好手动配置,防止注册表不全 zuul: routes: item-service: /item-service/** user-service: /user-service/** order-service: /order-service/**
-
启动类添加注解
@EnableZuulProxy
zuul统一权限校验
http://localhost:3001/item-service/t45t4 没有登录不能访问
http://localhost:3001/item-service/t45t4?token=65345rt 已经登录过,可以访问
- 新建 ZuulFilter 子类
- 按 zuul 的规则实现
- 添加
@Component
注解
zuul 的自动配置类可以在 spring 容器中自动发现过滤器实例,完成自动配置
zuul集成Ribbon
-
默认启用了负载均衡
-
默认没有启用重试
- 在入口位置进行重试,会造成后台大面积服务压力翻倍,可能造成故障传播、雪崩
-
zuul启用重试(不推荐)
- 添加 spring-retry 依赖
- yml配置
zuul.retryable=true
- 配置重试参数(可选)
zuul集成 Hystrix
Hystrix是容错和限流工具
-
容错 – 降级
调用后台服务出错(异常,阻塞,服务崩溃),可以执行当前服务的一段代码,直接向客户端返回降级结果
- 错误提示
- 缓存的结果
- 根据业务逻辑,返回任意的结果
-
添加 Hystrix 降级
- Zuul默认已经启用 Hystrix
- 实现 FallbackProvider 接口,按zuul的规则实现接口的方法
- 添加
@Component
-
Hystrix 限流 - 熔断
- 当流量过大,造成后台服务故障,可以断开链路,限制后台服务的访问流量,等待后台服务恢复
- 断路器打开的条件
- 10秒20次请求(必须首先满足)
- 50%出错,执行降级代码
- 半开状态
- 断路器打开一段时间后,会进入半开状态
- 会尝试发送一次客户端调用,
- 成功,关闭断路器,恢复正常
- 失败,继续保持打开状态
Hystrix dashboard
Hystrix数据监控仪表盘
Hystrix日志,是通过 Actuator 工具来暴露出来
Actuator
springboot 提供的一个项目指标工具,可以通过Actuator获取项目的各种日志数据
-
健康状态
-
spring容器中所有的对象
-
spring mvc映射的所有路径
-
jvm堆内存镜像
-
…
-
添加 Actuator
-
添加 actuator 依赖
-
暴露监控日志
m.e.w.e.i= "*" 暴露所有日志 m.e.w.e.i= health 暴露健康状态日志 m.e.w.e.i= health,beans,mappings,hystrix.stream 暴露多种日志
-
查看日志
http://localhost:3001/actuator
-
搭建 Hystrix dashboard
-
新建模块: sp07-hystrix-dashboard
-
添加依赖: Hystrix dashboard
-
yml配置
允许抓取的服务器列表: localhost
-
启动类添加注解:
@EnableHystrixDashboard
-
访问
http://localhost:4001/hystrix
Turbine
聚合多台服务器的日志数据,提供给仪表盘显示
-
新建模块: sp08-turbine
-
添加依赖
- eureka client
- turbine
-
yml
聚合的服务: zuul 为聚合的日志数据命名:new String("default")
-
启动类注解:
@EnableTurbine
合并的日志地址: http://localhost:5001/turbine.stream
VMware
-
VMware 版本: 16+
-
NAT网络网段使用 64 网段
- 编辑 – 虚拟网络编辑器 – 选择 vmnet8 – 左下角修改:
192.168.64.0
- 编辑 – 虚拟网络编辑器 – 选择 vmnet8 – 左下角修改:
-
虚拟机镜像
- 课前资料\虚拟机\
- centos-7-1908.zip
- centos-8-2105.zip
- 已经做了几步基础设置:
- yum源和扩展源,使用阿里镜像
- 安装了工具: python、pip、ansible
- 方便设置ip地址的脚本:
- ip-static 设置固定ip
- ip-dhcp 自动获取ip
- 课前资料\虚拟机\
-
加载虚拟机
- 解压缩 centos-8-2105.zip
- 双击 centos-8-2105.vmx 加载镜像
- 启动虚拟机,按提示选择“已复制虚拟机”
- 用户名密码都是
root
网卡不可用
# centos 7 禁用 NetworkManager 系统服务
systemctl stop NetworkManager
systemctl disable NetworkManager
# centos 8 开启 VMware 托管
nmcli n on
systemctl restart NetworkManager
# 还原 VMware 虚拟网络
# VMware 虚拟网络不稳定,经常出现故障
# 编辑 -- 虚拟网络编辑器 -- 左下角按钮“还原默认设置” -- 设置 VMnet8 的 64 网段
# 会删除所有虚拟网络,重新创建
离线安装 Docker
-
上传离线文件到 /root/
- \DevOps课前资料\docker\docker-install 文件夹
-
参考笔记,从第三步开始安装
https://wanght.blog.csdn.net/article/details/117327543
配置中心
准备 Git 仓库
把 2,3,4 三个项目的配置文件,存放到git仓库
- 在 springcloud1 下新建文件夹: config
- 把 2,3,4 三个项目的配置文件,复制到 config 目录
- item-service-dev.yml
- user-service-dev.yml
- order-service-dev.yml
- 添加
override-none=true
防止配置中心的配置,覆盖本地命令参数 - (有仓库的同学不用重复创建)
- VCS – create git repository
或 double shift,搜索 create git repository - 选择 springcloud1 工程目录作为仓库目录
- commit 提交本地仓库,ctrl+k,右上角对勾按钮,double shift搜索commit
- 选择所有文件,填写提交信息,提交
- VCS – create git repository
- (有仓库的同学不用重复创建)
在 gitee 点右上角加号新建仓库- 仓库名称:
springcloud1
- 设置开源项
- 仓库名称:
- ctrl+shift+k,右上角向上箭头按钮,double shift搜索push
- push界面,点击 define remore 连接,填写远程仓库地址,完成推送
搭建配置中心服务器
-
新建模块: sp09-config
-
添加依赖
- eureka client
- config server
-
yml
-
仓库的地址
-
存放配置文件的文件夹路径
-
之后测试如果有问题,果断换仓库
https://gitee.com/xyxyxyxyx/springcolud01 config
-
-
启动类注解:
@EnalbleConfigServer
确认配置中心服务器是否正确
- http://eureka1:2001/ 检查是否有
config-server
的注册信息 - 访问配置中心的配置文件
- http://localhost:6001/item-service/dev
- http://localhost:6001/user-service/dev
- http://localhost:6001/order-service/dev
配置中心的客户端
- 把 2,3,4 的配置文件全部注释掉
- 添加依赖: config client
- 新建配置文件:
bootstrap.yml
- 添加配置:
- eureka地址
- 指定配置中心的服务id:
CONFIG-SERVER
- 指定下载的配置文件和 profile
确认
- 启动控制台中,要看到连接 6001 的日志
Rabbitmq
消息队列、消息服务、消息中间件、Broker
- Rabbitmq
- Activemq
- Rocketmq 阿里
- Kafka
- Tubemq 腾讯
搭建Rabbitmq服务器
-
克隆 docker-base: rabbitmq
-
设置ip
./ip-static ip: 192.168.64.140 ifconfig
-
下载 rabbitmq 镜像
docker pull rabbitmq:management 或者从 code 下载 rabbit-image.gz 上传到服务器,然后执行镜像导入 docker load -i rabbit-image.gz
-
启动rabbitmq容器
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
重启 docker 系统服务
systemctl restart docker
mkdir /etc/rabbitmq
vim /etc/rabbitmq/rabbitmq.conf
# 添加两行配置:
default_user = admin
default_pass = admin
docker run -d --name rabbit \
-p 5672:5672 \
-p 15672:15672 \
-v /etc/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-e RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf \
rabbitmq:management
访问管理控制台 http://192.168.64.140:15672
用户名密码是 admin
Bus 配置刷新
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W9QZmjYg-1636982358218)(note.assets/image-20211022163759194.png)]
-
修改 2,3,4,9 添加依赖
- Bus
- Rabbitmq
- binder-rabbit
-
09添加依赖: actuator
-
09的yml配置:
-
暴露 bus-refresh:
m.e.w.e.i=bus-refresh
-
rabbitmq连接
-
-
修改 2,3,4 的yml 配置,修改 config 目录的三个文件并提交
- rabbitmq连接
启动项目测试
- 启动5,耐心等待完全启动完成
- 启动9,耐心等待完全启动完成
- --------- http://eureka1:2001 注册表中存在 config-server
http://localhost:6001/item-service/dev
http://localhost:6001/user-service/dev
http://localhost:6001/order-service/dev - 启动 2,3
- 启动 4
- --------- 查看 2,3,4 的控制台,要看到连接 6001
- 启动6
- --------- http://localhost:6001/actuator 这里面要看到 bus-refresh
- 使用 postman 向
http://localhost:6001/actuator/bus-refresh
提交 post 请求 - 观察 2,3,4 的控制台,要看到重新连接 6001 刷新配置的日志
把刷新到的配置信息,重新注入到对象中
@RefreshScope
在需要重新注入配置数据的对象上添加这个注解,刷新的配置才能重新注入到对象中;
如果加这个注解,即使刷新到新配置,也不会重新向对象注入
链路跟踪
-
sleuth
产生链路跟踪日志
-
zipkin
日志的可视化
sleuth
A --> B --> C --> D
A, U5HG4HG456UYU, U5HG4HG456UYU, true
B, U5HG4HG456UYU, O7IUYH45TY34Y45, true
C, U5HG4HG456UYU, U56YU4Y344U456, true
D, U5HG4HG456UYU, 34T345Y456U56U5, true
修改 2,3,4,6 添加 sleuth 产生链路跟踪日志
- 只需要添加 sleuth 依赖
- sleuth 是自动配置,不需要添加任何其他配置
2,3,4,6 向rabbitmq 发送日志数据
- 添加 zipkin 客户端依赖
- 在 06 添加 rabbitmq 依赖
- yml 配置发送方式:
rabbit
- 修改 06的yml,添加 rabbitmq 连接配置
起动zipkin服务器
# 使用 140 服务器,没有 virtual host
java -jar zipkin-server-2.23.4-exec.jar --
zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672
# 使用 140 服务器,有 virtual host
java -jar zipkin-server-2.23.4-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672/vh0
# 使用我的服务器,有 virtual host
java -jar zipkin-server-2.23.4-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@wht6.cn:5672/vh0
向注册中心注册时,选择正确网卡,注册ip地址
选择正确网卡
bootstrap.yml
spring:
cloud:
inetutils:
ignored-interfaces: # 忽略的网卡
- VM.*
preferred-networks: # 要是用的网卡的网段
- 192\.168\.0\..+
注册ip地址,而不注册主机名
application.yml
eureka:
instance:
prefer-ip-address: true # 使用ip进行注册
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} # ip:服务id:端口
订单流量削峰
导入项目
- 课前资料\elasticsearch\pd-商城项目案例.zip
压缩文件\pd\pd-web 文件夹,解压到 rabbitmq 工程目录 - pd-web\pom.xml 鼠标拖拽到 idea,springboot 版本改成 2.3.2.RELEASE
- pom.xml编辑器中,右键–add as maven project, 导入 pd-web 模块
导入数据库
-
sqlyog, 右键点连接, 从 sql 转储文件导入,选择 pd-web 目录中的 pd.sql
-
如果导入失败,可以增大 mysql 缓存大小
如果导入失败,可以增大 mysql 缓存区 set global max_allowed_packet=100000000; set global net_buffer_length=100000; SET GLOBAL interactive_timeout=28800000; SET GLOBAL wait_timeout=28800000
启动项目测试
-
application.yml
修改数据库连接的密码
-
右键点击 RunPDApp — run
-
修改启动配置,working directory 设置成 pd-web 模块文件夹的路径
-
重启项目
-
访问 http://localhost
测试现有订单系统
-
删除数据库中的所有注册用户和订单
delete from pd_user; delete from pd_order; delete from pd_order_item;
-
点右上角,登录,注册新用户
-
右上角地址管理,填写收货地址
-
下订单
生成订单的代码
- OrderController.submitOrder()
- OrderServiceImpl.saveOrder()
向 Rabbitmq 发送订单
- pom.xml 添加 rabbitmq 依赖
- yml添加rabbitmq连接
- 在启动类,或者添加自动配置类
给出使用的队列参数: orderQueue,true,false,false - 修改 OrderServiceImpl,使用 AmqpTemplate 工具类,向 orderQueue队列 发送订单消息
消费者接收订单,存储到数据库
- 新建OrderConsumer 消费者类
- 通过注解配置来接收订单消息
- 收到的订单,直接调用业务方法 saveOrder() 保存到数据库
- 调整 OrderServiceImpl
分布式事务
搭建业务案例
数据库初始化工具
执行多次测试后,库存和账户金额都会减少,可以执行初始化工具,把数据重置到初始状态,再重新测试
- 新建空工程: seata-at
- 新建spring模块: db-init
- 添加依赖: spring jdbc,mysql driver
- yml 配置数据库连接
- 在 resources 目录创建四个 sql 脚本文件
- 新建sql子目录,在sql 目录下创建文件
- 启动类中添加代码,执行这四个 sql 脚本
mysql 旧版本,需要调整sql脚本
- 四个文件中的
DATETIME(6)
,把小括号6去掉,改成DATETIME
- order.sql 最后一行,两个 NOW() 改成 0
三个业务模块
- 新建 spring 模块
- 调整 pom.xml,从 order-parent 继承
- yml配置
- app.name
- port
- 注册中心
- jdbc连接信息
- mybatis-plus
- 显示 mapper 执行的sql语句日志
- bootstrap.yml 选择网卡
- 实体类
- Mapper
- 启动类添加注解:
@MapperScan
- Service
- Controller
全局唯一id发号器
分布式系统中,多个模块可以从发号器获得不重复的id
https://github.com/lookingatstarts/easyIdGenerator
这个开源项目支持两种产生id的算法:
- 雪花算法
- 使用数据库产生不重复id
订单远程调用 storage, account, easy-id
- 父项目中已经添加 feign 依赖
- 启动类添加注解:
@EnableFeignClients
- 添加三个远程调用接口
- EasyIdClient
- StorageClient
- AccountClient
- OrderServiceImpl 完成远程调用
- 禁用 Ribbon 重试,避免干扰观察分布式事务执行效果
Seata AT 事务
部署 seata server (TC 事务协调器)
- 课前资料\分布式事务\seata-server-1.3.zip
解压缩 - 修改三个配置文件
- registry.conf – 向注册中心注册
- file.conf – 协调器运行过程中记录的日志数据,要存到数据库
- seata-server.bat – 使用的内存默认 2G,测试环境把内存改小:256m
- 执行 seata-server.bat 启动协调器
- 必须用 jdk 1.8
- 不能关闭命令行窗口
- 窗口中的内容不能选中,如果选中,窗口中的应用会挂起(暂停)
订单模块添加 Seata AT 事务
- 父项目中添加 seata 依赖
- order中配置三个配置文件
- application.yml – 事务组的组名
- registry.conf – 注册中心的地址
- file.conf – 上面的事务组,使用哪个协调器
- 新建自动配置类,创建 DatasourceProxy 数据源代理对象
- AT事务的自动事务处理代码,都是有数据源代理提供的
- 禁用 spring 默认的数据源配置
- 在业务方法上添加事务注解
- spring 本地事务
@Transactional
- seata 启动全局事务
@GlobalTransactional
(只在第一个模块上添加)
- spring 本地事务
TCC 事务
有侵入的事务方案
- 事务控制代码需要自己编写
- 业务代码也需要修改
- 底层数据库表结构也要修改
AT事务适用于 80% 业务场景,在一些复杂情况下,自动事务无法自动处理,就需要手动处理事务
TCC - 两个阶段的三个操作
- 第一阶段
- Try - 预留资源、冻结数据
- 第二阶段
- Confirm - 确认资源,使用冻结数据完成业务处理
- Cancel - 取消预留的资源,把之前冻结的数据回滚(解冻、恢复)回去
新建工程,导入无事务版本
- 新建 empty 工程: seata-tcc
- 无事务版本的 4 个文件夹,解压缩到工程目录
- 导入
- project structure 中添加 module
- double shift 搜索 add maven project
- 拖拽 pom.xml ,右键 add as maven project
添加 TCC 事务
- 添加 seata 依赖
- 三个配置文件
- application.yml – 事务组
- registry.conf – 注册中心地址
- file.conf – 事务组对应协调器
- 修改Mapper,添加 TCC 数据库操作
- 按照 seata tcc 的实现规则,定义 TccAction 接口和实现
- 添加三个方法,实现 TCC 三个操作
- 三个方法都添加 @Transactional 注解,控制本地事务
- 修改业务方法,调用 TccAction 的第一阶段方法
- 第二阶段的方法,由 seata 的 RM 组件自动调用
- 在第一个模块,添加 @Globaltransactional 启动全局事务
- 第一阶段,冻结数据失败,二阶段回滚也会执行
- 二阶段失败,TC会重复发送二阶段指令,模块会重复执行二阶段操作
幂等性控制
让多次重复的操作,和一次操作的结果相同
-
第一阶段成功,设置一个“一阶段成功标记”;失败就没有标记
-
二阶段执行前,先检查标记是否存在,如果存在执行第二阶段操作
二级段执行完成后,删除标记
可靠消息最终一致性事务
Rocketmq 提供了事务消息、高可靠消息
搭建Rocketmq服务器
-
克隆 centos-8-2105: rocketmq
-
设置ip
./ip-static ip: 192.168.64.141 ifconfig
-
上传文件到 /root/
- 课前资料\分布式事务\rocketmq\ 目录中的三个文件
-
后面安装参考 csdn 笔记
Rocketmq 可靠消息最终一致性事务
导入项目
- seata-at/无事务版本.zip, 解压到 rocketmq-dtx 工程目录
- 导入
- 工程模块管理中,添加模块
- double shift,搜索 add maven project
- 拖拽pom.xml到 idea,右键 add as maven project
订单使用事务消息,异步调用账户
订单添加事务消息
- 父项目添加 spring Rocketmq 依赖
- yml 配置 rocketmq 连接和生产者组名
- 添加新的数据表 tx_table,用来存储事务执行状态
- 添加实体类 TxInfo 和 TxMapper
- 新建 AccountMessage,用来封装发给账户的调用信息: userId, money, txId
- 工具类:JsonUtil
- OrderServiceImpl 发送事务消息
- 实现事务监听器
账户接收消息,扣减账户
- 依赖
- yml配置 name server
- AccountMessage
- JsonUtil
- 新建消费者类: AccountConsumer,实现消费者接口
- 通过注解配置接收消息
- 扣减账户
Docker
准备docker服务器
-
克隆 docker-base: docker
-
设置ip
./ip-static ip: 192.168.64.150 ifconfig
-
上传文件到 /root/
- docker-images.gz
- tomcat 文件夹
-
导入镜像:
docker load -i docker-images.gz docker images
用 tomcat:10 运行 helloworld web应用
1. 准备 jsp 文件
mkdir /opt/web
vim /opt/web/index.jsp
添加内容:
<h1>Hello wolrd!</h1>
<h1>Hello ${param.name}!</h1>
2. 启动 tomcat:10 容器
docker run -d --name web \
--restart=always \
-p 80:8080 \
-v /opt/web:/usr/local/apache-tomcat-10.0.6/webapps/ROOT \
tomcat:10
3. 访问 http://192.168.64.150 、 http://192.168.64.150/?name=zhangsan
Elasticsearch
全文检索引擎服务器
-
克隆 docker-base: es
-
设置ip
./ip-static ip: 192.168.64.181 ifconfig
-
上传文件到 /root/
- pditems 文件夹
- elasticsearch-analysis-ik-7.9.3.zip
- es-img.gz
-
导入镜像:
docker load -i es-img.gz
-
增加服务器内存到 2G 或以上
-
修改 Linux 底层系统参数
echo 'vm.max_map_count=262144' >>/etc/sysctl.conf
-
关闭防火墙
# 关闭防火墙 systemctl stop firewalld.service # 禁用防火墙 systemctl disable firewalld.service
-
重启服务器
shutdown -r now
-
检查底层系统参数是否添加正确
vim /etc/sysctl.conf
按照笔记,启动 es 三个节点的容器
- 准备虚拟网络和挂载目录
- 启动 Elasticsearch 集群
Spring Data Elasticsearch
Criteria 数据查询
- Criteria - 封装搜索条件
- CriteriaQuery - 封装上面的条件对象、分页参数
- ElasticsearchOperations - 用来执行查询的工具
分页
-
Pageable - 向服务器提交的分页参数,page、size
-
Page - 从服务器返回的一页数据,数据列表、分页信息(可选,可以直接使用 List<…>)
-
Repository
Page<Student> findByName(String key, Pageable pageable);
-
Criteria
Criteria c = ... CriteriaQuery q = new CriteriaQuery(c); q.setPageable(pageable); ....
拼多商城商品搜索
- 添加 spring data es 依赖
- yml 配置 es 服务器地址
- 新建实体类 Item,封装从 es 搜索的数据
- 新建 ItemRepository 接口
- 添加搜索方法:
findByTitleOrSellPoint()
- SearchService
- SearchController
- search.jsp
Kubernetes
容器自动管理工具、持续部署工具
谷歌的开源工具,开源之前在谷歌内部使用了几年的时间,管理上千万的容器
安装搭建 Kubernetes 集群
安装过程非常复杂,即使对专业运维难度也非常大,有开源工具辅助安装K8s集群
- 一键安装:https://github.com/easzlab/kubeasz
- 一步步手动安装:https://github.com/opsnull/follow-me-install-kubernetes-cluster
第一台服务器
-
克隆 centos-8-2105: k1
-
设置ip
./ip-static ip: 192.168.64.191 ifconfig
-
kubeasz-3.1.0.zip 解压缩
-
上传文件
- images.gz 上传到 /root/
- kubeasz-3.1.0/ezdown 上传到 /root/
- kubeasz-3.1.0/kubeasz 文件夹上传到 /etc/
-
内存设置 2G 或 2G 以上
-
cpu 设置成两块
-
重启服务器
准备安装环境
cd ~/
chmod +x ./ezdown
# 1.下载离线安装文件,如果存在,不会重复下载
# 2.安装Docker
./ezdown -D
docker info
docker load -i images.gz
docker images
克隆 k1,克隆出 k2 和 k3
-
k1先关机
-
方案1,从 k1 克隆出 k2 和 k3
-
方法2,从 k1 只克隆一个 k2
-
修改 k2 和 k3 的 ip
- 192.168.64.192
- 192.168.64.193
191继续配置安装环境
cd ~/
./ezdown -S
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/kubeasz/example/config.yml
# 生成公钥和私钥
ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa
# 公钥复制到三台主机,包括自己
ssh-copy-id 192.168.64.191
ssh-copy-id 192.168.64.192
ssh-copy-id 192.168.64.193
# 使用离线安装工具,新建集群安装方案
cd /etc/kubeasz
chmod +x ezctl
./ezctl new cs1
修改集群方案 cs1 的配置文件 hosts
三台服务器都拍摄快照,如果集群安装失败,可以回退到快照重新安装
- 可能出错的情况
- 漏做某一步
- hosts 文件修改错误
- 内存不足引起安装失败
可以释放更多内存、加大虚拟机内存
执行一键安装脚本
cd /etc/kubeasz
./ezctl setup cs1 all
Kubernetes 的三个核心对象
-
Pod
Pod是K8s的容器, 是 K8s 对 Docker 容器的封装对象,
一个 Pod 可以封装多个 Docker 容器,
Pod是对底层容器化技术的解耦工具,底层容器可以使用 Docker 或 Containerd
-
控制器
控制容器的自动部署和自动销毁
-
Service
提供一个不变的访问入口,Service可以向所有容器以负载均衡的方式,转发调用
K8s 部署 Springcloud1 微服务模块
构建镜像
-
上传文件到 /root/
- DevOps课前资料\kubernetes\k8s案例\v2\
目录中的 5 个文件夹
- DevOps课前资料\kubernetes\k8s案例\v2\
-
构建镜像
cd ~/ docker build -t centos7-jdk8:v1 jdk/ docker build -t sp-eureka:v1 eureka/ docker build -t sp-item:v1 item/ docker build -t sp-user:v1 user/ docker build -t sp-order:v1 order/ 查看镜像列表 docker images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WnRGS1xN-1636982358220)(note.assets/image-20211110115009868.png)]
更多推荐
所有评论(0)