👋 Welcome to my blog! ✨

  • 一个热爱技术、乐于记录与分享的人。

  • 不求深刻,但求坦诚与持续。

etcd集群部署指南

本文记录了在 Linux 环境下使用 cfssl 工具从零开始签发证书并部署高可用 etcd 集群的完整步骤。 一、证书签发与配置 1. 安装 cfssl 工具 curl -s -L -o /usr/bin/cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 curl -s -L -o /usr/bin/cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 curl -s -L -o /usr/bin/cfssl-certinfo https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 chmod +x /usr/bin/cfssl* 2. 签发 CA 证书 创建 CA 配置文件 ca-csr.json: cat > ca-csr.json << EOF { "CN": "kubernetes-ca", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "GD", "L": "GZ", "O": "K8S", "OU": "OP" } ], "ca": { "expiry": "876000h" } } EOF 生成 CA 证书: ...

2026年10月12日 · 2 分钟 · 334 字 · xijiangzhu

Docker Compose搭建Nginx+PHP+MySQL环境

本文通过一个 demo,使用 Docker Compose 一键编排 Nginx + PHP-FPM + MySQL 三个容器,搭建一套常见的 PHP 运行环境,并验证 PHP 能够连接 MySQL。 版本说明:本文基于较早的版本编写(Compose 1.19.0、PHP 7.2、MySQL 5.7),这些版本都已停止维护。思路和写法仍然适用,实际使用时建议换成较新的镜像版本,文末「使用提示」里有具体说明。 一、镜像选择 1. Nginx nginx 官方镜像使用 latest tag。 2. PHP PHP 版本较多,可以在 PHP 官方镜像中选一个 tag。本文使用 7.2-fpm(作者使用 latest 无法正常启动)。 PHP 的 Dockerfile 要让 PHP 连接 MySQL,需要在 Docker 官方的 PHP 镜像上额外安装 mysqli 扩展,所以用 Dockerfile 构建一个新镜像。 新建 php-mysqli 目录: mkdir php-mysqli cd php-mysqli vi Dockerfile 编辑 Dockerfile,内容如下: FROM php:7.2-fpm RUN apt-get update \ && docker-php-ext-install mysqli FROM php:7.2-fpm:表示基于 php:7.2-fpm 镜像。 RUN 后面的指令:在构建镜像时执行,用来安装扩展。 这里不需要手动 build 镜像,后面使用 docker-compose 时会自动构建。 ...

2026年10月12日 · 3 分钟 · 599 字 · xijiangzhu

Hexo安装和使用

Hexo 是一个基于 Node.js 的快速、简洁的静态博客框架,支持 Markdown 写作,可以一键部署到 GitHub Pages、Vercel 等平台。本文介绍 Hexo 的安装流程、NexT 主题的安装与配置,以及日常使用的常用命令。 一、环境准备 Hexo 依赖 Node.js 和 Git,请先安装。 1. 安装 Node.js 前往 Node.js 官网 下载 LTS(长期支持)版本并安装。 2. 安装 Git 前往 Git 官网 下载安装,macOS 与 Linux 通常已自带。 3. 验证安装 node -v npm -v git --version 三条命令都能输出版本号,说明环境就绪。 国内网络下 npm 下载较慢,可以切换镜像: npm config set registry https://registry.npmmirror.com 二、安装 Hexo 1. 全局安装 hexo-cli npm install -g hexo-cli 验证: hexo -v 2. 初始化博客 hexo init myblog cd myblog npm install myblog 是博客目录名,可以自定义。 初始化完成后,目录结构如下: myblog/ ├── _config.yml # 站点配置文件 ├── package.json # 依赖信息 ├── scaffolds/ # 文章模板 ├── source/ # 资源文件夹 │ ├── _drafts/ # 草稿 │ └── _posts/ # 文章 └── themes/ # 主题文件夹 3. 本地预览 hexo server 浏览器访问 http://localhost:4000,看到默认页面即安装成功。按 Ctrl + C 停止服务。 ...

2026年10月12日 · 3 分钟 · 555 字 · xijiangzhu

Kubectl常用命令整理

本文整理 kubectl 日常使用中最常用的命令,按功能分类:查看资源、删除资源、查看日志、创建与更新、伸缩、调试、节点维护和应用更新回滚,方便随时查阅。 零、常用选项 选项 说明 -n <命名空间> 指定命名空间,不写则使用当前默认命名空间 --all-namespaces / -A 所有命名空间 -o wide / -o yaml / -o json 指定输出格式 -l <标签> 按标签筛选资源 -f <文件> 指定 YAML / JSON 文件 一、get(查看资源) # get 命令的基本输出 kubectl get services # 列出当前命名空间下的所有 services kubectl get pods --all-namespaces # 列出所有命名空间下的全部 Pods kubectl get pods -o wide # 列出当前命名空间下的全部 Pods,并显示更详细的信息 kubectl get deployment my-dep # 列出某个特定的 Deployment kubectl get pods # 列出当前命名空间下的全部 Pods kubectl get pod my-pod -o yaml # 获取一个 Pod 的 YAML kubectl get node -o wide # 列出所有节点,并显示详细信息 # 显示所有 Pods 的标签(或任何其他支持标签的 Kubernetes 对象) kubectl get pods --show-labels # 列出当前命名空间下所有 Services,按名称排序 kubectl get services --sort-by=.metadata.name 二、delete(删除资源) # 删除在 pod.json 中指定的类型和名称的 Pod kubectl delete -f ./pod.json # 删除名称为 "baz" 和 "foo" 的 Pod 和服务 kubectl delete pod,service baz foo # 删除包含 name=myLabel 标签的 Pods 和服务 kubectl delete pods,services -l name=myLabel # 删除在 mynamespace 命名空间中全部的 Pods 和服务 kubectl delete pod,svc --all -n mynamespace # 删除所有与 pattern1 或 pattern2 awk 模式匹配的 Pods kubectl get pods -n mynamespace --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs kubectl delete -n mynamespace pod 删除操作不可恢复,尤其是带 --all 的命令,执行前请确认命名空间和范围。 ...

2026年10月12日 · 5 分钟 · 1022 字 · xijiangzhu

KVM常用操作整理

本文整理 KVM 虚拟化日常运维中最常用的操作,包括桥接网络配置、虚拟机的创建与导入、磁盘格式转换、克隆、迁移、磁盘扩容等,方便随时查阅。 一、网络桥接配置 桥接后,虚拟机可以像物理机一样直接获得局域网 IP。下面有两种配置方法。 方法 1:修改网卡配置文件 修改完成后直接重启系统,不要只重启网卡。 配置文件位于 /etc/sysconfig/network-scripts/ 目录下(CentOS / RHEL 系)。 创建桥接网卡配置 ifcfg-br0: vim ifcfg-br0 DEVICE="br0" ONBOOT="yes" TYPE="Bridge" BOOTPROTO="none" IPADDR="192.168.19.196" GATEWAY="192.168.19.1" STP="on" DELAY="0" DNS1=192.168.19.1 DNS2=202.96.128.86 修改物理网卡配置 ifcfg-enp6s0,让它加入网桥: vim ifcfg-enp6s0 DEVICE=enp6s0 ONBOOT=yes BRIDGE="br0" 注意:物理网卡名称(这里是 enp6s0)和 IP、网关、DNS 都要按实际环境替换。 方法 2:命令行操作 执行后网络会中断,重启系统后恢复正常。 # 创建网桥 virsh iface-bridge eth0 br0 # 删除 virbr0 虚拟交换机(默认 NAT 网络) virsh net-destroy default virsh net-undefine default 问题:虚拟机可以 ping 通 IP,但无法 ping 通域名 这通常是网桥的流量被宿主机的 iptables / 防火墙规则过滤导致的。在宿主机上关闭桥接流量过滤。 ...

2026年10月12日 · 3 分钟 · 520 字 · xijiangzhu

mysqldump常用参数详解

mysqldump 是 MySQL 自带的逻辑备份工具,可以把数据库导出为 SQL 文件。本文按功能分类整理它的常用参数,每个参数附带示例,最后给出几条常用的备份与恢复组合命令。 说明:本文示例均使用 -uroot -p 连接数据库,-p 后面不写密码,执行时会提示输入,避免密码留在命令行和 shell 历史里。 一、连接相关参数 --host, -h:需要导出的主机。 mysqldump -uroot -p --host=localhost --all-databases --port, -P:连接数据库的端口号。 mysqldump -uroot -p --host=127.0.0.1 --port=3306 --all-databases --user, -u:指定连接的用户名。 --password, -p:连接数据库的密码。-p 后面直接跟密码时不能有空格(如 -p123456),不推荐这样写;只写 -p 则会交互式提示输入。 --socket, -S:指定连接 MySQL 的 socket 文件位置,默认路径是 /tmp/mysql.sock。 mysqldump -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock 二、导出范围相关参数 --all-databases, -A:导出全部数据库。 mysqldump -uroot -p --all-databases --databases, -B:导出指定的几个数据库,参数后面所有的名字都被当作数据库名。 mysqldump -uroot -p --databases test mysql --tables:覆盖 --databases(-B)参数,后面所有的名字都被当作表名。导出指定表时,通常直接写成"库名 表名1 表名2"即可: mysqldump -uroot -p test t1 t2 --ignore-table:不导出指定的表。要忽略多个表时,需要重复多次,每次一个表,每个表必须同时写明数据库名和表名,格式为 --ignore-table=database.table1 --ignore-table=database.table2。 ...

2026年10月12日 · 4 分钟 · 657 字 · xijiangzhu

MySQL常用语法速查

本文整理 MySQL 日常开发和运维中最常用的语法,包括数据库、表、表结构、索引、视图、函数、存储过程和触发器,方便随时查阅。 一、数据库 -- 创建一个数据库 create database k default character set utf8 collate utf8_general_ci; -- 删除一个数据库 drop database if exists k; 提示:utf8 在 MySQL 中实际只支持 3 字节字符,无法存储 emoji 等 4 字节字符。新项目建议使用 utf8mb4: create database k default character set utf8mb4 collate utf8mb4_general_ci; 二、表 1. 查看所有的表 show tables; 2. 创建表 -- 简单创建 create table n(id int, name varchar(10)); -- 带主键、外键、唯一约束 create table m( id int, name varchar(10), primary key (id), foreign key (id) references n(id), unique (name) ); -- 不带约束 create table m(id int, name varchar(10)); 上面三条是不同写法的示例,同名的表不能重复创建。 ...

2026年10月12日 · 6 分钟 · 1124 字 · xijiangzhu

Nginx常用配置与Rewrite规则整理

本文整理 Nginx 日常配置中最常用的内容:正则匹配符、文件判断、rewrite 指令与 flag、常见规则实例、全局变量,以及与 Apache 规则的对应关系。 一、正则表达式匹配 符号 含义 ~ 区分大小写匹配 ~* 不区分大小写匹配 !~ 区分大小写不匹配 !~* 不区分大小写不匹配 二、文件及目录匹配 符号 含义 -f / !-f 判断文件是否存在 / 不存在 -d / !-d 判断目录是否存在 / 不存在 -e / !-e 判断文件或目录是否存在 / 不存在 -x / !-x 判断文件是否可执行 / 不可执行 三、rewrite 指令的 flag 标记 rewrite 指令的最后一个参数是 flag 标记,常用的有四种: flag 说明 last 相当于 Apache 里的 [L] 标记,表示本条规则执行完后,用重写后的 URI 重新发起请求(重新匹配 server{} 中的 location) break 本条规则匹配完成后,终止匹配,不再匹配后面的规则 redirect 返回 302 临时重定向,浏览器地址栏会显示跳转后的 URL permanent 返回 301 永久重定向,浏览器地址栏会显示跳转后的 URL 使用 last 和 break 实现 URI 重写时,浏览器地址栏不变,但两者有细微差别: 使用 alias 指令时,必须用 last 标记。 使用 proxy_pass 指令时,需要用 break 标记。 last 在本条 rewrite 规则执行完毕后,会对其所在的 server{...} 重新发起请求;break 则在本条规则匹配完成后直接终止匹配。 ...

2026年10月12日 · 5 分钟 · 890 字 · xijiangzhu

Percona Toolkit 常用命令整理

Percona Toolkit(简称 pt 工具集)是一组用于 MySQL 运维的命令行工具,可以在线修改表结构、校验和修复主从数据、归档数据、分析慢日志等。本文整理其中最常用的几个工具的典型用法。 零、基础知识 1. 安装 # CentOS / RHEL(需先配置 Percona 的 yum 源) yum install percona-toolkit # Ubuntu / Debian apt install percona-toolkit 也可以从 Percona 官网下载安装包或二进制压缩包。 2. DSN 连接串 很多工具用 DSN(Data Source Name)来指定数据库、表或服务器,格式是逗号分隔的 键=值: 键 含义 h 主机 P 端口 u 用户 p 密码 D 数据库 t 表 例如:h=127.0.0.1,P=3306,u=root,D=test,t=t1。 3. 通用选项 选项 说明 --ask-pass 运行时提示输入密码,避免在命令行明文写密码 --charset 指定连接字符集 --dry-run 试运行,不真正执行修改 --print 打印将要执行的语句 --execute 真正执行 使用原则:有 --dry-run、--print 的工具,先试运行并检查输出,确认无误后再改用 --execute。生产环境操作前先备份数据。 ...

2026年10月12日 · 3 分钟 · 484 字 · xijiangzhu

Tcpdump常用选项与抓包示例

tcpdump 是 Linux 下常用的命令行抓包工具,可以按条件捕获网络接口上的数据包,用于排查网络问题和分析协议。本文整理它的常用选项,并给出抓取 MySQL 和 HTTP 数据包的实例。 一、tcpdump 选项介绍 输出显示相关 选项 说明 -A 以 ASCII 码方式显示每个数据包(不显示链路层头部信息),抓取包含网页数据的包时很有用 -X 同时以 16 进制和 ASCII 形式显示协议头和包内容,做协议分析时非常有用 -e 在输出行打印数据链路层的头部信息,包括源 MAC、目的 MAC 以及网络层协议 -v 输出稍微详细的信息,例如 IP 包中的 TTL 和服务类型 -vv 输出更详细的报文信息 -t 在每一行输出中不打印时间戳 -l 使标准输出变为行缓冲形式 地址与名称解析相关 选项 说明 -a 将网络地址和广播地址转换成名字 -n 不进行域名解析,直接显示 IP 地址 -nn 不解析主机名,也不把端口号转换成应用(服务)名称,直接显示 IP 和端口号 -f 将外部的 Internet 地址以数字形式打印出来 抓包控制相关 选项 说明 -i 指定监听的网络接口 -c 收到指定数目的包后,tcpdump 就会停止 -s snaplen 从每个包中截取的字节数。0 表示不截断,抓取完整的数据包。老版本默认只抓 68 字节,新版本默认已能抓取完整的包 -p 不将网卡设置为混杂模式,只抓取与本机相关的数据包 -T 将监听到的包直接解释为指定类型的报文,常见类型有 rpc(远程过程调用)和 snmp(简单网络管理协议) 文件读写相关 选项 说明 -w 直接将包写入文件,不分析也不打印 -r 从指定文件中读取包(这些包一般通过 -w 选项产生) -F 从指定文件中读取过滤表达式,忽略命令行中的其他表达式 匹配代码输出相关 选项 说明 -d 将匹配信息包的代码以人们能够理解的汇编格式输出 -dd 将匹配信息包的代码以 C 语言程序段的格式输出 -ddd 将匹配信息包的代码以十进制的形式输出 参考资料:tcpdump 详解 ...

2026年10月12日 · 2 分钟 · 299 字 · xijiangzhu
访问量 -- 访客数 --