当前位置: 首页 > news >正文

使用Ckman部署ClickHouse集群介绍

使用Ckman部署ClickHouse集群介绍

1. Ckman简介

ClickHouse Manager是一个为ClickHouse数据库量身定制的管理工具,它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源,开源地址为:github.com/housepower/ckman。它通过提供一个直观的图形用户界面(GUI),极大地简化了数据库的管理和操作。这款工具支持多种功能,包括但不限于SQL查询编辑器、数据可视化、实时监控、性能分析、备份与恢复等。

用户可以通过ClickHouse Manager轻松执行复杂的SQL查询,同时工具内置的编辑器支持语法高亮和自动补全,提高了编写查询的效率。数据可视化功能使用户能够通过图表直观地理解数据趋势和模式。实时监控则允许用户跟踪数据库的性能指标,及时发现并解决潜在问题。

此外,ClickHouse Manager还提供了强大的性能分析工具,帮助用户识别查询瓶颈和优化数据库配置。备份与恢复功能确保了数据的安全性,即使在系统故障时也能快速恢复数据。总的来说,ClickHouse Manager是一个功能全面、操作简便的数据库管理工具,适合各种规模的ClickHouse用户使用。

2. 为什么要有ckman

摘取官方文档介绍如下:

我们不妨思考一下这样的场景:如果要部署一个ClickHouse集群,需要怎么做?

首先,我们需要在所有ClickHouse节点上安装ClickHouserpm包,然后,需要修改配置文件,包括但不限于config.xmlusers.xmlmetrika.xml。注意,是所有节点上都要修改,修改完成后需要依次启动各个节点。

当集群规模不大,这些操作手动去完成可能不觉得有什么,但是如果集群规模比较大,单个集群的节点达到了上百台甚至上千台,这时候要手工去每台机器上去操作,显然变得不太现实。

如果需要往集群增加一个节点呢?

我们需要在已有的节点上的metrika.xml配置文件中加上该节点,然后在新增节点上安装rpm包,修改metrika.xml,启动ClickHouse服务,最后还要同步其他节点上的schema表结构,至此才能完成。

删除节点亦如是。

如果要升级集群呢?我们不仅需要在每个节点上重新安装升级rpm包,还需要考虑一些其他的问题:需不需要停服务?如果升级失败了怎么办?

总之,ClickHouse的集群运维,如果靠人工去做,不仅繁琐,容易出现各种问题,当集群规模变大后,也变得不切实际。

这时候,ckman的出现,就可以完美解决上述的问题。ckman将这些运维操作都集成在管理界面中,用户只需要在web界面上通过简单的信息配置,点击鼠标,就可以完成所有的配置工作,而无需关注其他细节,也减少了出错的可能。

3. 主要功能

  1. 集群管理

    • 安装和卸载ClickHouse集群。
    • 添加和删除集群节点。
    • 自动化配置和部署。
  2. 监控

    • 集群状态监控。
    • 节点健康检查。
    • 性能指标监控。
  3. 运维工具

    • 数据备份和恢复。
    • 数据库和表管理。
    • SQL查询执行和日志查看。
  4. 用户管理

    • 创建和管理用户。
    • 设置用户权限和角色。
  5. 配置管理

    • 统一管理ClickHouse配置文件。
    • 动态更新配置。

4. 优势

  • 简化管理:CKMan提供了简化的ClickHouse集群管理功能,减少了手动配置和运维的复杂度。
  • 监控和报警:集成了监控和报警功能,帮助运维人员及时发现和解决问题。
  • 用户友好:图形化界面和命令行工具兼备,满足不同用户的需求。

架构设计

5. 安装ckman

5-1. 下载ckman

ckman官方github项目下载地址:https://github.com/housepower/ckman/releases ,可以根据需求自行下载需要的版本即可,对于部署clickhouse没有严格要求必须使用某个版本ckman。

下载示例:

wget https://github.com/housepower/ckman/releases/download/v3.0.8/ckman-3.0.8.x86_64.rpm

5-2. 安装ckman

[root@ops01 clickhouse]# wget https://github.com/housepower/ckman/releases/download/v3.0.8/ckman-3.0.8.x86_64.rpm
[root@ops01 clickhouse]# rpm -ivh ckman-3.0.8.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...1:ckman-0:3.0.8-1                  ################################# [100%]# 安装完毕后,相关的路径
[root@ops01 clickhouse]# whereis ckman
ckman: /usr/sbin/ckman /etc/ckman /usr/local/bin/ckman# 配置相关路径
[root@ops01 clickhouse]# ll /etc/ckman/
total 12
drwxr-xr-x 2 ckman ckman 4096 Jul  2 16:23 conf
drwxr-xr-x 2 ckman ckman 4096 Jul  2 16:17 dbscript
drwxr-xr-x 2 ckman ckman 4096 Jul  2 16:17 package# 可执行文件
[root@ops01 clickhouse]# ls -l /usr/local/bin/|grep ckman
-rwxr-xr-x 1 root root 118916632 May 27 16:11 ckman
-rwxr-xr-x 1 root root  23208233 May 27 16:11 ckmanpasswd# 日志存储路径
[root@ops01 clickhouse]# ll /var/log/ckman/
total 72
-rw-r----- 1 ckman ckman  8866 Jul  2 17:00 ckman.err.log
-rw-r----- 1 ckman ckman 55478 Jul  2 17:00 ckman.log

5-3. ckman服务启停

# 启动服务:systemctl start ckman
[root@ops01 clickhouse]# systemctl start ckman[root@ops01 clickhouse]# ps -ef | grep ckman | grep -v grep
ckman     3939     1  0 16:20 ?        00:00:00 /usr/local/bin/ckman -c=/etc/ckman/conf/ckman.hjson -p=/run/ckman/ckman.pid -l=/var/log/ckman/ckman.log -d[root@ops01 clickhouse]# tail -15 /var/log/ckman/ckman.log "Cron": {"Enabled": true,"sync_logic_schema": "0 * * * * ?","watch_cluster_status": "0 */3 * * * ?","sync_dist_schema": "30 */10 * * * ?"}
}
2024-07-02T16:20:39.119+0800	WARN	local/local.go:460	file [/etc/ckman/conf/clusters.json] is not exist
2024-07-02T16:20:39.119+0800	INFO	runner/runner.go:32	runner service starting...
2024-07-02T16:20:39.119+0800	INFO	ckman/main.go:138	start http server 192.170.0.150:8808 success[root@ops01 clickhouse]# netstat -tnlpu|grep 8808
tcp6       0      0 :::8808                 :::*                    LISTEN      3939/ckman   

服务状态查看 : systemctl status ckman

停止服务 : systemctl stop ckman

重启服务 : systemctl restart ckman

6. ckman安装部署clickhouse

6-1. 准备工作

  • 机器准备

本次部署采用了5台服务器进行集群部署,建议至少3台。

  • 配置集群免密
# 验证集群操作是否免密
[root@ops01 ~]# for i in ops01 ops02 ops03 ops04 ops04;do ssh $i "hostname && date" ;done
ops01
Tue Jul  2 18:39:33 CST 2024
ops02
Tue Jul  2 18:39:33 CST 2024
ops03
Tue Jul  2 18:39:33 CST 2024
ops04
Tue Jul  2 18:39:33 CST 2024
ops04
Tue Jul  2 18:39:33 CST 2024

ckman机器到各服务器时间无需密码访问

ssh-keygen -t rsa;

ssh-copy-id 192.168.1.1

  • 部署zookeeper服务

zookeeper服务搭建部署可参考文章:https://blog.csdn.net/wt334502157/article/details/115213645

  • 创建安装包存放目录并拷贝rpm安装包

安装包官方下载地址:https://packages.clickhouse.com/rpm/stable/

根据自己的需求进行搜索下载即可,注意底部有next下一页

本次采用了23.9.1版本

wget https://packages.clickhouse.com/rpm/stable/clickhouse-client-23.9.1.1854.x86_64.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-common-static-23.9.1.1854.x86_64.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-server-23.9.1.1854.x86_64.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-common-static-dbg-23.9.1.1854.x86_64.rpm

创建目录,把安装包放入指定目录内,路径是ckman探寻的目录地址,并非随意指定

[root@ops01 package]# mkdir -p /etc/ckman/package/clickhouse
[root@ops01 package]# chmod a+w /etc/ckman/package/clickhouse
[root@ops01 package]# cd /etc/ckman/package/clickhouse
[root@ops01 clickhouse]# cp /opt/software/clickhouse/clickhouse-*rpm .
[root@ops01 clickhouse]# ls
clickhouse-client-23.9.1.1854.x86_64.rpm         clickhouse-common-static-dbg-23.9.1.1854.x86_64.rpm
clickhouse-common-static-23.9.1.1854.x86_64.rpm  clickhouse-server-23.9.1.1854.x86_64.rpm
  • 所有服务器创建数据存放目录
[root@ops01 ~]# for i in ops01 ops02 ops03 ops04 ops04;do ssh $i "mkdir -p /data/clickhouse/data" ;done

也可逐个服务器登录创建 mkdir -p /data/clickhouse/data

6-2. 页面部署clickhouse集群

ckman功能虽然较多,但一般常用ckman部署clickhouse集群,内嵌的Prometheus监控或者nacos配置等等,可根据需求。生产情况经常会额外单独的监控体系来监控服务器和服务。这里不展开介绍监控等服务的集成。

页面访问方式:IP+8808端口

http://192.170.0.150:8808

ckman默认的登录用户为ckman,密码为Ckman123456!

  • 集群配置
  1. 集群基本信息配置

<注意>:左上角可以切换成中文界面;截图中的名称均可根据需求自定义

物理集群名: 集群的名字,注意不要和ckman已有的名字重合

安装包类型: 安装包类型,用来区分平台和架构,不需要自己填写,上传安装包后可通过下拉框选择;只要把rpm包cp到/etc/ckman/package/clickhouse路径下,即可自动识别出。在部署集群之前,需要先上传安装包。部署的集群版本是基于上传安装包的版本的。

如果选择的平台和架构不正确,如在arm的机器上部署x86的安装包,则不会成功。

ClickHouse版本: ck的版本,不需要自己填写,通过下拉列表选择,下拉列表中会列出ckman服务器中所有的安装包版本。

逻辑集群名:逻辑集群名字,可以指定,也可以不指定
TCP Port: clickhouse的TCP端口,默认是9000,当然也可以自己指定
ClickHouse Node List: clickhouse节点列表,支持简写

  1. 集群分片、副本配置

注意不是在一个分片中添加多个副本IP,是点击集群节点配置,添加多个分片

  • 如果开启了副本,默认是1个shard2个副本,如果节点是奇数,则最后一个 shard1个副本。
  • 如果要增加节点的副本数,可通过增加节点完成,创建集群时最多只能指定2个副本
  • 如果没有开启副本,则有几个节点就有几个shard
  • 注意:集群是否支持副本在部署集群时就已经决定了,后续不可更改
  1. zookeeper相关信息配置

ckman并没有提供zookeeper集群搭建的功能,因此在部署集群之前,需要将zookeeper集群搭建好

  1. 部署连接以及存储相关配置

<注意>:数据存储路径中,结尾一定要/结尾

默认用户密码可自己更改

在clickhouse使用时,会有一个default用户,这里定义了默认密码,后续即可通过密码访问

示例:clickhouse-client --host=192.170.0.150 --port=9000 --user=default --password=bigdata

此处设置的密码即为client连接的password

系统账号名和系统账号密码,即搭建集群的用户信息,因为需要分发安装包并安装,还需要集群批量操作,认证基于此处配置。

配置以上信息后,点击创建,等待集群部署完毕,即clickhouse部署完成

  • 集群登录验证
[app@ops01 ~]$ clickhouse-client --host=192.170.0.150 --port=9000 --user=default --password=bigdata
ClickHouse client version 23.9.1.1854 (official build).
Connecting to 192.170.0.150:9000 as user default.
Connected to ClickHouse server version 23.9.1 revision 54466.ops01 :) show databases;SHOW DATABASESQuery id: d3fd4619-366b-4b54-911a-1bf2b373b116┌─name───────────────┐
│ INFORMATION_SCHEMA │
│ default            │
│ information_schema │
│ system             │
└────────────────────┘4 rows in set. Elapsed: 0.002 sec. ops01 :) use default;USE defaultQuery id: 346e029f-c462-4732-9b04-4a713e420a36Ok.0 rows in set. Elapsed: 0.001 sec. ops01 :) show tables;SHOW TABLESQuery id: 1c4e235f-10dd-46fc-b8cb-2888c89c0ff5┌─name──────────┐
│ example_wangt │
└───────────────┘1 row in set. Elapsed: 0.004 sec. ops01 :) select * from example_wangt;SELECT *
FROM example_wangtQuery id: 6daf3b4c-111b-4756-8acc-e65504622f05┌─id─┬─name────┬─age─┐
│  1 │ Alice   │  30 │
│  2 │ Bob     │  25 │
│  3 │ Charlie │  28 │
│  4 │ David   │  35 │
│  5 │ Eva     │  22 │
│  6 │ Frank   │  40 │
│  7 │ Grace   │  27 │
│  8 │ Hannah  │  33 │
│  9 │ Ivy     │  29 │
│ 10 │ Jack    │  31 │
└────┴─────────┴─────┘10 rows in set. Elapsed: 0.004 sec. 

相关文章:

使用Ckman部署ClickHouse集群介绍

使用Ckman部署ClickHouse集群介绍 1. Ckman简介 ClickHouse Manager是一个为ClickHouse数据库量身定制的管理工具&#xff0c;它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源&#xff0c;开源地址为&…...

「前端工具」postman接口测试工具详解

Postman 是一款流行的 API 开发工具,用于构建和测试 RESTful API。以下是 Postman 的一些关键特性和使用方法的详解: 1. 界面和基本操作 工作区:Postman 的主界面,用于显示集合、环境和全局变量。请求构建器:用于输入请求的 URL、HTTP 方法、请求头、请求体等。响应区:显…...

生成requirements.txt

pip install pipreqs pipreqs ./ --encodingutf-8 --force python导出requirements.txt的几种方法总结...

ubuntu ceph部署

ubuntu ceph部署 参考文档&#xff1a;http://docs.ceph.org.cn/start/ 节点配置 1个mon节点&#xff0c;3个osd节点 安装前准备 安装ceph-deploy 添加 release key wget -q -O- https://download.ceph.com/keys/release.asc | sudo apt-key add -添加Ceph软件包源&…...

2024.7.8

2024.7.8 【追逐影子的人&#xff0c;自己就是影子 —— 荷马】 Monday 六月初三 讲的根本听不懂好吧&#xff01; 目前只写了三道题&#xff08;但是黑色 确实是没见过这么抽象的数据结构 Gregor and the Two Painters Number of Components Equal LCM Subsets 这个lcm确实…...

Spring 外部jar包Bean自动装配

Spring 外部jar包Bean自动装配 背景介绍 公共代码模块被作为jar包引入业务项目&#xff0c;前者定义的bean即使添加了Component注解由于不会被扫描到也就无法被Spring管理。此处通过Spring SPI机制来完成 使用 spring.factories 在外部 jar 包中创建 spring.factories 文件&a…...

2通道音频ADC解码芯片ES7243L、ES7243E、ES7243,用于低成本实现模拟麦克风转换为IIS数字话筒

前言&#xff1a; 音频解码芯片某创参考价格&#xff1a; ES7243L 500&#xff1a;&#xffe5;1.36 / 个 ES7243E 500&#xff1a;&#xffe5;1.66 / 个 ES7243 500&#xff1a; &#xffe5;1.91 / 个 其中ES7243L工作电压为1.8V&#xff0c;与其他两款的3.3V工作电压不同&…...

uniapp跨域问题解决

找到menifest文件&#xff0c;在文件的最后添加如下代码&#xff1a; // h5 解决跨域问题"h5":{"devServer": {"proxy": {"/adminapi": {"target": "https://www.demo.com", // 目标访问网址"changeOrigin…...

[C++][ProtoBuf][Proto3语法][一]详细讲解

目录 1.字段规则2.消息类型的定义与使用1.定义2.使用 3.enum类型1.语法2.定义时注意3.代码 1.字段规则 消息的字段可以⽤下⾯⼏种规则来修饰&#xff1a; singular&#xff1a;消息中可以包含该字段零次或⼀次(不超过⼀次) proto3语法中&#xff0c;字段默认使⽤该规则 repeat…...

千古雄文《渔樵问对》原文、译文、解析

邵雍《渔樵问对》&#xff1a;开悟奇文&#xff0c;揭示世界的终极意义 【邵雍《渔樵问对》&#xff1a;开悟奇文&#xff0c;揭示世界的终极意义】 邵雍&#xff08;1011年1月21日&#xff0d;1077年7月27日&#xff0c;宋真宗大中祥符四年十二月二十五日戌时生至神宗熙宁十…...

uniapp 开发备忘录-防坑指南

uniapp 开发备忘录-防坑指南 npm run dev:mp-weixin 编译微信小程序报错&#xff1a; [plugin:uni:mp-using-component] Expected ‘,’ or ‘}’ after property value in JSON at position 解决方案&#xff1a;升级uniapp 到最新 alpha 版。&#xff08;2024年7月13日&am…...

Simple_ReAct_Agent

参考自https://www.deeplearning.ai/short-courses/ai-agents-in-langgraph&#xff0c;以下为代码的实现。 Basic ReAct Agent(manual action) import openai import re import httpx import os from dotenv import load_dotenv, find_dotenvOPENAI_API_KEY os.getenv(OPEN…...

window wsl安装ubuntu

文章目录 wsl安装ubuntu什么是wsl安装wsl检查运行 WSL 2 的要求将 WSL 2 设置为默认版本查看并安装linux WSL2的使用如何查看linux文件wsl如何使用代理:方法1&#xff1a;方法2&#xff1a;通过 DNS 隧道来配置 WSL 的网络 如何将 WSL 接入局域网并与宿主机同网段使用VScode连接…...

postmessage()在同一域名下,传递消息给另一个页面

这里是同域名下&#xff0c;getmessage.html&#xff08;发送信息&#xff09;传递消息给index.html&#xff08;收到信息&#xff0c;并回传收到信息&#xff09; index.html页面 <!DOCTYPE html> <html><head><meta http-equiv"content-type"…...

初始redis:在Ubuntu上安装redis

1.先切换到root用户 使用su命令切换到root 2.使用apt命令来搜索redis相关的软件包 命令&#xff1a;apt search redis 3.下载redis 命令&#xff1a; apt install redis 在Ubuntu 20.04中 &#xff0c;下载的redis版本是redis5 4.查看redis状态 命令&#xff1a; netst…...

生物素结合金纳米粒子(Bt@Au-NPs ) biotin-conjugated Au-NPs

一、定义与特点 定义&#xff1a;生物素结合金纳米粒子&#xff0c;简称BtAu-NPs或biotin-conjugated Au-NPs&#xff0c;是指通过特定的化学反应或物理方法将生物素修饰到金纳米粒子表面&#xff0c;形成稳定的纳米复合材料。 特点&#xff1a; 高稳定性&#xff1a;生物素的修…...

LeetCode热题100刷题9:25. K 个一组翻转链表、101. 对称二叉树、543. 二叉树的直径、102. 二叉树的层序遍历

25. K 个一组翻转链表 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), nex…...

PyJWT,一个基于JSON的轻量级安全通信方式的python库

目录 什么是JWT&#xff1f; JWT的构成 PyJWT库简介 安装PyJWT 生成JWT 验证JWT 使用PyJWT的高级功能 自定义Claims 错误处理 结语 什么是JWT&#xff1f; 在介绍PyJWT这个Python库之前&#xff0c;我们首先需要了解什么是JWT。JWT&#xff0c;全称JSON Web Token&am…...

Golang | Leetcode Golang题解之第223题矩形面积

题目&#xff1a; 题解&#xff1a; func computeArea(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 int) int {area1 : (ax2 - ax1) * (ay2 - ay1)area2 : (bx2 - bx1) * (by2 - by1)overlapWidth : min(ax2, bx2) - max(ax1, bx1)overlapHeight : min(ay2, by2) - max(ay1, by1)…...

新手怎么使用GitLab?

GitLab新手指南: GitLab 是一个非常强大的版本控制和项目管理平台&#xff0c;对于新手来说&#xff0c;开始使用可能会有些许挑战&#xff0c;但只要跟着以下步骤&#xff0c;相信你就能很快上手。 1. 注册与登录 访问网站&#xff1a;打开浏览器&#xff0c;访问 GitLab官网…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...