The Good Student！ - Linux系统相关
type: channel
link: https://www.hxy.bj.cn/category/Linux%E7%B3%BB%E7%BB%9F%E7%9B%B8%E5%85%B3/
items: Keepalived + HAProxy 高可用集群
items: ESXi 虚拟机克隆（CLI方式）
items: Ubuntu静态IP配置
items: 灾备容灾体系建设(编制中)
items: ELK 性能优化实践
items: ELK大数据日志分析平台深度解析
items: OpenVPN
items: CentOS7 YUM源配置
items: Linux新增磁盘扩容
items: Centos安装node18版本以上

Keepalived + HAProxy 高可用集群
type: item
date: 2026-01-17T00:00:11+08:00
description: Keepalived + HAProxy 高可用集群安装部署文档文档版本版本：v1.0本次用于环境：Kubernetes 高可用控制平面 VIP 管理1. 环境规划1.1 服务器信息主机名IP地址角色Keepalived优先级VIPnode1100.100.157.10负载均衡节点1101100.100.157.200node2100.100.157.11负载均衡节点2100100.100.157.200node3100.100.157.12负载均衡节点399100.100.157.2001.2 网络规划虚拟IP（VIP）：100.100.157.200/24服务端口：6443（Kubernetes API Server）VRRP组ID：51认证密码：k8svip2. 前置准备2.1 所有节点执行# 更新系统 apt update && apt upgrade -y # 安装必要工具 apt install -y curl wget vim net-tools nftables # 关闭防火墙或配置放行规则（生产环境建议配置精确规则） systemctl stop ufw systemctl disable ufw2.2 网络配置检查# 确认网卡名称（本环境为 ens34） ip addr show # 确认网络互通 ping -c 3 100.100.157.10 ping -c 3 100.100.157.11 ping -c 3 100.100.157.12 # 检查 VRRP 协议是否允许（协议号 112） nft list ruleset3. HAProxy 安装配置3.1 所有节点安装 HAProxy# 安装 HAProxy apt install -y haproxy # 检查版本 haproxy -v3.2 配置 HAProxy（所有节点配置相同）# 备份原配置 cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak # 创建新配置 cat > /etc/haproxy/haproxy.cfg << 'EOF' global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon maxconn 4096 defaults log global mode tcp # Kubernetes API 使用 TCP 模式 option tcplog # TCP 日志格式 option dontlognull timeout connect 5s timeout client 30s timeout server 30s retries 3 # 统计页面（可选） frontend stats bind *:8404 stats enable stats uri /stats stats refresh 10s stats admin if LOCALHOST # Kubernetes API Server 负载均衡 frontend k8s-api bind *:6443 mode tcp default_backend k8s-api-backend backend k8s-api-backend mode tcp balance roundrobin option tcp-check tcp-check connect port 6443 ssl tcp-check send "PING\r\n" tcp-check expect string "pong" server node1 100.100.157.10:6443 check fall 3 rise 2 inter 2000 weight 1 server node2 100.100.157.11:6443 check fall 3 rise 2 inter 2000 weight 1 server node3 100.100.157.12:6443 check fall 3 rise 2 inter 2000 weight 1 EOF3.3 验证配置并启动 HAProxy# 验证配置文件语法 haproxy -c -f /etc/haproxy/haproxy.cfg # 创建 haproxy 用户（如果不存在） id haproxy || useradd -r haproxy # 创建必要的目录…

ESXi 虚拟机克隆（CLI方式）
type: item
date: 2026-01-15T21:01:00+08:00
description: ESXi 虚拟机克隆（CLI方式）适用于 VMware ESXi 免费版 / 独立主机（无 vCenter），通过 shell 命令实现完整克隆（full clone），避免 UUID/MAC 冲突，确保新 VM 可独立启动。相对于vmware略微麻烦些，ui控制台没有直接克隆的方式，也有可能是我不会哈哈哈。适用场景：没有 vCenter，无法使用图形界面 Clone。需要快速复制 VM 用于测试、备份或扩容。源 VM 已关机（重要！运行中文件被锁定，无法 vmkfstools）。前提条件源 VM 已关机（power off）。已启用 ESXi Shell / SSH（Host → Actions → Services → Enable Secure Shell (SSH)）。有足够 datastore 空间（克隆会复制磁盘数据）。登录为 root（或有足够权限）。步骤总结以 devops-1 → devops-2 示例启用exsi shell查找源 VM 位置find / -name devops-1 # 输出示例：/vmfs/volumes/696858b1-809ba051-0a8c-000c29018345/devops-1进入 datastore 并创建目标目录cd /vmfs/volumes/696858b1-809ba051-0a8c-000c29018345/ mkdir devops-2 cd devops-2复制 .vmx 配置文件cp ../devops-1/devops-1.vmx ./devops-2.vmx克隆虚拟磁盘vmkfstools -i ../devops-1/devops-1.vmdk ./devops-2.vmdk # 或推荐 thin 节省空间（如果源是 thick，也可转 thin） # vmkfstools -i ../devops-1/devops-1.vmdk ./devops-2.vmdk -d thin # 进度显示 100% done. 即完成可选参数说明：-d thin：薄配置（thin provisioning），节省空间，但 I/O 稍慢。-d zeroedthick：默认，预零厚配置-d eagerzeroedthick：预零厚，适合高性能/故障转移场景。编辑 devops-2.vmx 文件（关键步骤！）用 sed 批量替换：sed -i 's/devops-1/devops-2/g' devops-2.vmx这会替换所有出现 "devops-1" 的地方，包括：displayName = "devops-1" → "devops-2"scsi0:0.fileName = "devops-1.vmdk" → "devops-2.vmdk"uuid.bios / uuid.location 等（自动生成新 UUID，避免冲突注册新虚拟机到 ESXi 库附件：自动化克隆脚本#!/bin/sh # ESXi VM 批量克隆 - 指定起始和结束编号版 # 用法示例: # ./clone_vms.sh /vmfs/volumes/696858b1-... devops-1 devops 3 6 # → 克隆出 devops-3 devops-4 devops-5 devops-6 if [ $# -ne 5 ]; then echo "用法: $0 <datastore_path> <source_vm_name> <target_prefix> <start_num> <end_num>" echo "示例:" echo " $0 /vmfs/volumes/696858b1-809ba051-0a8c-000c29018345 devops-1 devops 3 6" echo " → 生成 devops-3 到 devops-6" exit 1 fi DATASTORE_PATH="$1" SOURCE_VM="$2" TARGET_PREFIX="$3" START_NUM="$4" END_NUM="$5" cd "$DATASTORE_PATH" || { echo "无法进入 $DATASTORE_PATH"; exit 1; } [ -d "$SOURCE_VM" ] || { echo "源目录 $SOURCE_VM 不存在"; exit 1; } for i in $(seq "$START_NUM" "$END_NUM"); do TARGET_VM="${TARGET_PREFIX}-${i}" echo "正在克隆: $SOURCE_VM → $TARGET_VM" mkdir -p "$TARGET_VM" || { echo "创建 $TARG…

Ubuntu静态IP配置
type: item
date: 2026-01-15T20:03:30+08:00
description: Ubuntu 24.04 使用 Netplan 配置静态 IP适用于：Ubuntu Server 24.04、Ubuntu Desktop 24.04（使用 netplan 的版本）配置文件路径（常见位置）： /etc/netplan/示例配置文件（双网卡静态 IP）network: version: 2 renderer: networkd # 或 NetworkManager（桌面版常用） ethernets: ens34: # 第一块网卡（名称根据实际情况） dhcp4: false addresses: - 192.168.1.3/24 # IP地址/子网掩码（CIDR表示法） routes: - to: default via: 192.168.1.1 # 默认网关 nameservers: addresses: - 8.8.8.8 - 8.8.4.4 ens35: # 第二块网卡 dhcp4: false addresses: - 192.168.2.3/24 routes: - to: 10.0.0.0/8 via: 192.168.2.1 # 指向特定网段的静态路由 # on-link: true # 可选：如果下一跳不在本地子网常用参数说明参数说明是否必填示例值备注versionNetplan 配置格式版本，目前稳定使用 2必填2不要使用 1renderer后端渲染器选填networkd/NetworkManagerServer 推荐 networkd，桌面推荐 NMdhcp4/dhcp6是否开启 IPv4/IPv6 DHCP必填（静态时设 false）false/true静态 IP 必须设为 falseaddresses本机要绑定的 IP 地址列表（支持多个）静态必填- 192.168.1.3/24CIDR 格式，必带 /24 或 /20 等routes.to目标网络选填default或10.0.0.0/8default表示默认路由routes.via下一跳网关 IP选填192.168.1.1默认网关必填routes.metric路由优先级（数值越小优先级越高）选填100 / 200用于多网关场景nameservers.addressesDNS 服务器列表推荐- 8.8.8.8 - 114.114.114.114至少填一个，否则可能无法解析域名link-local是否启用链路本地地址（169.254.x.x / fe80::）选填[ipv4, ipv6]/[]默认启用，可设为空禁用optional是否为可选接口（开机时不等待该接口 ready 就继续启动）选填true用于次要网卡（如内网口）操作步骤编辑配置文件sudo nano /etc/netplan/00-installer-config.yaml检查语法sudo netplan generate sudo netplan try # 120秒内可回滚正式应用sudo netplan apply验证ip -c addr show ip route ping 8.8.8.8 ping www.google.com

灾备容灾体系建设(编制中)
type: item
date: 2025-11-30T21:59:00+08:00
description: 灾备容灾体系建设一、背景在当前数字信息化建设中，数据是核心资产。无论是数据中台的运行、数字孪生的建模，还是数字可视化的展示，都需要依赖高质量的数据支持。然而，硬件故障、软件错误、网络攻击、自然灾害等不可预见的因素，都可能导致系统崩溃或数据丢失。灾备演练的核心目标是验证企业在突发情况下的应对能力，确保在最短时间内恢复业务运行，最大限度地减少损失。为保障业务连续性和数据安全性，公司亟需建立健全的灾备容灾体系，确保在突发事件发生时，能够快速检测故障并将业务切换至备用系统，将业务中断时间（RTO）和数据丢失量（RPO）控制在可接受范围内。1. 当前现状云上系统：无同城/异地灾备，依赖单地域单可用区或多可用区但未做应用级容灾云下系统：完全单点，无任何本地或异地备份环境数据库、中间件、静态资源均无跨地域备份与恢复机制缺乏灾备切换SOP与演练，RTO/RPO 未定义且实际趋近于无穷大2. 期望效果为云上、云下两套生产系统分别建设一套灾备环境，实现以下核心目标：目标项具体指标要求每套生产系统拥有独立灾备云上生产 → 云上灾备 （异地云/多云）/ 云下生产 → 云下灾备(异地数据中心)数据恢复点目标（RPO）核心数据库 ≤ 3 分钟（DTS数据通过/binlog复制）关键文件/对象存储 ≤ 5 小时业务恢复时间目标（RTO）关键系统 ≤ 5 分钟切换方式手动切换（DNS/负载均衡/全局流量调度）或可升级为半自动/自动切换演练频率每半年至少进行一次完整切换演练并出具报告回切能力具备支持故障修复后平滑回切至原生产环境最终效果： 无论云上生产还是云下生产发生整体故障，都能在可控时间内将其业务与数据快速切换/恢复到各自的灾备环境，对外服务不中断或极短中断，真正做到“两套系统各自有后路”。二、灾备方案1.主流方案排名方案名称RPO / RTO 典型值成本（相对生产）优点缺点1异地主备（Global Active-Passive）RPO ≤ 5分钟 / RTO 30秒～3分钟1.2～1.6倍改造最小、切换最可靠、演练最简单、100%过等保/监管/审计、成本最低RTO 无法做到秒级，极端情况下有几十秒到几分钟中断2同城双活 + 异地主备（2+1）RPO ≤ 1分钟 / RTO 10秒～1分钟1.8～2.5倍同城基本无感、异地仍有可靠兜底、监管最认可的“高级灾备”模式需要同城两套完整环境，建设和网络要求高，成本明显上升3异地双活/多活（单元化）RPO ≈ 0 / RTO ≤ 5秒2.5～4倍用户完全无感知、真正“业务不停”、极端场景下仍可扛区域级故障技术复杂度极高、业务改造巨大、容易脑裂/双写、演练风险极大、成本最高4三中心两主一备（2主1备）RPO ≤ 1分钟 / RTO ≤ 30秒2.2～3倍两个主中心互为备份+异地灾备，三重保险，监管评分最高建设和运维复杂度高，两个主中心要保持强一致，实际落地和演练都很难5同城双活 + 异地异步容灾RPO ≤ 15分钟 / RTO ≤ 4小时1.5～2倍过渡方案，同城做到高可用，异地成本低异地恢复时间长（几小时），属于“冷灾备”，不满足大部分监管要求2.方案选举2.1 主备灾备技术通常采用一主一备的架构，故障时需切换，用户可能感知等待时间。在这种架构下，主备之间无法同时在线，一旦系统出现问题，需要进行架构切换，用户可能会面临系统切换的等候时间。2.2 双活双活技术通过两套同时在线的架构互为灾备，实现无缝切换，确保业务连续性。双活技术采用两套同时在线的架构，互相作为对方的灾备。这种设计确保在主架构出现问题时，另一套双活架构能够无缝接管，实现无缝切换，用户无感知。三、灾备的难点及解决方案1.主备1.1 数据一致性问题2.双活

ELK 性能优化实践
type: item
date: 2025-07-27T22:46:06+08:00
description: 一、背景介绍近一年内对公司的 ELK 日志系统做过性能优化，也对 SkyWalking 使用的 ES 存储进行过性能优化，在此做一些总结。本篇主要是讲 ES 在 ELK 架构中作为日志存储时的性能优化方案。ELK 架构作为日志存储方案二、现状分析1. 版本及硬件配置JDK：JDK1.8\_171-b11 (64 位)ES集群：由3台16核32G的虚拟机部署 ES 集群，每个节点分配 20 G 堆内存ELK版本：6.3.0垃圾回收器：ES 默认指定的老年代（CMS）+ 新生代（ParNew）操作系统：CentOS Linux release 7.4.1708(Core)2. 性能问题随着接入 ELK 的应用越来越多，每日新增索引约 230 个，新增 document 约 3000 万到 5000 万。每日上午和下午是日志上传高峰期，在 Kibana 上查看日志，发现问题：(1) 日志会有 5-40 分钟的延迟(2) 有很多日志丢失，无法查到3. 问题分析3.1 日志延迟首先了解清楚：数据什么时候可以被查到？数据先是存放在 ES 的内存 buffer，然后执行 refresh 操作写入到操作系统的内存缓存 os cache，此后数据就可以被搜索到。所以，日志延迟可能是我们的数据积压在 buffer 中没有进入 os cache 。3.2 日志丢失查看日志发现很多 write 拒绝执行的情况write 线程池拒绝任务的日志.png从日志中可以看出 ES 的 write 线程池已经满负荷，执行任务的线程已经达到最大 16 个线程，而 200 容量的队列也已经放不下新的 task。查看线程池的情况也可以看出 write 线程池有很多写入的任务GET /_cat/thread_pool?v&h=host,name,type,size,active,largest,rejected,completed,queue,queue_sizewrite 线程池拒绝任务的情况.png所以我们需要优化 ES 的 write 的性能。4.解决思路4.1 分析场景ES 的优化分为很多方面，我们要根据使用场景考虑对 ES 的要求。根据个人实践经验，列举三种不同场景下的特点：SkyWalking：一般配套使用 ES 作为数据存储，存储链路追踪数据、指标数据等信息。ELK：一般用来存储系统日志，并进行分析，搜索，定位应用的问题。全文搜索的业务：业务中常用 ES 作为全文搜索引擎，例如在外卖应用中，ES 用来存储商家、美食的业务数据，用户在客户端可以根据关键字、地理位置等查询条件搜索商家、美食信息。这三类场景的特点如下： SkyWalkingELK全文搜索的业务并发写高并发写高并发写并发一般不高并发读并发低并发低并发高实时性要求5分钟以内30秒以内1分钟内数据完整性可容忍丢失少量数据可容忍丢失少量数据数据尽量100%不丢失关于实时性SkyWalking 在实际使用中，一般使用频率不太高，往往是发现应用的问题后，再去 SkyWalking 查历史链路追踪数据或指标数据，所以可以接受几分钟的延迟。ELK 不管是开发、测试等阶段，时常用来定位应用的问题，如果不能快速查询出数据，延迟太久，会耽误很多时间，大大降低工作效率；如果是查日志定位生产问题，那更是刻不容缓。全文搜索的业务中一般可以接受在1分钟内查看到最新数据，比如新商品上架一分钟后才看到，但尽量实时，在几秒内可以可看到。4.2 优化的方向可以从三方面进行优化：JVM 性能调优、ES 性能调优、控制数据来源三、ES性能优化可以从三方面进行优化：JVM 性能调优、ES 性能调优、控制数据来源1. JVM调优第一步是 JVM 调优。因为 ES 是依赖于 JVM 运行，没有合理的设置 JVM 参数，将浪费资源，甚至导致 ES 很容易 OOM 而崩溃。1.1 监控 JVM 运行情况（1）查看 GC 日志问题：Young GC 和 Full GC 都很频繁，特别是 Young GC 频率高，累积耗时非常多。(2) 使用 jstat 看下每秒的 GC 情况参数说明S0：幸存1区当前使用比例S1：幸存2区当前使用比例E：伊甸园区使用比例O：老年代使用比例M：元数据区使用比例CCS：压缩使用比例YGC：年轻代垃圾回收次数FGC：老年代垃圾回收次数FGCT：老年代垃圾回收消耗时间GCT：垃圾回收消耗总时间问题：从 jstat gc 中也可以看出，每秒的 eden 增长速度非常快，很快就满了。1.2 定位 Young GC 频繁的原因1.2.1 检查是否新生代的空间是否太小用下面几种方式都可查看新、老年代内存大小 (1) 使用 jstat -gc pid 查看 Eden 区、老年代空间大小 (2) 使用 jmap -heap pid 查…

ELK大数据日志分析平台深度解析
type: item
date: 2025-07-26T13:03:00+08:00
description: Filebeat+Kafka+Logstash+Elasticsearch构建日志分析系统在现代分布式系统中，日志管理是至关重要的一环。日志不仅用于排查问题，还可以用于监控系统性能、分析用户行为等。为了高效地收集、处理和可视化日志，企业通常采用 Filebeat + Kafka + Logstash + Elasticsearch + Kibana 的组合架构。本文将深入探讨这一架构的工作原理、优势、适用场景以及实现步骤。组件介绍2.1 Filebeat• 功能：轻量级的日志收集工具，专为日志文件设计。• 特点：低资源消耗、支持多种输入输出、易于部署。• 适用场景：收集应用日志、系统日志等。2.2 Kafka• 功能：分布式消息队列，用于解耦数据生产和消费。• 特点：高吞吐量、低延迟、持久化存储、可扩展。• 适用场景：缓冲日志数据、解耦日志收集和数据处理。2.3 Logstash• 功能：数据管道工具，用于收集、过滤、转换和输出数据。• 特点：强大的插件生态系统、支持复杂的数据处理。• 适用场景：日志解析、数据格式化、数据过滤。2.4 Elasticsearch• 功能：分布式搜索引擎，用于存储和索引数据。• 特点：实时搜索、高扩展性、支持全文搜索。• 适用场景：日志存储、实时数据分析。2.5 Kibana• 功能：数据可视化工具，用于查询和展示 Elasticsearch 中的数据。• 特点：丰富的图表类型、交互式仪表盘、易于使用。• 适用场景：日志可视化、监控仪表盘。流程图组件交互详解Filebeat 收集日志并发送到 KafkaFilebeat 是一个轻量级的日志收集器，安装在各个日志源节点（如 Web 服务器、应用程序、容器等）上。Filebeat 的主要功能是读取日志文件并将其发送到 Logstash 或 Kafka。配置 Filebeat 发送到 Kafka： 在 Filebeat 配置文件 filebeat.yml 中，你可以设置 Kafka 输出配置，将日志发送到 Kafka 集群中的特定主题。Filebeat 配置示例：filebeat.inputs: - type: log enabled: true paths: - /var/log/*.log output.kafka: hosts: ["kafka_host:9092"] topic: "logs_topic" codec: jsonKafka 作为消息队列Kafka 在日志收集过程中充当消息队列的角色，将日志数据从 Filebeat 转发到 Logstash。Kafka 作为一个可靠的缓冲层，能够缓解高负载、网络延迟等问题。Kafka 接收 Filebeat 发送的日志，并将其存储在一个或多个分区（broker）中。它支持高吞吐量、持久化和容错，保证日志数据不会丢失。logstash 从kafka消费数据并处理logstash可以配置为kafka消费者，定期从kafka中读取日志数据。logstash可以对数据进行过滤、解析、转换等操作，处理后的数据会被转发到elasticsearch配置logstash从kafka消费数据：在logstash配置文件中，使用kafka input plugin来从kafka中读取数据，并使用elasticsearh output plugin将数据发送到elasticsearchlogstash 配置实例input { kafka { bootstrap_servers => "kafka_host:9092" topics => ["logs_topic"] group_id => "logstash-group" } } filter { # 可在这里进行数据过滤、解析和转换 json { source => "message" } } output { elasticsearch { hosts => ["http://elasticsearch_host:9200"] index => "logs-index-%{+YYYY.MM.dd}" } }kafka 输入插件从kafka中读取数据json过滤将日志数据解析为json格式（假设日志数据是json格式的）elasticsearch输出插件将处理后的数据发送到elasticsearchelasticsearch 存储和索引日志elasticsearch将logstash发送的数据存储为索引文档，并提供快速搜索和聚合功能。可以通过kibana或其他工具查询elasticsearch中的数据elasticseach会对日志数据进行倒排索引，使得可以非常高效的进行全文搜索和数据分析数据会根据指定的索引模版或者动态索引进行映射，并根据需求进行实时分析和可视化示…

OpenVPN
type: item
date: 2025-06-23T09:19:00+08:00
description: OpenVPN原理及部署使用1. 简介 VPN技术通过密钥交换、封装、认证、加密手段在公共网络上建立起私密的隧道，保障传输数据的完整性、私密性和有效性。OpenVPN是近年来新出现的开放源码项目，实现了SSL VPN的一种解决方案。2.应用场景有一些类似这样的情形或需求：1、开发:通过OpenVPN让开发人员连接网站,进行开发测试(在家的时候)2、运维:通过OpenVPN让运维连接内网服务器,或者是连接JUMPSERVER在家里想进入公司网站的管理界面，但管理系统限制了仅允许来自公司IP可以访问想连接到某个特别网站的特别网络应用，但本地的ISP或路由节点不允许您去连接它本地的ISP或路由节点可能会监听您的数据而您不想被它拦截，想找一种可以跳过它的办法,您想访问的网站和应用是基于明文传输，但您希望这个线路是私密的和可靠的。这时候就需要用到VPN来实现。3.OpenVPN服务端配置3.1 环境准备serverIPopenvpn-server公网:100.100.1.1 内网:10.100.240.3client能访问Internet3.2 证书准备流程1) 安装openvpn服务端、证书创建工具#openvpn 服务端、证书工具安装 [root@openvpn-server ~]# yum install -y openvpn easy-rsa #证书工具目录 [root@openvpn-server ~]# rpm -ql easy-rsa /usr/share/easy-rsa/3.0.8/easyrsa ...2) 服务器充当权威机构，创建ca证书#路径太深，新建目录 [root@openvpn-server ~]# mkdir -p /opt/easy-rsa [root@openvpn-server ~]# cp -a /usr/share/easy-rsa/3.0.8/* /opt/easy-rsa/ [root@openvpn-server ~]# cp /usr/share/doc/easy-rsa-3.0.8/vars.example /opt/easy-rsa/vars #修改vars文件，配置默认参数值 [root@openvpn-server ~]# cat > /opt/easy-rsa/vars if [ -z "$EASYRSA_CALLER" ]; then echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2 echo "This is no longer necessary and is disallowed. See the section called" >&2 echo "'How to use this file' near the top comments for more details." >&2 return 1 fi set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "CN" # 国家 set_var EASYRSA_REQ_PROVINCE "Beijing" # 省 set_var EASYRSA_REQ_CITY "ShangHai" # 城市 set_var EASYRSA_REQ_ORG "zxc.com" # 组织 set_var EASYRSA_REQ_EMAIL "123456@qq.com" # 邮箱 set_var EASYRSA_NS_SUPPORT "yes" EOF #配置完var后 检查 权威机构信息 [root@openvpn-server easy-rsa]# tree . |-- easyrsa |-- openssl-easyrsa.cnf |-- vars #var ca权威机构信息 `-- x509-types |-- ca |-- client |-- code-signing |-- COMMON |-- email |-- kdc |-- server `-- serverClient 1 directory, 11 files #初始化，会在当前目录创建PKI目录，用于存储证书 [root@openvpn-server easy-rsa]# ./easyrsa init-pki Note: using Easy-RSA configuration from: /opt/easy-rsa/vars #正在使用来自于vars init-pki complete; you may now create a CA or requests. #初始化完成 显示你可以尝试创建 CA证书 Your newly c…

CentOS7 YUM源配置
type: item
date: 2025-06-22T22:14:00+08:00
description: 每次新机器都配置很麻烦，记录一下如何配置网络yum一、配置本地yum源首先将centos自带的网络yum源删掉（自带的默认从centos官网下载软件，服务器在国外，非常不稳定） [root@cloud ~]# rm -rf /etc/yum.repos.d/*创建挂载点并挂载镜像[root@cloud ~]# mkdir /opt/centos [root@cloud ~]# mount /dev/cdrom /opt/centos/ mount: /dev/sr0 写保护，将以只读方式挂载创建并编写本地yum源配置文件，编写完成之后wq保存退出[root@cloud ~]# vi /etc/yum.repos.d/local.repo [centos] name=centos # Yum源的名称，用于描述这个源 baseurl=file:///opt/centos # 本地Yum源的位置，指向挂载点目录 gpgcheck=0 # 不进行GPG签名检查 enabled=1 # 启用该Yum源清除缓存原来的生成新的缓存并列出当前系统中已配置和启用的Yum仓库（repositories）及其状态[root@cloud ~]# yum clean all 已加载插件：fastestmirror, langpacks 正在清理软件源： centos Cleaning up list of fastest mirrors Other repos take up 1.0 G of disk space (use --verbose for details) [root@cloud ~]# yum makecache 已加载插件：fastestmirror, langpacks Determining fastest mirrors centos | 3.6 kB 00:00:00 (1/4): centos/group_gz | 153 kB 00:00:00 (2/4): centos/primary_db | 3.3 MB 00:00:00 (3/4): centos/other_db | 1.3 MB 00:00:00 (4/4): centos/filelists_db | 3.3 MB 00:00:00 元数据缓存已建立 [root@cloud ~]# yum repolist 已加载插件：fastestmirror, langpacks Loading mirror speeds from cached hostfile 源标识 源名称 状态 centos centos 4,070 repolist: 4,070下载httpd测试一下[root@cloud ~]# yum install -y httpd 已加载插件：fastestmirror, langpacks Loading mirror speeds from cached hostfile 正在解决依赖关系 --> 正在检查事务 ---> 软件包 httpd.x86_64.0.2.4.6-95.el7.centos 将被 安装 --> 正在处理依赖关系 httpd-tools = 2.4.6-95.el7.centos，它被软件包 httpd-2.4.6-95.el7.centos.x86_64 需要 --> 正在处理依赖关系 /etc/mime.types，它被软件包 httpd-2.4.6-95.el7.centos.x86_64 需要 --> 正在处理依赖关系 libaprutil-1.so.0()(64bit)，它被软件包 httpd-2.4.6-95.el7.centos.x86_64 需要 --> 正在处理依赖关系 libapr-1.so.0()(64bit)，它被软件包 httpd-2.4.6-95.el7.centos.x86_64 需要 --> 正在检查事务 ---> 软件包 apr.x86_64.0.1.4.8-7.el7 将被 安装 ---> 软件包 apr-util.x86_64.0.1.5.2-6.el7 将被 安装 ---> 软件包 httpd-tools.x86_64.0.2.4.6-95.el7.centos 将被 安装 ---> 软件包 mailcap.noarch.0.2.1.41-2.el7 将被 安装 --> 解决依赖关系完成 依赖关系解决 ======================================================================================================================== Package 架构 版本 源 大小 =====…

Linux新增磁盘扩容
type: item
date: 2025-06-09T16:18:04+08:00
description: Linux磁盘扩容需求：新增第二块磁盘 sdb 的空间（30G）扩展到当前的根目录 / 下，典型的 “添加新磁盘 → 扩容已有 LVM 根分区” 的操作流程。你的系统使用了 LVM（逻辑卷管理），所以我们可以把 sdb 加入到现有的 LVM 卷组并扩展根目录。✅ 操作目标将 sdb → 加入 LVM 卷组 centos → 扩容 centos-root → 扩容 / 挂载点空间🧰 操作步骤（谨慎操作，建议备份重要数据）① 确认当前卷组信息vgs输出示例（你应该会看到一个名为 centos 的卷组）：VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <29.00g 0② 对 sdb 创建物理卷（PV）pvcreate /dev/sdb成功输出类似：Physical volume "/dev/sdb" successfully created.③ 把 /dev/sdb 加入现有的卷组（VG）vgextend centos /dev/sdb成功输出类似：Volume group "centos" successfully extended④ 扩容逻辑卷（LV）到占满所有空间lvextend -l +100%FREE /dev/centos/root（这会将 VG 中剩余所有空间分配给 centos-root，即 /）⑤ 扩容文件系统如果你用的是 xfs 文件系统（CentOS 7+ 默认）：xfs_growfs /如果你用的是 ext4 文件系统（检查用 df -T /）：resize2fs /dev/centos/root✅ 完成后确认df -h /你应该可以看到 / 挂载点从原来的 26G 增加到了接近 56G（即原有 26G + sdb 的 30G）。[root@cicd_gitlab ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 2.9G 0 2.9G 0% /dev tmpfs 2.9G 84K 2.9G 1% /dev/shm tmpfs 2.9G 18M 2.9G 1% /run tmpfs 2.9G 0 2.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 56G 25G 32G 45% / /dev/sda1 1014M 189M 826M 19% /boot tmpfs 581M 0 581M 0% /run/user/0 [root@cicd_gitlab ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 30G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 29G 0 part ├─centos-root 253:0 0 56G 0 lvm / └─centos-swap 253:1 0 3G 0 lvm [SWAP] sdb 8:16 0 30G 0 disk └─centos-root 253:0 0 56G 0 lvm / sr0 11:0 1 1024M 0 rom [root@cicd_gitlab ~]# 🛑 注意事项操作过程对系统影响较大，请在低峰时段操作或备份重要数据。如果后续计划卸载或缩容，建议新磁盘单独挂载，而不是扩展 /。

Centos安装node18版本以上
type: item
date: 2025-06-04T13:28:32+08:00
description: Node.js 安装（兼容旧版 glibc 的方案）在 CentOS 等 Linux 系统中运行 Node.js 时，可能遇到如下错误：node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)这是由于系统中的 glibc 版本过低（如 CentOS 7 的默认 glibc 为 2.17），而某些 Node.js 版本依赖更新版本的 glibc（如 2.27 及以上）。✅ 解决方案为避免升级系统或使用 Docker，可使用 专为旧版 glibc 编译的 Node.js 预构建版本，例如：node-v18.18.0-linux-x64-glibc-217.tar.gz该版本可在 CentOS 7 等使用 glibc 2.17 的系统中正常运行。🔧 安装步骤1️⃣ 下载 Node.js 版本进入 Node.js 非官方兼容版本下载页面，下载：node-v18.18.0-linux-x64-glibc-217.tar.gz2️⃣ 上传至服务器例如上传到目录：/root/node/3️⃣ 解压安装包cd /root/node tar -xzvf node-v18.18.0-linux-x64-glibc-217.tar.gz4️⃣ 重命名目录（可选）mv node-v18.18.0-linux-x64-glibc-217 node-v185️⃣ 配置环境变量创建配置文件 /etc/profile.d/nodejs.sh：vi /etc/profile.d/nodejs.sh添加内容如下：export NODE_HOME=/root/node/node-v18 export PATH=.:$NODE_HOME/bin:$PATH保存后使其生效：source /etc/profile6️⃣ 配置国内 npm 镜像源（建议）为加快依赖安装速度，设置为阿里云镜像：npm config set registry=https://registry.npmmirror.com✅ 验证安装node -v npm -v确保输出的版本正确，即代表安装成功。📌 总结通过该方法，可 避免升级系统 glibc，而直接使用为旧系统编译的 Node.js 版本，适合在 CentOS 7 等老系统上运行现代 Node.js 应用。