OAT 初始化时出错?问题可能出在 PAM 配置上|OceanBase 故障排查实践
本文作者:爱可生数据库工程师,任仲禹,擅长故障分析和性能优化。
背景
某客户在使用 OAT 初始化OceanBase 服务器的过程中,进行到 precheck 步骤时,遇到了如下报错信息:
ERROR - check current session hard limit of open_files (ulimit -H -n): 4096 != 655350 ... EXPECT 655350 ... FAIL
错误大意:OAT 需要服务器的 ulimit -H -n 命令返回值是 655350,实际得到的是 4096。
下图所示,虚拟机因磁盘和内存规格不足而触发了检查错误提示(此信息可以忽略)。
排查过程
① 检查当前服务器的 ulimit 值
使用 SSH 登录到目标服务器检查。
结果:【不符合预期】
使用 su
切换到服务器 admin 用户检查。
结果:【符合预期】
这里就有问题,OAT 在 prepare 之前,已经有步骤对服务器的内核参数完成了调整,如下图所示。
这里的 oceanbase_limits.conf
是 OAT 生成的,属于全局配置生效。
理论上不应该出现 SSH 到服务器与 SU 到服务器查出 ulimit 结果不一致的情况。
② 检查 OAT 对于 ulimit 的检查机制
OAT 检查该步骤是运行的程序是 init_server_with_tag.py
。
[2024-09-27T16:34:52.775+0800] INFO - Running: ['airflow', 'tasks', 'run', 'init_server_with_tag', 'precheck', 'manual__2024-09-27T08:34:21.675314+00:00', '--job-id', '39950', '--raw', '--subdir', 'DAGS_FOLDER/init_server_with_tag.py', '--cfg-path', '/tmp/tmp5ni__moh']
登录到 OAT 容器,查看程序最终的调用如下。
# 脚本 task_engine/dags/init_server_with_tag.pydef precheck():ctx = get_current_context()common.server_precheck(ctx, logger=logger)# 脚本 task_engine/plugins/common.py
def server_precheck(ctx, logger):init_tag = ctx['params']['init_tag']role = _get_server_role(init_tag)envs = _get_custom_user_env(ctx['params'])with ServerRemoteExecute(server_id=ctx['params']['server_id']) as client:precheck_sh = SHELL_PATH / 'precheck.sh'ret_code, _ = client.execute_script(precheck_sh, args=('-m', role), control_master=False, logger=logger,env={'LC_ALL': 'en_US.UTF-8', 'OB_IP': client.server['ip'], **envs})if ret_code != 0:raise RuntimeError('server precheck failed, please see the summary info above for details')# 脚本 task_engine/shells/precheck.sh
check_limit() {limit_type_list=(-H/hard -S/soft)for limit in "${EXPECT_LIMITS[@]}"dolimit_option=$(echo $limit | awk -F'/' '{print $1}')expect_limit=$(echo $limit | awk -F'/' '{print $2}')limit_description=$(echo $limit | awk -F'/' '{print $3}')limit_item=$(echo $limit | awk -F'/' '{print $4}')for limit_type in "${limit_type_list[@]}"dolimit_type_option=$(echo $limit_type | awk -F'/' '{print $1}')limit_type_description=$(echo $limit_type | awk -F'/' '{print $2}')get_limit_cmd="ulimit $limit_type_option $limit_option"# check new sessioncurrent_limit=$(runuser - "$EXPECT_USER" -c "$get_limit_cmd")if ! compare_ulimit "$current_limit" "$expect_limit"; thenecho_fail "check permanent $limit_type_description limit of $limit_description ($get_limit_cmd): $current_limit != $expect_limit ... EXPECT $expect_limit"echo_hint "modify /etc/security/limits.d/oceanbase_limits.conf\n echo \"* $limit_type_description $limit_item $expect_limit\" >> /etc/security/limits.d/oceanbase_limits.conf"elseecho_pass "check $limit_type_description limit of new session $limit_description ($get_limit_cmd): $current_limit"fi# check current sessioncurrent_limit=$($get_limit_cmd)if ! compare_ulimit "$current_limit" "$expect_limit"; thenecho_fail "check current session $limit_type_description limit of $limit_description ($get_limit_cmd): $current_limit != $expect_limit ... EXPECT $expect_limit"echo_hint "excute: ulimit $limit_type_option $limit_option $expect_limit"elseecho_pass "check $limit_type_description limit of $limit_description ($get_limit_cmd): $current_limit"fidonedone
}
这里 OAT 获取 ulimit 结果不符合预期的原因已清楚:
通过检查脚本,OAT 是通过 ServerRemoteExecute
模块(使用 SSH 方式)去目标服务器上执行 prepare.sh
脚本做 *ulimit 检查(与预期的 ulimit 值进行对比)。
但是,通过 SSH 连到服务器上执行 ulimit 命令的执行结果不符合预期,甩出报错。
③ 疑问:为何 SSH 连接时 ulimit 值不正确?
先使用 strace
命令查看下 su
时的系统调用。
strace -o /root/l1 su - admin
SU 的结果
SU 时,将调用 /usr/lib64/security/pam_limits.so
文件,继而获取到如下两个文件的 ulimit 配置:/etc/security/limits.conf
和 /etc/security/limits.d/oceanbase_limits.conf
。
所以,su - admin
命令执行的结果【符合预期】。
通过系统日志 /var/log/secure
可以看到,SU 操作加载了 pam 插件。
Oct 14 17:44:44 10-186-58-85 su: pam_unix(su-l:session): session opened for user admin by root(uid=0)
从结果反推下,为什么 SSH 不去读取 /usr/lib64/security/pam_limits.so
文件?
根据关键字,猜测跟 SSH 的 PAM 插件有关,继续检查 ssh_config
配置文件如下。
UsePAM no
- 目标服务器的 PAM 确实是关闭的。
- 通过系统日志
/var/log/secure
可以看到,SSH 操作没有加载 pam 插件。
Oct 14 17:50:40 10-186-58-85 sshd[25117]: Accepted publickey for root from 10.186.58.85 port 19118 ssh2: RSA SHA256:+TtbeuvInWm90vrJG7cHHm2G2a2FULFE0Uq+imx2m30
引申:PAM 的作用?
这里 ChatGPT 了一下,解释非常清楚如下图,总结一句就是:
关闭 PAM,用户 SSH 到服务器时,将不会读取 *limits.conf
的配置,继而导致获取到默认配置而使 OAT 报错。
解决方法
将配置文件 /etc/ssh/sshd_config
中的 UsePAM 修改为 yes ,重启 SSHD 服务即可。
启用 PAM 插件后,再次 SSH 可以看到系统日志如下多了加载 pam_unix(sshd:session)
的操作。
Oct 14 17:51:56 10-186-58-85 sshd[26147]: Accepted publickey for root from 10.186.58.85 port 19480 ssh2: RSA SHA256:+TtbeuvInWm90vrJG7cHHm2G2a2FULFE0Uq+imx2m30
Oct 14 17:51:56 10-186-58-85 sshd[26147]: pam_unix(sshd:session): session opened for user root by (uid=0)
原因分析总结
- OAT 在初始化服务器预检查过程中报告了 ulimit 值不符合预期的错误,这一问题的根源在于目标服务器的 sshd_config 配置不当。
- sshd_config 中 禁用了 PAM 插件,导致 OAT 无法读取到目标服务器上经过优化的 ULIMIT 配置文件。
相关文章:
OAT 初始化时出错?问题可能出在 PAM 配置上|OceanBase 故障排查实践
本文作者:爱可生数据库工程师,任仲禹,擅长故障分析和性能优化。 背景 某客户在使用 OAT 初始化OceanBase 服务器的过程中,进行到 precheck 步骤时,遇到了如下报错信息: ERROR - check current session ha…...
现场血案:Kafka CRC 异常
一、背景 现场童鞋说客户的研发环境突然在近期间歇式的收到了CRC的相关异常,异常内容如下 Record batch for partition skywalking-traces-0 at offset 292107075 is invalid, cause: Record is corrupt (stored crc = 1016021496, compute crc = 1981017560) 报错完全没有…...
实时技术方案对比:SSE vs WebSocket vs Long Polling
早期网站仅展示静态内容,而如今我们更期望:实时更新、即时聊天、通知推送和动态仪表盘。 那么要如何实现实时的用户体验呢?三大经典技术各显神通: SSE(Server-Sent Events):轻量级单向数据流WebSocket:双向全双工通信Long Polling(长轮询):传统过渡方案假设目前有三…...
搭建游戏云服务器的配置要求包括哪些条件?
在游戏行业迅猛发展的背景下,越来越多的游戏团队、独立开发者、企业平台开始将服务器部署转向云端,尤其是在初期测试、公测阶段及全球发布期,云服务器所带来的弹性部署、全球覆盖、成本控制能力成为不可替代的优势。但问题随之而来࿱…...
Go语言八股文之Mysql锁详解
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
1T 服务器租用价格解析
服务器作为数据存储与处理的核心设备,对于企业和个人开发者而言至关重要。当涉及到租用 1T 服务器时,价格是大家很为关注的要点。然而,1T 服务器租用一个月的费用并非固定不变,而是受到诸多因素的综合影响。 影响 1T 服务器租用…...
面试题:详细分析Arraylist 与 LinkedList 的异同
相同点 都是List接口的实现类: ArrayList和LinkedList都实现了Java集合框架中的List接口,因此它们都提供了对列表元素的操作方法。 都继承了Collection接口: 由于List接口继承了Collection接口,所以ArrayList和LinkedList也都继承…...
6 任务路由与负载均衡
一、任务路由核心机制 1.1 静态路由配置 # celeryconfig.pytask_routes {# 精确匹配任务路径payment.process_order: {queue: priority_payment},# 通配符匹配任务类型report.*: {queue: low_priority_reports},# 正则表达式匹配re.compile(r^video\.(encode|compress)): {q…...
前端精度问题全解析:用“挖掘机”快速“填平精度坑”的完美解决方案
写在前面 “为什么我的计算在 React Native 中总是出现奇怪的精度问题?” —— 这可能是许多开发者在作前端程序猿的朋友们都会遇到的第一个头疼问题。本文将深入探讨前端精度问题的根源,我将以RN为例,并提供一系列实用解决方案,让你的应用告别计算误差。 一、精度问题的…...
探索嵌入式硬件的世界:技术、应用与未来趋势
目录 一、什么是嵌入式硬件? 二、嵌入式硬件的核心组件与架构 1. 微处理器与控制器 2. 存储器设备 3. 输入/输出接口 4. 电源管理模块 5. 时钟芯片与时序控制 三、嵌入式硬件的设计原则与技术难点 1. 低功耗与能耗优化 2. 小型化与高度集成 3. 高可靠性和…...
中级网络工程师知识点3
1.在网络线路施工中应遵循规范: ①缆线的布防应自然平直,不得产生扭绞、打圈接头等现象 ②线缆两端应贴有标签,标签自己清晰、正确,标签应选用不易损坏的材料 ③水平子系统中配线间到工作区信息插座电缆不超过90米 ④工作区子系统中信息插座到网卡不超过10米 ⑤信息插…...
Spring2:应用事务+连接池形成的工具类
工具类 package com.qcby.utils;import com.alibaba.druid.pool.DruidDataSource;import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException;/*** 事务的工具类*/ //事务是通过连接开启的,所以要保证是同一个连接 public class TxU…...
CentOS高手之路:从进阶实战到企业级优化
一、系统深度优化与性能调优 1. 内核参数调优 通过修改/etc/sysctl.conf文件调整内核参数,可显著提升服务器性能。例如: net.ipv4.tcp_fin_timeout30(快速释放TCP连接) vm.swappiness10(减少交换分区使用࿰…...
【Android构建系统】如何在Camera Hal的Android.bp中选择性引用某个模块
背景描述 本篇文章是一个Android.bp中选择性引用某个模块的实例。 如果是Android.mk编译时期,在编译阶段通过某个条件判断是不是引用某个模块A, 是比较好实现的。Android15使用Android.bp构建后,要想在Android.bp中通过自定义的一个变量或者条件实现选…...
命令拼接符
Linux多命令顺序执行符号需要记住5个 【|】【||】【 ;】 【&】 【&&】 ,在命令执行里面,如果服务器疏忽大意没做限制,黑客通过高命令拼接符,可以输入很多非法的操作。 ailx10 网络安全优秀回答者 互联网…...
学习笔记(C++篇)--- Day 5
1.取地址运算符重载 1.1 const成员函数 ①将 const 修饰的成员函数称为const成员函数,const 修饰成员函数放到成员函数参数列表的后面。 ②const 实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。const 修饰 Date 类的…...
排序算法之基础排序:冒泡,选择,插入排序详解
排序算法之基础排序:冒泡、选择、插入排序详解 前言一、冒泡排序(Bubble Sort)1.1 算法原理1.2 代码实现(Python)1.3 性能分析 二、选择排序(Selection Sort)2.1 算法原理2.2 代码实现ÿ…...
mysql集群
mysql双主keepalivedhaproxy 一、集群作用 实现高可用及负载均衡。 二、示例 1.实验环境 101 mysql01102 mysql01103 haproxy01keepalived01104 haproxy02keepalived02105 client2.各主机改名并关闭防火墙 101 mysql01102 mysql02103 haproxy01104 haproxy02105 clientsyst…...
【嵌入式开发-RGB 全彩 LED】
嵌入式开发-RGB 全彩 LED ■ RGB 全彩 LED简介■ 电路设计■ ■ RGB 全彩 LED简介 RGB 全彩 LED 模块显示不同的颜色。 ■ 电路设计 全彩 LED 使用 PA5、 蓝色(B) TIM2_CHN3 PA1、 绿色(G)TIM2_CHN2 PA2、 红色(R&am…...
网络安全-等级保护(等保) 2-6 GB/T 36958—2018 《信息安全技术 网络安全等级保护安全管理中心技术要求》-2018-12-28 发布【现行】
################################################################################ GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》明确了安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、…...
几个正整数常用的位运算操作
位运算在高性能计算、资源敏感型场景(如嵌入式系统)、特定算法(加密、压缩)中具有不可替代的优势。合理使用位运算可以显著提升代码效率和资源利用率。 1. 判断一个正整数是否为8的倍数 bool is_multiple_of_eight(int n) {if (…...
消息队列(MQ)在项目中的使用场景详解【附开发实战思路】
在开发中,很多人一开始对消息队列(MQ)的认识仅限于“异步处理”,但随着项目复杂度提升,我们会发现 MQ 不仅能异步处理任务,还能解耦系统、削峰限流,甚至提高整体架构的稳定性和扩展性。 这篇文…...
基于MATLAB-GUI图形界面的数字图像处理
基于MATLAB GUI的数字图像处理系统实现方案,包含常见图像处理功能。代码分为两部分:GUI界面设计和回调函数实现。 %% 第一部分:创建GUI界面 (使用GUIDE) % 1. 打开GUIDE: guide % 2. 创建新GUI,添加以下控件: % - …...
C语言水仙花数
水仙花数(Narcissistic Number)也被称为自幂数,是数学中的一种特殊三位数,属于自幂数的一种类型。它的定义为:一个三位数,其各位数字的立方和等于该数本身。 具体定义与计算方式条件: 设一个三位…...
前k个高频元素
pair<int int>:用于存储两个数字。(pair<int string>用于存储一个整数和一个字符串) const pair<int int>:表示pair对象是常量,一旦初始化以后,其内部的两个成员值都不能被修改。 bool…...
人工智能与智能的底色都是哲学
人工智能与智能的底色都是哲学,因为哲学为它们提供了对“智能”本质的追问与思考。哲学自古以来便对人类智能、思维与意识进行深入探讨,为理解智能的结构和功能奠定了基础。同时,人工智能的发展也引发了诸多哲学问题,如伦理道德、…...
能碳管理系统:助力企业实现“双碳“目标
在全球气候治理和绿色低碳发展的大背景下,能碳管理系统正成为企业应对气候变化、实现"碳达峰、碳中和"战略目标的核心工具。这一系统通过数字化手段将能源管理与碳排放管控深度融合,为企业低碳转型提供全方位支持。 一、系统架构与核心技术 …...
开源鸿蒙北向源码开发: 5.0kit化相关sdk编译
5.0kit化可以在编译系统sdk时添加,将你的kit文件加入编译使得最终生成的sdk包含kits文件 修改编译脚本 修改build仓里面的构建脚本文件,添加kits目录脚本命令 社区的build脚本已经有kits编译功能了,只需要把你的kits目录新增的kit拷贝到社区仓interface仓了,和社区的都一起编…...
多通道电源管理芯片在分布式能源系统中的优化策略
摘要:随着分布式能源系统的广泛应用,对电源管理芯片的性能要求日益提升。本文深入探讨了多通道电源管理芯片在分布式能源系统中的优化策略,以国科安芯的ASP4644芯片为例,从电气特性、工作模式、热管理、可靠性设计以及系统集成为主…...
IEEE 列表会议第五届机器人、自动化与智能控制国际会议
会议地点:中国 成都 会议官网:ICRAIC 主办单位:成都理工大学 协办单位:成都大学 早鸟截稿:2025年7月15日 截稿时间:2025年8月20日 出版信息:IEEE出版&EI数据库 会议时间:…...
GitHub 趋势日报 (2025年05月15日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1TapXWorld/ChinaTextbookPDF教材。⭐ 6685⭐ 15287Roff2xming521/WeClone&…...
Java 并发编程归纳总结(可重入锁 | JMM | synchronized 实现原理)
1、锁的可重入 一个不可重入的锁,抢占该锁的方法递归调用自己,或者两个持有该锁的方法之间发生调用,都会发生死锁。以之前实现的显式独占锁为例,在递归调用时会发生死锁: public class MyLock implements Lock {/* 仅…...
Git 笔记
设置Git的user name和email $ git config --global user.name "bread" $ git config --global user.email "1234567890qq.com"因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。git config --global 参数,有了这…...
蒟蒻编程日志
ORZ (用于记录你这个“人”是不是真的,也就是说CSDN的流量是否属合适) 2025/4/14 21:25 开坑 前言 2024/10/26:CSP-J 260pts,CSP-S 45pts。 2025/3/1:%你赛 180pts rk34 寄!这就是不认真的…...
深入GoFrame框架:GToken的优势、实践与踩坑经验分享
一、引言 近年来,Go语言凭借其简洁的语法、高并发性能和强大的标准库,在后端开发领域迅速崛起。从微服务到企业级应用,Go的生态圈正在蓬勃发展,吸引了越来越多的开发者投入其中。在这个生态中,框架的选择往往决定了项…...
MODBUS RTU调试助手使用方法详解
一、软件简介 485调试助手是一款常用的串口通信调试工具,专门用于RS-485总线设备的测试、调试和通信监控。它支持多种串口参数设置,提供数据收发功能,是工业现场调试的必备工具之一。 二、软件安装与启动 1. 系统要求 Windows 7/10/11操作…...
【专利信息服务平台-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
我用 Appuploader绕过 Mac,成功把 iOS 应用上线了 App Store
我以前总觉得,iOS 上架是 macOS Xcode 专属的领域。直到最近项目必须要上架 iOS,团队却没人用 Mac,只能临时组建了一套“跨平台上架流程”。 这篇文章记录我这个“非典型 iOS 开发者”是如何绕开传统 Xcode 流程,借助一系列工具…...
Mac上安装运行SynthTIGER
1. 确保已安装 Python 环境 SynthTIGER 需要 Python 3.6。如果你的 Mac 没有安装 Python: 推荐通过 Homebrew 安装: brew install python 或从 Python 官网 下载安装。 验证安装: python3 --version pip3 --version 2. 安装 SynthTIGER…...
从代码学习深度学习 - 实战Kaggle比赛:狗的品种识别(ImageNet Dogs)PyTorch版
文章目录 前言1. 获取和整理数据集1.1 读取标签1.2 整理数据集:划分训练集和验证集1.3 整理测试集1.4 执行数据重组 2. 图像增广3. 读取数据集3.1 创建Dataset实例3.2 创建DataLoader实例 4. 微调预训练模型4.1 定义网络结构4.2 定义损失函数和评估函数 5. 定义训练…...
翼兴消防监控 – 大数据可视化HTML源码
概述 在当今数据驱动的时代,大数据可视化已成为各行各业不可或缺的工具。幽络源今天为大家带来一款基于ECharts的消防监控大屏HTML源码,帮助开发者快速搭建专业级数据展示界面。这款源码设计简洁大方,功能完善,适合各类监控场景使…...
搭建运行若依微服务版本ruoyi-cloud最新教程
搭建运行若依微服务版本ruoyi-cloud 一、环境准备 JDK > 1.8MySQL > 5.7Maven > 3.0Node > 12Redis > 3 二、后端 2.1数据库准备 在navicat上创建数据库ry-seata、ry-config、ry-cloud运行SQL文件ry_20250425.sql、ry_config_20250224.sql、ry_seata_2021012…...
火山引擎AI大模型
火山引擎的AI大模型(如**“云雀”大模型**)作为字节跳动旗下的核心技术产品,在性能、应用场景和技术生态上表现较为突出,尤其在字节自身业务(如抖音、TikTok等)的打磨下,具备较强的实用性和行业…...
isaacgym环境安装
1. 系统环境 操作系统:Ubuntu 18.04.6 LTSGPU:NVIDIA TITAN RTXDriver 版本: 510.108.03CUDA 版本:11.6 2. conda安装以及环境安装 略过(参考内容:https://github.com/unitreerobotics/unitree_rl_gym/blob/main/doc…...
使用Mathematica制作Lorenz吸引子的轨道追踪视频
Lorenz奇异吸引子是混沌理论中最早被发现和研究的吸引子之一,它由Edward Lorenz在1963年研究确定性非周期流时提出。Lorenz吸引子以其独特的"蝴蝶"形状而闻名,是混沌系统和非线性动力学的经典例子。 L NDSolveValue[{x[t] -3 (x[t] - y[t]),…...
基于matlab的D2D 功率控制仿真
基于MATLAB的D2D(Device-to-Device)功率控制仿真示例,包含系统建模、功率控制算法实现和性能分析。该仿真以蜂窝网络为背景,重点关注D2D用户间的干扰管理和功率优化。 1. 系统模型与参数设置 clc; clear; close all;%% 参数配置…...
将three.js场景保存成图片
使用html2canvas或者canvas.toDataURL,直接转会发现场景是空白的 解决方案:在转图片之前先渲染一下场景,就不会导致因为渲染问题的闪白了 1. 获取dom let canvas: any renderer.domElement;2. 转图片并下载 renderer.render(scene,camera…...
Java注解详解:从入门到实战应用篇
1. 引言 Java注解(Annotation)是JDK 5.0引入的一种元数据机制,用于为代码提供附加信息。它广泛应用于框架开发、代码生成、编译检查等领域。本文将从基础到实战,全面解析Java注解的核心概念和使用场景。 2. 注解基础概念 2.1 什…...
在哪一个终端下运行有影响吗?pip install pillow
在哪一个终端下运行有影响吗?pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn,需要切换到主目录吗? 1. 是否需要切换目录? 不需要切换目录 pip install 安装的包会存放…...
Java与C/C++跨平台互操作深度解析:Project Panama技术实战
简介 Project Panama是Java语言历史上最重要的互操作性增强项目之一,它通过Foreign Function & Memory API彻底改变了Java与本地代码交互的方式。相比传统的JNI方法,Panama提供了更安全、更高效、更易用的API,使得Java程序能够直接调用C/C++函数并操作外部内存,而无需…...