继续研究OVS和OVN,又装了OVN,有一点眉目了。

你用 OVN 的时候,ovs-vsctl show 里一般是看不到 Controller 字段的,因为:

在传统 OVS + OpenFlow 模式下,ovs-vswitchd 需要连接一个 OpenFlow 控制器(controller 字段会显示 IP/端口)。

而在 OVN 模式 下,OVS 并不是直接对接 OpenFlow 控制器,而是通过 OVN 控制平面(ovn-controller 进程) 跟 OVN Southbound DB 交互,然后由 OVN 负责生成 OpenFlow 流表并下发到 OVS。

所以 OVS 自己的数据库里不需要 controller 配置项,它会显示为“没有 Controller 字段”。

有些问题方面GPT比Gemini好一点。

https://engineering.fyi/ 和我在七月底的一个想法一样,但是我还停留在初始化阶段。

北半球三大流星雨来袭,西安太子山。

    # 启用单播模式
    unicast_src_ip 192.168.1.10  # 本地服务器的IP地址
    unicast_peer {
        192.168.1.11             # 备用服务器的IP地址
        192.168.1.12             # 如果有更多备用机,依次添加
    }

原来还有这东西 /etc/hosts.allow 文件是 Linux 系统中一个用于 控制网络服务访问权限 的重要配置文件。它与另一个文件 /etc/hosts.deny 协同工作,共同构成了 TCP Wrappers 访问控制机制。

安装harbor,安装pg,安装clickhouse,感觉这些东西就装的时候能记住,装完了就全部忘记了。

看到了这个项目,ruby写的还没有试过,https://github.com/ubicloud/ubicloud

MicroVM

阿里云的ack 新增了 ai profiling 的功能,需要python 编译的时候加上USDT,UI居然也支持 perfetto

了解到有 vaultwarden 这个密码管理管理工具,Bitwarden 的另一个服务端实现,还可以用于ssh,ssh agent还没有配过。

vaultwarden 生成的ssh密钥好像不能修改?

又遇到了容器过一段时间自动退出,exitCode: 0 的问题,回忆一下想起来了之前cgroup driver的问题,秒解决。

ansbile playbook中有很多重复的步骤,如何优化?看的有用 include 的。

Harbor 高可用之 PostgreSQL 的主从流复制(Streaming Replication)。

rsync -avh --delete user@db-1:/data/registry/ /path/to/local/destination/ 命令解析:

rsync: 命令本身。

-a (archive): 归档模式,强烈推荐。它相当于 -rlptgoD 的集合,能保留文件的大部分属性(权限、时间戳、所有者、软链接等)。

-v (verbose): 显示详细的同步过程,方便调试。

-h (human-readable): 以人类可读的格式显示文件大小(如 1.2K, 3.4M)。

user@db-1:/data/registry/: 这是源地址。

user: 你用来登录 db-1 的用户名。

db-1: 源服务器的主机名或 IP 地址。

:: 分隔主机和路径。

/data/registry/: 要同步的源目录。结尾的 / 非常重要,它表示“同步该目录的内容”,而不是目录本身。

/path/to/local/destination/: 这是目标地址,即你希望将文件保存在本机的哪个目录下。请替换成你的实际路径,例如 /opt/backups/registry/。

systemd 提供了非常丰富的条件检查选项,让你能精确地控制服务何时启动。除了你提到的 ConditionPathExists 和 ConditionKernelCommandLine,还有很多其他常用的检查项。

文件和路径相关的检查 ConditionPathExistsGlob=:和 ConditionPathExists 类似,但支持通配符(glob pattern),比如 ConditionPathExistsGlob=/var/log/*.log。

ConditionPathIsDirectory=:检查指定的路径是否存在且是一个目录。

ConditionPathIsSymbolicLink=:检查指定的路径是否存在且是一个符号链接。

ConditionPathIsMountPoint=:检查指定的路径是否存在且是一个挂载点。

ConditionFileNotEmpty=:检查指定路径是否存在且是一个非空文件。

ConditionDirectoryNotEmpty=:检查指定路径是否存在且是一个非空目录。

ConditionPathIsReadWrite=:检查指定路径所在的文件系统是否可读写。

系统状态相关的检查 ConditionVirtualization=:检查系统是否在虚拟化环境中运行,比如 KVM, Docker, LXC 等。你可以指定具体的类型,例如 ConditionVirtualization=container。

ConditionACPower=:检查系统是否连接了交流电源,或者只靠电池供电。

ConditionHost=:检查主机名是否匹配。

ConditionKernelVersion=:检查内核版本是否满足特定条件,例如 ConditionKernelVersion=>5.4。

ConditionSecurity=:检查系统是否启用了特定的安全功能,比如 SELinux 或 AppArmor。

ConditionArchitecture=:检查系统架构,比如 ConditionArchitecture=x86-64。

ConditionCapability=:检查系统是否具有特定的 Linux 能力(capability)。

ConditionFirstBoot=:检查系统是否正在首次启动(例如安装后第一次开机)。

否定检查 所有这些条件都可以在前面加上感叹号 ! 来取反。比如:

ConditionPathExists=!/etc/my-service/config.conf:只有当 /etc/my-service/config.conf 这个文件不存在时,服务才会启动。

ConditionVirtualization=!container:只有当系统不在容器中运行时,服务才会启动。

生活

拍星星还是有点难的,肉眼看不到,需要后期,忽然想到照片编辑也是一个很神奇的东西。