字数:
2125
·
阅读:
10 分钟
·
访问:
-
概述 Redis 作为高性能的内存数据库,其性能表现很大程度上取决于参数配置的合理性。本文将详细介绍 Redis 的核心参数,并针对不同的部署架构(单机、主从、哨兵、集群)提供优化配置建议。
一、Redis 核心参数详解 1.1 基础配置参数 bind 说明:指定 Redis 监听的网络接口 默认值:127.0.0.1 建议:生产环境建议绑定内网 IP,避免使用 0.0.0.0 bind 192.168.1.100 port 说明:Redis 监听端口 默认值:6379 建议:可修改为非默认端口以提高安全性 port 6379 protected-mode 说明:保护模式,防止未授权访问 默认值:yes 建议:生产环境必须开启,配合 requirepass 使用 protected-mode yes requirepass 说明:设置访问密码 默认值:无 建议:生产环境必须设置强密码 requirepass YourStrongPassword@2025 timeout 说明:客户端空闲多少秒后关闭连接,0 表示禁用 默认值:0 建议:设置 300 秒,避免僵尸连接 timeout 300 tcp-keepalive 说明:TCP 连接保活时间(秒) 默认值:300 建议:保持默认或设置为 60 tcp-keepalive 60 1.2 内存管理参数 maxmemory 说明:Redis 最大内存使用量 默认值:0(不限制) 建议:设置为物理内存的 60%-70%,留出空间给系统和持久化 maxmemory 4gb maxmemory-policy 说明:内存淘汰策略 可选值: noeviction:不淘汰,写入失败(默认) allkeys-lru:对所有 key 使用 LRU 算法淘汰 volatile-lru:对设置了过期时间的 key 使用 LRU 淘汰 allkeys-random:随机淘汰所有 key volatile-random:随机淘汰有过期时间的 key volatile-ttl:淘汰即将过期的 key allkeys-lfu:对所有 key 使用 LFU 算法淘汰 volatile-lfu:对设置了过期时间的 key 使用 LFU 淘汰 建议:根据业务场景选择,缓存场景推荐 allkeys-lru maxmemory-policy allkeys-lru maxmemory-samples 说明:LRU/LFU 算法采样数量 默认值:5 建议:增加到 10 可提高准确性,但会增加 CPU 开销 maxmemory-samples 10 1.字数:
5698
·
阅读:
27 分钟
·
访问:
-
目录 为什么需要 Redis 集群 Redis 集群核心概念 集群架构深度解析 搭建第一个 Redis 集群 集群操作命令大全 数据分片与路由 故障检测与自动恢复 集群扩容与缩容 性能优化与最佳实践 常见问题与故障排查 1. 为什么需要 Redis 集群 1.1 单机 Redis 的局限性 问题一:容量瓶颈
单机 Redis 内存上限: - 理论上限:512GB(受操作系统限制) - 实际生产:通常 32GB-64GB - 问题:业务数据超过单机容量怎么办? 问题二:性能瓶颈
单机 QPS 极限: - 读操作:约 10万 QPS - 写操作:约 8万 QPS - 问题:高并发场景无法满足 问题三:可用性问题
单点故障: - 主机宕机 → 服务完全不可用 - 硬件故障 → 数据可能丢失 - 维护升级 → 必须停机 1.2 Redis 集群的优势 特性 单机 Redis 主从复制 Redis 集群 数据容量 受限于单机内存 受限于单机内存 ✅ 水平扩展,无限容量 读性能 约 10万 QPS ✅ 可扩展(主从分离) ✅ 线性扩展 写性能 约 8万 QPS 受限于主节点 ✅ 线性扩展 高可用 ❌ 单点故障 ⚠️ 需要 Sentinel ✅ 自动故障转移 数据分片 ❌ 不支持 ❌ 不支持 ✅ 自动分片 2.字数:
581
·
阅读:
3 分钟
·
访问:
-
1. 引言 当你在 GitHub 上创建开源项目时,选择合适的开源协议(License)是至关重要的一步。它不仅定义了他人如何使用你的代码,也保护了你作为作者的权益。本文将详细介绍常见的开源协议及其使用场景,帮助你做出明智的选择。
2. 为什么需要开源协议? 没有协议的代码在法律上属于"保留所有权利",这意味着:
❌ 他人不能合法使用、修改或分发你的代码 ❌ 即使代码公开在 GitHub 上,也不代表可以随意使用 ✅ 添加协议后,明确了使用权限,让你的项目真正"开源" 3. 常见开源协议详解 3.1. MIT License(最宽松、最流行) 特点:
✅ 极其简单宽松 ✅ 允许商业使用 ✅ 可以修改、分发、私有使用 ✅ 只需保留版权声明和许可声明 限制:
无担保声明(使用风险自负) 不提供专利授权 适合场景:
个人项目想要最大化传播 希望被广泛采用,包括商业项目 不想有太多法律限制 知名项目: jQuery, Node.js, React
3.2. Apache License 2.0(企业友好) 特点:
✅ 允许商业使用 ✅ 明确的专利授权 ✅ 可以修改、分发 ✅ 必须声明修改内容 限制:
必须包含 NOTICE 文件 不能使用项目商标 适合场景:
涉及专利的项目 希望企业采用的项目 需要明确贡献者专利权的场景 知名项目: Android, Apache 系列软件, Kubernetes
3.3. GNU GPL v3.字数:
1190
·
阅读:
6 分钟
·
访问:
-
1. 开启性能模式 2. 部署 mysqld-exporter 2.1. collectors 解读 2.2. 单实例 2.3. 主从实例 3. 告警规则 3.1. MySQL 服务可用性告警 3.2. 主从复制状态告警 3.3. 连接数告警 3.4. InnoDB 缓冲池告警 3.5. 查询性能告警 3.6. 锁等待告警 3.7. 二进制日志告警 3.8. 复制错误告警 4. 部署建议 5. 注意事项 1. 开启性能模式 [mysqld] performance_schema=1 optimizer_search_depth = 0 optimizer_switch = index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on performance_schema 解释:
1 或 ON:启用(推荐) 0 或 OFF:禁用 optimizer_search_depth 解释:
控制 MySQL 查询优化器在探索执行计划时的搜索深度 默认值:62(表示“自动”) 设置为 0:表示“自动深度” 设置为 1-62:限制搜索范围 optimizer_switch 解释:
index_merge=on 启用索引合并优化(总开关) ‘index_merge_union=on’ 启用 OR 条件下的索引联合(如 WHERE a=1 OR b=2) ‘index_merge_sort_union=on’ 启用排序后的索引联合(适用于无索引排序的 OR) ‘index_merge_intersection=on’ 启用 AND 条件下的索引交集(如 WHERE a=1 AND b=2,但 a、b 分属不同索引) 2.字数:
235
·
阅读:
2 分钟
·
访问:
-
在日常运维工作中,MySQL 的 binlog(二进制日志) 往往是最后一道“后悔药”。 很多新手 DBA 或开发者认为 单实例不需要 binlog,直到哪一天手滑执行了 DROP DATABASE,才发现: ——没有 binlog,数据只能恢复到最近一次全量备份; ——有了 binlog,我们就能基于 时间点恢复(PITR) 把数据救回来。
这篇文章将从 开启 binlog、误删除恢复演练 到 生产环境最佳实践,带你完整走一遍。
一、为什么要开启 binlog? binlog 的作用主要有三点:
数据恢复:结合全量备份,支持时间点恢复(Point-In-Time Recovery,PITR)。 主从复制:MySQL 主从架构依赖 binlog。 审计与排查:可以追溯数据修改的来源与内容。 不开启 binlog,你的恢复手段就只能依赖全量备份,而全量备份通常是 T+1 或每周一次,数据丢失窗口巨大。
二、如何开启 binlog 1. 修改 MySQL 配置 在 /etc/my.cnf(或 /etc/mysql/my.cnf)中,[mysqld] 段添加:
[mysqld] # 开启 binlog log_bin = /var/lib/mysql/mysql-bin # server-id 必须非0(即使单机也要设置) server-id = 1 # binlog 格式:ROW 更安全(记录行级别变化) binlog_format = ROW # binlog 过期清理天数, 5.7 expire_logs_days = 7 # binlog 过期清理天数, 8.字数:
647
·
阅读:
4 分钟
·
访问:
-
MySQL作为世界上最流行的开源关系型数据库,其性能很大程度上取决于配置参数的合理设置。本文将深入分析MySQL核心配置参数,提供实用的优化公式和不同环境下的配置建议。
核心参数详解 1. InnoDB Buffer Pool 配置 innodb_buffer_pool_size - 数据缓存池 InnoDB Buffer Pool是MySQL性能的核心,缓存数据页和索引页,直接影响查询性能。
作用机制:
缓存热点数据页,减少磁盘I/O 提供MVCC快照读支持 管理脏页刷新策略 配置公式:
-- 专用MySQL服务器 innodb_buffer_pool_size = 总内存 × 0.75 到 0.8 -- 混合用途服务器 innodb_buffer_pool_size = 总内存 × 0.5 到 0.6 -- 容器化环境 innodb_buffer_pool_size = 容器内存 × 0.6 到 0.7 innodb_buffer_pool_instances - 实例分割 将Buffer Pool分割成多个实例,减少并发竞争。
配置规则:
-- 基础公式 instances = min(CPU核心数 / 2, buffer_pool_size_GB) -- 但需满足:buffer_pool_size = chunk_size × instances 的整数倍 -- 默认chunk_size = 128MB 具体建议:字数:
1203
·
阅读:
6 分钟
·
访问:
-
在 Kubernetes 集群的运维过程中,网络问题是最常见也是最复杂的故障类型之一。本文将基于一个真实的生产环境案例,详细介绍如何系统性地排查和解决 K8s 网络问题,涵盖从基础网络连通性到 DNS 解析的完整故障链条。
案例背景 在一个运行 Kubernetes 1.29 的生产集群中,我们遇到了以下问题:
宿主机网络正常,可以访问外网 容器内无法访问外网 使用 Flannel 作为 CNI 网络插件 后续发现容器无法 ping 通 CoreDNS Service IP 通过深入排查,我们发现了一个有趣的现象:DNS 配置错误不仅影响域名解析,还会导致整个 Service 网络不可达。
第一部分:容器外网访问故障排查 1.1 基础网络连通性检查 当容器无法访问外网时,首先需要验证网络的分层连通性:
# 进入问题 Pod 测试网络 kubectl exec -it <pod-name> -- /bin/sh # 测试容器到节点网络 ping 10.244.0.1 # Pod 网关,通常是节点IP # 测试集群内部网络 nslookup kubernetes.default.svc.cluster.local # 测试外网IP连通性 ping 8.8.8.8 # 测试外网DNS解析 nslookup google.com 诊断要点:
如果 ping 节点 IP 不通:CNI 网络问题 如果 ping 外网 IP 不通:NAT/路由问题 如果 IP 通但 DNS 不通:DNS 配置问题 1.字数:
1399
·
阅读:
7 分钟
·
访问:
-
Linux 系统提供了丰富的网络工具来帮助管理员监控、诊断和排查网络问题。本文将详细介绍常用的网络工具使用方法,并提供实际的故障排查案例。
概述 网络故障排查是系统管理员的重要技能。掌握以下工具能够帮助快速定位和解决网络问题:
netstat:显示网络连接、路由表和网络接口信息 ss:现代化的 netstat 替代工具,性能更好 lsof:列出打开的文件和网络连接 tcpdump:网络数据包捕获和分析工具 ping/traceroute:网络连通性测试工具 nmap:网络扫描和端口检测工具 netstat 命令详解 基本语法 netstat [选项] 常用选项 选项 描述 -a 显示所有连接和监听端口 -t 显示 TCP 连接 -u 显示 UDP 连接 -n 以数字形式显示地址和端口 -l 只显示监听状态的端口 -p 显示进程 ID 和名称 -r 显示路由表 -i 显示网络接口统计 -s 显示网络统计信息 实用示例 1. 查看所有网络连接 # 显示所有 TCP 和 UDP 连接 netstat -an # 显示所有 TCP 连接,包含进程信息 netstat -antp # 显示所有 UDP 连接,包含进程信息 netstat -anup 2. 查看监听端口 # 查看所有监听端口 netstat -ln # 查看 TCP 监听端口 netstat -lnt # 查看 UDP 监听端口 netstat -lnu # 查看监听端口及对应进程 netstat -lntp 3.字数:
913
·
阅读:
5 分钟
·
访问:
-
Systemd 是现代 Linux 系统的核心组件,负责系统初始化和服务管理。本文将全面介绍 Systemd 和 Systemctl 的使用方法,从基础操作到高级配置。
Systemd 简介 什么是 Systemd Systemd 是 Linux 系统的初始化系统和服务管理器,它替代了传统的 SysV init 系统。主要特点包括:
并行启动:提高系统启动速度 按需启动:只在需要时启动服务 依赖管理:自动处理服务间的依赖关系 统一管理:提供统一的服务管理接口 日志集成:集成了完整的日志系统 核心概念 Unit(单元):Systemd 管理的基本对象,包括服务、挂载点、设备等 Service(服务):最常见的 Unit 类型,用于管理后台进程 Target(目标):类似于传统的运行级别,定义系统状态 Socket(套接字):用于进程间通信的 Unit Unit 类型 类型 扩展名 描述 Service .service 系统服务 Target .target 多个 Unit 的组合 Socket .socket 套接字 Mount .mount 挂载点 Timer .timer 定时器 Path .path 路径监控 Systemctl 基础命令 服务控制命令 启动和停止服务 # 启动服务 systemctl start <service_name> systemctl start nginx # 停止服务 systemctl stop <service_name> systemctl stop nginx # 重启服务 systemctl restart <service_name> systemctl restart nginx # 重新加载配置(不重启服务) systemctl reload <service_name> systemctl reload nginx # 重新加载或重启(如果不支持 reload) systemctl reload-or-restart <service_name> 服务状态查询 # 查看服务状态 systemctl status <service_name> systemctl status nginx # 检查服务是否运行 systemctl is-active <service_name> # 检查服务是否启用 systemctl is-enabled <service_name> # 检查服务是否失败 systemctl is-failed <service_name> 开机启动管理 # 设置开机启动 systemctl enable <service_name> systemctl enable nginx # 取消开机启动 systemctl disable <service_name> systemctl disable nginx # 启用并立即启动 systemctl enable --now <service_name> # 禁用并立即停止 systemctl disable --now <service_name> # 屏蔽服务(完全禁用) systemctl mask <service_name> # 取消屏蔽 systemctl unmask <service_name> 系统管理命令 系统状态和信息 # 查看系统状态 systemctl status # 列出所有服务 systemctl list-units --type=service # 列出所有启用的服务 systemctl list-unit-files --type=service --state=enabled # 列出失败的服务 systemctl --failed # 查看启动时间 systemd-analyze # 查看启动时间详情 systemd-analyze blame # 查看启动链 systemd-analyze critical-chain 系统控制 # 重启系统 systemctl reboot # 关闭系统 systemctl poweroff # 挂起系统 systemctl suspend # 休眠系统 systemctl hibernate # 进入救援模式 systemctl rescue # 进入紧急模式 systemctl emergency 配置管理 # 重新加载 systemd 配置 systemctl daemon-reload # 重新执行所有生成器 systemctl daemon-reexec # 清理失效的符号链接 systemctl reset-failed 服务状态详解 服务状态类型 状态 描述 active (running) 服务正在运行 active (exited) 服务已成功执行并退出 active (waiting) 服务正在等待事件 inactive (dead) 服务未运行 activating 服务正在启动 deactivating 服务正在停止 failed 服务启动失败 启用状态类型 状态 描述 enabled 开机启动已启用 disabled 开机启动已禁用 static 服务不能被启用,只能被其他服务依赖 masked 服务被屏蔽,无法启动 indirect 服务被其他启用的服务间接启用 自定义服务配置 服务文件位置 # 系统服务目录(优先级高) /etc/systemd/system/ # 软件包安装的服务目录 /lib/systemd/system/ /usr/lib/systemd/system/ # 用户服务目录 ~/.字数:
993
·
阅读:
5 分钟
·
访问:
-
一、MySQL 主从复制概述 MySQL 主从复制(Replication)是保障数据库 高可用、读写分离、数据冗余与灾备 的核心机制。 它的本质是:主库记录日志 → 从库拉取日志 → 从库重放日志,最终实现数据同步。
1.1 应用场景 读写分离:主库写、从库读,缓解单点压力 异地容灾:主库崩溃时,从库快速接管 数据备份:从库承担备份任务,减轻主库负担 数据分析:从库专门用于报表和数据分析 版本升级:通过主从复制实现平滑升级 1.2 MySQL 版本演进对比 特性 MySQL 5.6 MySQL 5.7 MySQL 8.0 GTID 基础支持 完善稳定 增强功能 多线程复制 基于库 基于事务组 基于写集合 Crash Safe 部分支持 完全支持 增强稳定性 在线DDL 有限支持 大幅改进 Instant DDL Clone插件 ❌ ❌ ✅ Redo Log 传统架构 优化改进 重新设计 复制过滤 基础功能 增强功能 更灵活 二、MySQL 5.7 主从复制核心特性 2.1 GTID(全局事务标识符) MySQL 5.7 中 GTID 已经非常成熟稳定,是生产环境的首选:
GTID 优势: