标签: linux

记容器内运行 KVM 虚拟化的权限问题

前言一直以来有个想法,想要将大象(OpenStack)塞进冰箱(Docker),像 OpenStack 这样的庞然大物,每次部署都会浪费至少大半个小时。 当然,这个想法在一年前就被本人验证可行了,但是仍存在一些不完善的地方…… 特权模式的KVM虚拟化特权模式,即使用--privileged选项创建容器,在这种场景下,会将宿主机中的设备目录(/dev),毫无保留的暴露到容器中,并且允许使用...

DinD 场景下IO性能问题分析

前言Docker in Docker(DinD)是一种在容器内运行 Docker 的解决方案,但在未为 DinD 容器使用 Volume 时,内部容器的 Copy-on-Write(写时复制)存储驱动会严重影响性能。 分析当试图在容器内使用 Docker,且不使用 Volume 为内部 Docker 提供存储时,内部 Docker 将无法使用 OverlayFS 作为 Storage Driver...

SSH 验证缓慢问题

前言最近在维护服务器时发现 SSH 连接异常缓慢,排除了网络问题后,便陷入了沉思。 由于系统安装了很长一段时间,不可控因素太多,一时之间不知道从何查起。 分析检查了最可疑的UseDNS设置项,确定为No,那么还会有什么因素会导致验证缓慢呢? 由于是验证过程缓慢,所以也排除profile以及rc的可能性。 经过一番调研,发现是GSSAPIAuthentication设置项导致的。 它是什么?为什么会...

SSH RSA公钥登录失效

前言SSH免密登录早已是开发过程中的基本操作,最近在连接一台CentOS的服务器时遇到了无法使用公钥登录的情况。 Ojos-MacBook-Pro:~ hsojo$ ssh root@192.168.*.* root@192.168.*.*'s password: 公钥早已在服务端添加信任,但连接时反复提示输入密码。 排查对比两台机器连接的日志,尝试找出原因。 登录失败机器的日志 d...

使用 Rosetta 建立 Ubuntu x86 开发环境

前言尽管换了 M1 设备也有一年多了,但平时仍然依赖于 x86 平台进行开发,为此不得不单独部署一套 x86 的开发环境在 intel PC 上。 随着 macOS 更新到了 Ventura (13.0.1),以及 UTM 4.0 的更新,现已可以在 Linux 环境下启用 Rosetta 对 x86(含amd64) 应用进行加速。 使用 Rosetta 加速后,在构建项目的速度上甚至几年前的 i...

MySQL 最大连接数问题

前言有些问题,在开发过程中不会遇到;但当要在生产环境中进行部署的时候便会暴露出来。 sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1040, 'Too many connections') 为什么会引发这个问题?因为生产环境的 CPU 核心数太多了。 业务进程的数量一般为 CPU 数量的倍数,而数...

CentOS 网卡聚合

前言最近在部署项目时遇到了一小问题,需要在两台服务器之间建立一条高速链路进行数据传输,但是这两台机器并没有万兆网卡。 不过,这两台服务器各有4个千兆网卡,如果对其进行聚合,或许可以在不添置硬件的情况下得到翻倍的传输速率? 抱着这样的想法,展开了本次调研。 桥接(Bridge)桥接可以简单理解成,使多张网卡处于同一VLAN;在网段相同的情况下,接入同一VLAN的设备可以相互通信。 操作流程 建立文件...

麒麟系统瘦身

前言近期在完成项目部署的过程中,遇到了一台特殊设备。该设备在安装Ubuntu Server系统后,无法驱动网卡;经过一番分析,发现是Linux内核没有集成相关驱动。 不过由于麒麟系统是由Ubuntu衍生的,用来部署项目也不是不可,但要用桌面系统来部署项目,就得精简一下了。 关闭应用安装验证sed -i 's/allow-kylinsign/#allow-kylinsign/g' /...

修复Chroot环境下APT包管理对systemd环境识别问题

前言近期在折腾Chroot环境下的设备时,发现软件包无法更新,得到以下错误: (Reading database ... 77272 files and directories currently installed.) Preparing to unpack .../mariadb-server-10.3_1%3a10.3.34-0ubuntu0.20.04.1_arm64.deb ... Ru...

通过chroot实现Linux子系统

前言在一些精简的Linux发行版里,很多时候会有无法运行需要某些依赖的程序的情况。 然而,会搭载这种精简系统的设备,一般无法重新安装系统;例如:路由器、手机等其他嵌入式设备。 而且受限于系统内核(缺少cgroup的一些高级特性等),也无法安装docker。 同时,在不同的Linux发行版下,使用的C语言标准库也不尽相同;如:glibc、musl等。 即使CPU支持程序所使用的指令集,使用glibc...