From 63e8356658a0d9373b6f680b7ecfc3ae6484ec57 Mon Sep 17 00:00:00 2001 From: wonder Date: Thu, 27 Aug 2026 11:26:10 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=89=80=E6=9C=89=20heading->list=20?= =?UTF-8?q?=E4=B9=8B=E9=97=B4=E8=A1=A5=E7=A9=BA=E8=A1=8C=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=B8=B2=E6=9F=93=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/qiniu-cloud/ansible-automation.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/qiniu-cloud/ansible-automation.md b/docs/qiniu-cloud/ansible-automation.md index 05b39f1..f87d079 100644 --- a/docs/qiniu-cloud/ansible-automation.md +++ b/docs/qiniu-cloud/ansible-automation.md @@ -119,6 +119,7 @@ graph TD ### 2.3 Tasks 详情 #### `tasks/validate.yml` — 参数校验 + - 拓扑合法性(standalone/primary_replica) - MHA 模式要求 MySQL 8.0 + 至少 2 副本 + 主机数匹配 - 密码长度 >= 16、实例名格式、版本在 catalog 内 @@ -127,6 +128,7 @@ graph TD - 探测端口占用、检查可用内存和磁盘空间 #### `tasks/install.yml` — 安装流程 + - 可选配置内部 APT 源 - 安装依赖包(aria2, ca-certificates, libaio1t64, libatomic1, libncurses6 等) - 创建 `mysql` 系统用户 @@ -140,6 +142,7 @@ graph TD - 安装 systemd 模板单元并启动 #### `tasks/accounts.yml` — 账号配置 + - 等待 socket 可用 - 初始化 root 密码(`SET SESSION sql_log_bin=0`,避免 GTID 污染) - 安装 Clone 插件(MHA 模式) @@ -147,6 +150,7 @@ graph TD - 使用临时文件存储凭据(`mktemp` + `chmod 600` + `trap`),避免命令行泄露 #### `tasks/replication.yml` — 复制配置 + - MHA 模式下执行 MySQL Clone(从主库全量克隆,throttle=1 串行) - Clone 后重新生成 server_uuid(删除 `auto.cnf` 重启) - 配置 GTID 复制(`CHANGE REPLICATION SOURCE TO ... SOURCE_AUTO_POSITION=1`) @@ -154,22 +158,26 @@ graph TD - 校验 GTID 收敛(无 errant GTID、无 missing GTID) #### `tasks/mha-artifacts.yml` — MHA 制品安装 + - 下载 mha4mysql-node 和 mha4mysql-manager deb 包(SHA256 校验) - 所有节点安装 node,最后一个副本节点安装 manager - 校验 Perl 模块 #### `tasks/mha.yml` — MHA 配置 + - 生成集群独立 SSH 密钥(ed25519) - 授权 Manager 公钥到所有节点(`restrict` 前缀) - 校验免密 SSH #### `tasks/callback.yml` — 进度回调 + - POST 请求到 `delivery_callback_url`,携带 Bearer token、stage、status、message、awx_job_id ### 2.4 Templates #### `mysql-instance.cnf.j2` — MySQL 实例配置 关键配置段: + - **字符集:** utf8mb4 / utf8mb4_general_ci / +08:00 / lower_case_table_names=1 - **日志:** error.log、slow-query-log、long_query_time - **Binlog:** ROW 格式、sync_binlog=1、max_binlog_size、expire_logs_seconds=604800 @@ -179,27 +187,32 @@ graph TD - **Group Replication(mgr_3 拓扑):** plugin-load-add、group_name、local-address、group-seeds、single-primary-mode #### `mysql-mha.cnf.j2` — MHA Manager 配置 + - `[server default]`:user/password、manager_workdir、ssh_options(指定密钥和 known_hosts)、repl_user/password、ping_interval=5、report_script(自动模式) - `[serverN]`:每个节点的 hostname、port、candidate_master、no_master #### `mysql-mha-manager.service.j2` — MHA Manager systemd 单元 + - ExecStartPre:`masterha_check_repl --conf=...` - ExecStart:`masterha_manager --conf=... --remove_dead_master_conf` - Restart=on-failure, RestartSec=10s, StartLimitBurst=5 #### `xinfra-mha-report.j2` — MHA 故障转移回调脚本 + - 解析 `--orig_master_host`、`--new_master_host` 参数 - 构建 JSON payload,curl POST 到回调 URL,retry 5 次 ### 2.5 Files #### `mysql-delivery@.service` — systemd 模板单元 + - Type=exec, User=mysql, Group=mysql - ExecStart:`/usr/local/libexec/xinfra-mysql-start %i` - Restart=on-failure, RestartSec=5s, TimeoutStartSec=120s - LimitNOFILE=65535, OOMScoreAdjust=-200 #### `xinfra-mysql-start` — 启动器脚本 + - 优先使用 `/opt/mysql-delivery/{instance}/current/bin/mysqld` - 回退到 `/usr/sbin/mysqld`(兼容 APT 安装的存量实例) @@ -285,6 +298,7 @@ graph LR ### 3.4 deploy.yml 核心流程 **Play 1(所有 postgresql 节点):** + 1. 校验制品 URL 和密钥 2. 安装内部 APT 签名密钥和快照 3. 安装 PostgreSQL、Python 运行时包 @@ -300,11 +314,13 @@ graph LR 13. 渲染配置文件并启动 Patroni 和 exporter **Play 2(安装 HAProxy/Keepalived):** + 1. 安装 HAProxy 和 Keepalived 2. 渲染配置(验证语法) 3. 启动服务,等待 HAProxy 能连通 PostgreSQL primary **Play 3(创建备份):** + 1. 发现当前 primary 2. 创建 pgBackRest stanza 3. 在两个仓库各创建一次全量备份 @@ -312,6 +328,7 @@ graph LR ### 3.5 Templates #### `patroni.yml.j2` — Patroni 配置 + - scope/namespace/name - restapi:监听 `ansible_host:patroni_rest_port` - etcd3:hosts 列表、http 协议 @@ -323,17 +340,20 @@ graph LR - create_replica_methods: basebackup (checkpoint: fast) #### `haproxy.cfg.j2` — HAProxy 配置 + - TCP 模式 - frontend:`0.0.0.0:{haproxy_service_port}` - backend:`patroni_primary`,使用 `option httpchk GET /primary`(Patroni REST API 健康检查) #### `keepalived.conf.j2` — Keepalived 配置 + - VRRP 实例 `VI_PGHA`,state=BACKUP,nopreempt - 单播模式(unicast_src_ip + unicast_peer) - 健康检查脚本:`check-xinfra-haproxy.sh` - auth_pass 由集群 UUID SHA1 派生 #### `pgbackrest.conf.j2` — pgBackRest 配置 + - 双仓库:repo1 在第一个节点、repo2 在第二个节点 - retention-full=2 - stanza 名 = 集群名