星的博客 - linux
type: channel
link: https://axzys.cn/index.php/category/linux/
items: openclaw代理
items: Ansible ubuntu 22.04 双主
items: esxi加硬盘
items: 搭建OpenVPN
items: 快速搭建私有云盘
items: gitee使用
items: 使用ansible快速部署一套集群
items: 配置一台YUM源服务器
items: rockylinux 9.3详细安装drbd+keepalived
items: rockylinux 9.3详细安装drbd

openclaw代理
type: item
date: 2026-03-02T07:09:22+00:00
description: ~/.config/systemd/user/openclaw-gateway.service ~/.config/systemd/user/openclaw-gateway.service.d/

Ansible ubuntu 22.04 双主
type: item
date: 2025-12-21T07:28:07+00:00
description: 这个文件一共 两个 play： Play 1（localhost）：只在控制机（你现在跑 ansible 的那台）做准备工作：生成/读取 SSH 公钥、写 ssh config、准备离线目录、尝试下载 k8s apt keyring（可选、失败不报错）。 Play 2（k8s_cluster）：对所有 k8s 节点做“真正的装机 + Kubernetes 初始化/加入”流程：系统基础配置、离线 apt repo 挂载、安装 containerd/k8s 组件、VIP 负载均衡（haproxy+keepalived，仅 master）、kubeadm init（首个 master）、其余 master join、worker join。Play 1：Prepare controller SSH key (localhost) 目标：让控制机具备 SSH key，并把公钥内容作为 fact 传给后续 play 使用。 关键点： 1.确保 ~/.ssh 存在 file 创建目录、权限 0700。 2.若缺失则生成 SSH key ssh-keygen -t rsa -b 4096 -N "" -f "{{ controller_ssh_key }}" creates: 保证幂等：文件存在则不再执行。 3.读取控制机公钥并 set_fact slurp 会把文件内容 base64 读回来；再 b64decode 变成文本。 存到 controller_pubkey，供后续节点写入 authorized_keys。 4.可选：写入控制机的 ~/.ssh/config 对 192.168.30.* 统一指定： 用户 root IdentityFile 使用 controller 生成的 key StrictHostKeyChecking no / UserKnownHostsFile /dev/null（方便自动化，但安全性降低） 这一步不影响节点配置，只是让你控制机 ssh 更省事。 5.确保 files/offline 目录存在 后续用到离线包、keyring 都放在 files/offline。 6.尝试下载 kubernetes apt keyring（最佳努力，不失败） failed_when: false + changed_when: false 有网就生成 kubernetes-apt-keyring.gpg，没网也继续往下跑。 随后 stat 检测是否存在，并设置 controller_has_k8s_keyring。 注意：你这里的离线 repo list 使用了 trusted=yes，所以 即使没有 keyring 也能装。但保留 keyring 逻辑可以让你以后切回在线源/或者取消 trusted=yes 更安全。Play 2：Bootstrap all k8s nodes（核心） 2.1 vars：整套集群“参数中心” ssh_user / ssh_user_home：依据 ansible_user 判断是 /root 还是 /home/<user>，用来给该用户写 authorized_keys。 VIP / keepalived / haproxy： apiserver_vip=192.168.30.58 apiserver_vip_port=16443（VIP 对外暴露端口） apiserver_bind_port=6443（kube-apiserver 实际监听端口） apiserver_vip_iface：用默认网卡名（拿 facts） keepalived_virtual_router_id/auth_pass：VRRP 参数 离线 repo： offline_tools_repo_tar、offline_containerd_repo_tar、offline_k8s_repo_tar、offline_lb_repo_tar 以及对应解压目录、apt list 文件路径 k8s 版本： k8s_pkg_version: 1.30.14-1.1 kubeadm_kubernetes_version: v1.30.14 kubeadm_image_repository：你用阿里镜像仓库，适合国内/离线镜像同步场景 containerd： containerd_sandbox_image 指定 pause 镜像 SystemdCgroup=true 内核模块：overlay、br_netfilter、ipvs 一套 + nf_conntrack 集群网络：pod/service 子网、domain、cri socket LB 节点选择逻辑（很关键）： lb_masters: "{{ (groups['k8…

esxi加硬盘
type: item
date: 2025-09-29T03:14:44+00:00
description: 一、先给虚拟机加上硬盘 二、在虚拟机中识别 2.1 扫描SCSI总线以添加新设备在Linux系统中，尤其是虚拟化环境（如VMware, KVM, VirtualBox），新添加的SCSI硬盘可以通过触发系统重新扫描SCSI主机总线来识别。#​​首先，查看当前已连接的SCSI主机总线编号​​： ls /sys/class/scsi_host/#​​强制系统重新扫描所有的SCSI主机总线​​： echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan#验证新硬盘是否被识别​​： lsblk2.2 加入扩容整个流程分为四步：​​创建物理卷 -> 扩展卷组 -> 扩展逻辑卷 -> 扩展文件系统​​。#将新磁盘 /dev/sdb 初始化为 LVM 物理卷 (PV)​ sudo pvcreate /dev/sdb #这条命令相当于告诉 LVM：“这块新磁盘交给你来管理”。 # Physical volume "/dev/sdb" successfully created.#将新的物理卷扩展到名为 rl的卷组 (VG) 中 sudo vgextend rl /dev/sdb #这条命令相当于把新来的“员工”（PV /dev/sdb）分配到了现有的“部门”（VG rl）里。现在这个部门就有了额外的100G“人力”（空间）。 #Volume group "rl" successfully extended#查看卷组确认空间，并扩展逻辑卷 (LV)​ sudo vgs # VSize(总大小) 变大了，并且 VFree(剩余空间) 这里显示了加入的 ~100G 空间。#方案A：将所有空闲空间都给 root​ sudo lvextend -l +100%FREE /dev/mapper/rl-root​​#方案B：只扩展指定大小（例如 50G）​ sudo lvextend -L +50G /dev/mapper/rl-root

搭建OpenVPN
type: item
date: 2024-10-03T04:48:00+00:00
description: 免责声明：本教程仅供学习使用，24小时内需删除。 需注意：在我国，未经电信主管部门批准使用非法定信道（如 OpenVPN）接入国际网络以及利用网络（包括非法接入国际网络后）进行传播违法信息、实施网络犯罪等违法活动均属于违法行为。一、OpenVPN简介OpenVPN 是一种开源的虚拟专用网络技术，利用加密功能在公共网络上构建安全通道。它具有安全性高、采用先进加密算法和多种认证方式保障数据安全；灵活性强，可适应各种网络环境且支持自定义配置；易于部署，安装和配置相对简便且有丰富文档和社区支持。正因如此，OpenVPN 广泛应用于远程办公，方便员工访问公司资源提高效率并确保安全便利；用于跨地域网络连接，助力多个分支机构实现数据共享与协同工作；还在保护隐私方面发挥重要作用，能隐藏用户真实 IP 地址，防止网络跟踪和监控。二、使用须知使用 OpenVPN 需注意合法性，确保目的合法且符合当地法律规定。要做好安全设置，如选强密码、保管好证书、及时更新。关注网络稳定性，尤其在公共网络。对于 CentOS 系统高于 7.x 以上版本：wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.shCentOS 7.x 版本使用一下命令：git clone https://github.com/guoew/openvpn-install.git cd openvpn-install && bash openvpn-install.sh运行该脚本后，会提示要求输入一些参数： 本机IP：这个会默认带出来。 对外的公网IP：如果服务器是公网的或者是内网穿透映射的，就填写外部能访问到的IP。 协议：这里默认选择第一个UDP即可。 监听端口：可以使用默认的端口，当然为了安全性也可以使用其他端口。DNS解析：使用本机配置的DNS服务器即可。编辑/etc/openvpn/userfile.sh这个文件来添加OpenVPN的连接账户：vim /etc/openvpn/userfile.sh添加账户的格式如：用户名 密码[root@localhost ~]# cat /etc/openvpn/userfile.sh axing 123456 a1 123456然后将会生成客户端配置文件/root/client.ovpn将这个文件下载到本机，使用OpenVPN的客户端导入。客户端下载地址： https://openvpn.net/client/根据提示填入添加的账户和密码：然后点击CONNECT进行连接即可：然后启动sudo systemctl start openvpn-server@server sudo systemctl enable openvpn-server@server sudo systemctl status openvpn-server@server防火墙的配置sudo firewall-cmd --add-port=1194/udp --permanent sudo firewall-cmd --reload电脑端下载https://openvpn.net/community-downloads/免责声明：本教程仅供学习使用，24小时内需删除。 需注意：在我国，未经电信主管部门批准使用非法定信道（如 OpenVPN）接入国际网络以及利用网络（包括非法接入国际网络后）进行传播违法信息、实施网络犯罪等违法活动均属于违法行为。

快速搭建私有云盘
type: item
date: 2024-09-27T15:43:00+00:00
description: 一、项目介绍项目地址：https://github.com/cloudreve/Cloudreve Cloudreve 是出色的自托管文件管理和共享系统。它支持多种云存储提供商，提供灵活存储方案。文件管理功能强大，可上传、下载等操作。文件共享便捷，能设密码和有效期。对团队协作很有用，可精细权限管理和版本控制。还具良好扩展性，不断更新优化，是个人和团队的理想选择，带来高效、便捷、安全的体验。二、功能特点多云存储集成：无缝支持本地存储、远程存储，以及七牛云、阿里云 OSS、腾讯云 COS、又拍云、OneDrive 和 S3 兼容 API，满足多样化的存储需求。 高效上传/下载：提供直接传输的上传和下载功能，支持速度限制，确保资源的高效管理。离线下载能力：通过集成 Aria2，实现离线下载，并使用多个下载节点来优化负载分配。 全面文件操作：支持文件的压缩、解压及批量下载，简化文件管理流程。 WebDAV 支持：全面覆盖所有存储提供商，使文件管理更加便捷。 直观的用户交互：支持拖放上传文件或文件夹，并进行流式上传处理；用户可以通过简单的拖放操作来管理文件。 多用户和群组管理：提供多用户和群组支持，便于组织管理和权限分配。 灵活的共享机制：可以创建带有过期日期的文件和文件夹共享链接，确保共享的安全性和时效性。 丰富的在线预览和编辑：支持在线预览视频、图片、音频及 ePub 文件，并能在线编辑文本和 Office 文档。 个性化定制：提供主题颜色自定义、暗模式、PWA 应用、SPA 和国际化支持，提升用户体验。 一体化解决方案：所有功能开箱即用，简化部署和使用。三、部署教程下载适用于您目标机器操作系统、CPU架构的主程序，直接运行即可。 二进制下载地址： https://github.com/cloudreve/Cloudreve/releases# 解压程序包 tar -zxvf cloudreve_VERSION_OS_ARCH.tar.gz # 赋予执行权限 chmod +x ./cloudreve # 启动 Cloudreve ./cloudreve 浏览器输入ip或者域名:5251 等于密码是随机生成的 后台地址是admin 补充使用下面这个后台命令关了终端任务就断了 ./cloudreve & 解决方法： yum install -y screen screen ./cloudreve 按 Ctrl+A 然后 D 来分离会话，随时可以使用 screen -r 重新连接。 这时候关闭终端不会断了。

gitee使用
type: item
date: 2023-09-24T01:29:00+00:00
description: 1. mkdir mysqlcluster-operator #创建一个名为 mysqlcluster-operator 的目录。 2. cd mysqlcluster-operator #进入刚刚创建的 mysqlcluster-operator 目录。 3. git init #初始化一个新的 Git 仓库，将当前目录标记为一个 Git 仓库以便进行版本控制。 4. touch README.md #创建一个名为 README.md 的文件，通常用于项目的介绍或说明。 5. git add README.md #将 README.md 文件添加到 Git 的暂存区，准备提交到仓库。 6. git commit -m "first commit" #提交暂存区中的文件，并添加提交信息 "first commit"。 7. git remote add origin https://gitee.com/axzys/mysqlcluster-operator.git #将远程仓库的地址（在 Gitee 上）与当前的本地仓库关联，命名为 origin。 8. git push -u origin "master" #将本地仓库的 master 分支推送到远程仓库的 origin，并设置跟踪（-u 参数表示在未来自动与这个远程分支同步）。mkdir webhook cd webhook git init touch README.md git add README.md git commit -m "first commit" git remote add origin https://gitee.com/axzys/webhook.git git push -u origin "master"[root@master01 mysqlcluster-operator]# git push -u origin "master" Username for 'https://gitee.com': 13143087657 Password for 'https://13143087657@gitee.com': Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 1.64 KiB | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: Powered by GITEE.COM [1.1.5] remote: Set trace flag 7e4992ae To https://gitee.com/axzys/mysqlcluster-operator.git * [new branch] master -> master Counting objects：统计需要推送的对象数目。 Compressing objects：压缩要推送的对象。 Writing objects：将对象写入远程仓库。 remote: Powered by GITEE.COM：表示已经成功连接到 Gitee 并完成操作。 [new branch] master -> master：本地的 master 分支已经成功推送到远程仓库的 master 分支。git add . #添加修改 git commit -m "Your commit message" #提交修改 git push origin master #推送到远程仓库 #推送到其他分支 git checkout -b <branch_name> #创建并切换到新分支 git push origin <branch_name> #推送到新分支 #回滚到之前的提交并推送（如果需要重置远程仓库的状态） git reset --hard abc1234 #回滚到某个提交（假设提交ID为 abc1234） git push origin master --force #强制推送到远程仓库

使用ansible快速部署一套集群
type: item
date: 2023-07-19T04:20:00+00:00
description: 1.Roles基本概述 通过使用 roles，你可以将复杂的设置和操作流程封装在一个统一的文件夹下，进而实现代码的复用和模块化例如你要部署负载均衡、web服务器、nfs、数据库，那你可以创建四个role每个role都组织管理了好了各白需要的所有元素(包括任务、变量、handler、文件等)的目录结构。2.创建单独一个Role 一个完整的Role里包含的目录和文件可能较多，手动去创建所有这些目录和文件是一件比较烦人的事，好在可以使用ansible-galaxy init ROLE NAME命令来快速创建一个符合Role文件组织规范的框架。[root@lb workspace]# ansible-galaxy init first_role [root@lb workspace]# tree first_role/ first_role/ # 角色名称，或者叫项目名 ├── README.md ├── defaults # 默认的变量（优先级很低） │ └── main.yml ├── files # 存放文件，使用copy模块时自动获取 ├── handlers # 存放触发器的配置 │ └── main.yml ├── meta # 依赖的服务，执行该项目时先执行其他的项目 │ └── main.yml ├── tasks # 默认执行的playbook │ └── main.yml ├── templates # 存放jinja2模板，使用template模块时自动获取 ├── tests │ ├── inventory │ └── test.yml └── vars # 存放变量 └── main.yml3.一些关键介绍 Ansible Roles的依赖关系说明`roles`允许你再使用roles时自动引入其他的roles。role依赖关系存储在roles目录中meta/main.yml文件中。 例如：推送wordpress并解压，前提条件，必须要安装nginx和php，把服务跑起来，才能运行wordpress的页面，此时我们就可以在wordpress的roles中定义依赖nginx和php的roles[root@m01 roles]# vim /etc/ansible/roles/wordpress/meta/main.yml dependencies: - { role: nginx } - { role: php } 如果编写了meta目录下的main.yml文件，那么Ansible会自动先执行meta目录中main.yml文件中的dependencies文件，如上所示，就会先执行nginx和php的安装。Role中有两个地方可以定义变量:roles/xxx/defaults/main.yml:用于定义Role的默认变量roles/xxx/vars/main.yml:用于定义其它变量两个文件之间的区别在于，defaults/main.yml中定义的变量优先级低于vars/main.yml中定义的变量。事实上，defaults/main.yml中的变量优先级几乎是最低的，基本上其它任何地方定义的变量都可以覆盖它4.基于roles机制重构playbook主机IP身份m01192.168.110.110控制端web01192.168.110.97受控端db01192.168.110.163受控端nfs192.168.110.51受控端web02192.168.110.191受控端lb01192.168.110.138受控端配置主机清单[root@manager ~]# cat /etc/ansible/hosts [lb] lb01 ansible_ssh_pass='1' [nfs_server] nfs ansible_ssh_pass='1' [web_group] web01 ansible_ssh_pass='1' web02 ansible_ssh_pass='1' [db_server] db01 ansible_ssh_pass='1' [www:children] lb nfs_server web_group db_server配置hosts[root@manager ~]# cat /etc/hosts # 添加如下内容 192.168.110.138 lb01 192.168.110.51 nfs 192.168.110.91 web01 192.168.110.191 web02 192.168.110.163 db01创建项目及各个role# 1、创建项目目录，项目名就叫roles吧，好理解 mkdir /project mkdir /project/roles # 2、在roles目录下创建一…

配置一台YUM源服务器
type: item
date: 2023-07-18T13:43:00+00:00
description: 先下载好镜像下面这个是阿里的镜像站，可以自己选择版本https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spm=a2c6h.25603864.0.0.18a9f5adJSpgfw1.测试环境准备两台CentOS7.9操作系统的服务器或虚拟机，host01作为服务端，host02作为客户端，要确保客户端必须可以访问到服务端； 准备好CentOS7.9的ISO文件：CentOS-7-x86_64-DVD-2009.iso 关闭防火墙和SELinux，开启防火墙的情况下需要开放80端口，因为下面我使用web软件对外提供服务。2.测试场景测试过程中分为以下两种情况： (1)仅将ISO文件中的安装包上传到服务器中； (2)需要自定义软件包，比如将ISO文件中的安装包和自己下载的软件包一起放在YUM源服务器中； 两种情况也可以理解成一种，实际上它们都是rpm包。3.前提条件需要在服务端安装web服务，这里使用Apache，也可以使用Nginx；安装Apache：yum install httpd -y如果服务端不能访问外面，需要先配置本地YUM源，本地YUM源的方法见本文末尾。启动服务：systemctl start httpd当然服务端不强制使用web服务，也可以使用ftp服务。4.仅使用ISO文件中的安装包这个需求是最简单的，因为ISO文件中自带软件包索引文件，不需要额外创建。4.1挂载ISO文件挂载ISO文件后，可以看到以下目录及文件：重点是Packages和repodata两个目录，KEY文件可以不使用。基本Packages包含所有软件包，repodata包含软件包的索引文件。4.2拷贝ISO中的软件包到服务端创建目录：mkdir /var/www/html/CentOS7.9拷贝文件：cp -a /mnt/Packages /var/www/html/CentOS7.9 cp -a /mnt/repodata /var/www/html/CentOS7.9http://192.168.110.51/CentOS7.9/4.3配置客户端测试[root@localhost yum.repos.d]# cat /etc/yum.repos.d/local.repo [Local_YUM] name=Local_YUM baseurl=http://192.168.110.51/CentOS7.9 enable=1 gpgcheck=0 [root@localhost yum.repos.d]# yum makecache 已加载插件：fastestmirrorLoading mirror speeds from cached hostfileLocal_YUM | 3.6 kB 00:00:00 Local_YUM/group_gz FAILED http://192.168.110.51/CentOS7.9/repodata/a4e2b46586aa556c3b6f814dad5b16db5a669984d66b68e873586cd7c7253301-c7-x86_64-comps.xml.gz: [Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。To address this issue please refer to the below wiki article https://wiki.centos.org/yum-errorsIf above article doesn't help to resolve this issue please use https://bugs.centos.org/.Local_YUM/primary_db FAILED http://192.168.110.51/CentOS7.9/repodata/0e82d111931e402316702696ae4178e65673dc0f9c23a2bb012d192cb2625ea1-primary.sqlite.bz2: [Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。Local_YUM/filelists_db FAILED http://192.168.110.51/CentOS7.9/repodata/60aa4673bf5fa63d1a7a640ef407b8e48fe5b3337720d844a29a53fec130d6da-filelists.sqlite.bz2: [Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。Local_YUM/oth…

rockylinux 9.3详细安装drbd+keepalived
type: item
date: 2023-07-17T12:39:00+00:00
description: drbd参考上一篇博客先明确主服务器的keepalivde的配置drbd关闭时执行的脚本 keepalivde关闭时执行的脚本 故障恢复主服务器自动抢回vip的脚本 脚本记得给执行权限从服务器的keepalivde的配置主服务器失效后，从服务器自动挂载，并且成为主服务器，vip也会跟随过来。 原主服务器正常后，主服务器自动降为从服务器，并且取消挂载，vip也会自动转移走。两台主机操作drbdadm status #确定drbd正常工作 dnf install -y keepalivedalpha节点操作/etc/keepalived/keepalived.conf! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id DRBD_HA_MASTER } vrrp_script chk_drbd { script "/etc/keepalived/check_drbd.sh" interval 5 } vrrp_instance VI_1 { state MASTER interface ens160 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_drbd } notify_stop /etc/keepalived/notify_stop.sh ### keepalived服务关闭执行的脚本 notify_master /etc/keepalived/notify_master.sh ### 重新拿回 master 的脚本 virtual_ipaddress { 192.168.110.88 ### vip 请选择一个没有在占用的IP地址 } }通过上面的配置文件，这里需要编写三个脚本，如下：/etc/keepalived/check_drbd.sh#!/bin/bash # Author:hukey systemctl is-active --quiet drbd if [ $? -ne 0 ]; then systemctl start drbd if [ $? -ne 0 ]; then umount /mnt drbdadm secondary drbd0 systemctl stop keepalived fi fi/etc/keepalived/notify_stop.sh#!/bin/bash # Author:hukey time=`date "+%F %H:%M:%S"` echo -e "$time ------notify_stop------\n" >> /etc/keepalived/logs/notify_stop.log umount /mnt drbdadm secondary drbd0 /usr/sbin/fuser -k /mnt &>> /etc/keepalived/logs/notify_stop.log /bin/umount /mnt &>> /etc/keepalived/logs/notify_stop.log echo -e "\n" >> /etc/keepalived/logs/notify_stop.log/etc/keepalived/notify_master.sh#!/bin/bash # Author:hukey time=`date "+%F %H:%M:%S"` echo -e "$time ------notify_master------\n" >> /etc/keepalived/logs/notify_master.log systemctl start drbd &>> /etc/keepalived/logs/notify_master.log for (( i=1; i <=3; i++)) do drbdadm status | egrep -q 'Primary' if [ $? -ne 0 ]; then mount /mnt drbdadm primary drbd0 /bin/mount /dev/drbd0 /mnt &>> /etc/keepalived/logs/notify_master.log break else sleep 3…

rockylinux 9.3详细安装drbd
type: item
date: 2023-07-17T09:52:00+00:00
description: 提前准备好1.主机名提前改好 hostnamectl set-hostname #改主机名字 2.硬盘提前准备好可以用lvs以后方便扩容 fdisk /dev/ #你的硬盘 3.时间要更新好，防火墙关闭 setenforce 0 systemctl stop firewalld iptables -t filter -F开始安装sudo dnf update sudo dnf install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm -y sudo dnf install drbd drbd-utils -y sudo dnf install epel-release -y sudo dnf install kmod-drbd9x -y dnf search drbd #查询drbd安装包加载内核[root@alpha ~]# sudo modprobe drbd [root@alpha ~]# lsmod | grep drbd drbd 983040 0 libcrc32c 16384 5 nf_conntrack,nf_nat,nf_tables,xfs,drbd配置 DRBD 资源文件，确保配置中的节点 IP 地址和磁盘设备路径正确。[root@alpha ~]# cat /etc/drbd.d/drbd0.res resource drbd0 { disk /dev/nvme0n2p1; #要根据自己配置改 device /dev/drbd0; meta-disk internal; on alpha { address 192.168.110.204:7789; #要根据自己配置改 } on bravo { address 192.168.110.201:7789; #要根据自己配置改 } }[root@alpha ~]# cat /etc/drbd.d/global_common.conf global { usage-count no; } common { net { protocol C; } }创建 DRBD 资源元数据在两个节点上执行以下命令来创建 DRBD 资源元数据：sudo drbdadm create-md r0启动系统服务systemctl start drbd#开始 systemctl enable drbd#开机自启在alpha上操作，启动设备并使其成为主节点drbdadm up drbd0 drbdadm primary drbd0如果启用主节点命令失败需要使用以下命令drbdadm primary drbd0 --force在bravo上操作，启动设备drbdadm up drbd0查看同步进程drbdadm status sudo drbdadm -- --overwrite-data-of-peer primary drbd0 #重要这步如果状态不正常就开始同步 drbdadm primary --force drbd0 #强制同步 drbdadm primary drbd0 #切换成主服务器 期间可以看到同步的状态格式化DRBD设备并挂载 【alpha 操作】mkfs.ext4 /dev/drbd0 mkdir -pv /mnt mount /dev/drbd0 /mnt touch /mnt/test/file{1..10}卸载文件系统并切换为备节点umount /mnt drbdadm secondary drbd0在bravo上执行以下命令确认文件drbdadm primary drbd0 mount /dev/drbd0 /mnt ls -l /mnt total 0 -rw-r--r--. 1 root root 0 Jun 10 09:43 file1 -rw-r--r--. 1 root root 0 Jun 10 09:43 file2 -rw-r--r--. 1 root root 0 Jun 10 09:43 file3