外观
OceanBase 操作系统预配置
核心概念
操作系统预配置是指在安装OceanBase数据库之前,对服务器操作系统进行的一系列配置和优化,以确保操作系统环境满足OceanBase的运行需求。合理的操作系统预配置可以提高OceanBase的性能、稳定性和可靠性,避免因操作系统配置不当导致的各种问题。
操作系统支持
1. 支持的操作系统版本
OceanBase支持以下主流Linux操作系统版本:
- CentOS/RHEL:7.2及以上版本,推荐7.6-7.9
- Ubuntu:18.04及以上版本
- Debian:9.0及以上版本
- SUSE Linux Enterprise Server:12 SP3及以上版本
2. 操作系统架构
OceanBase支持以下硬件架构:
- x86-64:64位x86架构,支持Intel和AMD处理器
- ARM64:64位ARM架构,支持鲲鹏、飞腾等处理器
硬件资源要求
1. CPU要求
- 推荐使用8核及以上CPU
- 支持Intel Xeon E5/E7系列、AMD EPYC系列等服务器级CPU
- 支持ARMv8及以上架构的CPU
2. 内存要求
- 推荐使用16GB及以上内存
- 生产环境建议32GB及以上内存
- 内存大小应根据集群规模和业务需求进行调整
3. 存储要求
- 系统盘:至少100GB,推荐使用SSD
- 数据盘:根据数据量大小配置,推荐使用SSD或NVMe SSD
- 日志盘:推荐使用低延迟的NVMe SSD,大小根据日志量配置
4. 网络要求
- 推荐使用10Gbps及以上以太网
- 支持RDMA网络(可选,用于提高性能)
- 网络延迟应小于1ms(节点间)
操作系统预配置步骤
1. 系统基础配置
1.1 关闭防火墙
OceanBase集群内部节点间需要大量的网络通信,建议关闭防火墙或配置适当的防火墙规则。
bash
# 关闭防火墙(CentOS/RHEL 7)
systemctl stop firewalld
systemctl disable firewalld
# 关闭防火墙(Ubuntu)
usystemctl stop ufw
ufw disable1.2 关闭SELinux
SELinux可能会影响OceanBase的正常运行,建议关闭SELinux。
bash
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux
vi /etc/selinux/config
# 将SELINUX=enforcing改为SELINUX=disabled1.3 关闭swap分区
关闭swap分区可以提高OceanBase的性能和稳定性。
bash
# 临时关闭swap
swapoff -a
# 永久关闭swap
vi /etc/fstab
# 注释掉swap相关的行1.4 设置时区
确保所有节点的时区一致,建议设置为UTC或当地时区。
bash
# 设置时区为UTC
timedatectl set-timezone UTC
# 或设置为北京时间
timedatectl set-timezone Asia/Shanghai
# 启用NTP时间同步
systemctl start chronyd
systemctl enable chronyd2. 内核参数优化
2.1 编辑sysctl.conf文件
bash
vi /etc/sysctl.conf添加或修改以下内核参数:
txt
# 网络相关参数
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.core.rmem_default = 8388608
net.core.wmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_max_tw_buckets = 1048576
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
# 文件系统相关参数
fs.file-max = 655350
fs.aio-max-nr = 1048576
# 内存相关参数
vm.swappiness = 0
vm.min_free_kbytes = 2097152
vm.max_map_count = 655360
vm.dirty_ratio = 5
vm.dirty_background_ratio = 3
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 5002.2 使内核参数生效
bash
sysctl -p3. 资源限制配置
3.1 编辑limits.conf文件
bash
vi /etc/security/limits.conf添加以下资源限制:
txt
* soft nofile 655350
* hard nofile 655350
* soft nproc 655350
* hard nproc 655350
* soft core unlimited
* hard core unlimited
* soft stack 20480
* hard stack 204803.2 编辑20-nproc.conf文件(仅CentOS/RHEL 7)
bash
vi /etc/security/limits.d/20-nproc.conf修改为:
txt
* soft nproc 655350
root soft nproc unlimited4. 文件系统配置
4.1 格式化数据盘和日志盘
推荐使用ext4或xfs文件系统,xfs性能更好,推荐使用。
bash
# 格式化数据盘为xfs
mkfs.xfs -f /dev/sdb
# 格式化日志盘为xfs
mkfs.xfs -f /dev/sdc4.2 挂载数据盘和日志盘
bash
# 创建挂载目录
mkdir -p /data/1 /log/1
# 编辑fstab文件
vi /etc/fstab
# 添加挂载条目
/dev/sdb /data/1 xfs defaults,noatime,nodiratime,nobarrier 0 0
/dev/sdc /log/1 xfs defaults,noatime,nodiratime,nobarrier 0 0
# 挂载磁盘
mount -a4.3 设置磁盘IO调度器
对于SSD或NVMe SSD,推荐使用none或mq-deadline调度器。
bash
# 临时设置IO调度器
echo none > /sys/block/sdb/queue/scheduler
echo none > /sys/block/sdc/queue/scheduler
# 永久设置IO调度器
vi /etc/default/grub
# 在GRUB_CMDLINE_LINUX中添加:elevator=none
# 更新grub
# CentOS/RHEL 7
grub2-mkconfig -o /boot/grub2/grub.cfg
# Ubuntu
update-grub5. 用户和组配置
5.1 创建OceanBase用户和组
bash
# 创建obd用户组
groupadd -g 2000 obd
# 创建oceanbase用户组
groupadd -g 2001 oceanbase
# 创建obd用户
useradd -u 2000 -g obd -G oceanbase -m -d /home/obd -s /bin/bash obd
# 创建oceanbase用户
useradd -u 2001 -g oceanbase -m -d /home/oceanbase -s /bin/bash oceanbase
# 设置密码
echo "obd:StrongPass@2024" | chpasswd
echo "oceanbase:StrongPass@2024" | chpasswd5.2 设置用户权限
bash
# 设置数据盘和日志盘的所有者
chown -R oceanbase:oceanbase /data /log
# 允许obd用户sudo权限
echo "obd ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers6. 依赖包安装
6.1 安装必要的依赖包
bash
# CentOS/RHEL 7
yum install -y yum-utils device-mapper-persistent-data lvm2 gcc gcc-c++ make cmake libtool autoconf automake libaio-devel libevent-devel libxml2-devel zlib-devel openssl-devel ncurses-devel bison flex git
# Ubuntu
apt-get update
apt-get install -y gcc g++ make cmake libtool autoconf automake libaio-dev libevent-dev libxml2-dev zlib1g-dev libssl-dev libncurses5-dev bison flex git6.2 安装Python 3
OceanBase 4.0及以上版本需要Python 3.6及以上版本。
bash
# CentOS/RHEL 7
yum install -y python3 python3-devel python3-pip
# Ubuntu
apt-get install -y python3 python3-dev python3-pip
# 升级pip
pip3 install --upgrade pip7. 网络配置
7.1 配置静态IP
编辑网络配置文件,设置静态IP地址。
bash
# CentOS/RHEL 7
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 示例配置
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=114.114.114.114
# 重启网络
systemctl restart network7.2 配置主机名和hosts文件
bash
# 设置主机名
hostnamectl set-hostname ob-node1
# 编辑hosts文件
vi /etc/hosts
# 添加节点信息
192.168.1.100 ob-node1
192.168.1.101 ob-node2
192.168.1.102 ob-node3操作系统预配置验证
1. 验证内核参数
bash
sysctl -a | grep -E "net.core.somaxconn|net.core.netdev_max_backlog|fs.file-max|vm.swappiness"2. 验证资源限制
bash
# 切换到oceanbase用户
su - oceanbase
# 验证资源限制
ulimit -a3. 验证磁盘挂载
bash
df -h
mount | grep -E "/data|/log"4. 验证网络配置
bash
# 验证IP配置
ip addr
# 验证网络连通性
ping -c 3 ob-node1
ping -c 3 ob-node2
ping -c 3 ob-node35. 验证依赖包
bash
# 验证Python版本
python3 --version
# 验证gcc版本
gcc --version预配置最佳实践
1. 统一配置所有节点
确保OceanBase集群所有节点的操作系统配置一致,包括内核参数、资源限制、文件系统、网络配置等。
2. 分阶段配置
- 先在单个测试节点上进行配置和验证
- 验证通过后,再将配置应用到所有生产节点
- 使用自动化工具(如Ansible)批量配置所有节点
3. 记录配置变更
- 记录所有操作系统配置变更
- 包括变更时间、变更内容、变更人等信息
- 定期备份配置文件
4. 定期检查配置
- 定期检查操作系统配置是否符合要求
- 检查配置文件是否被意外修改
- 根据OceanBase版本升级,及时更新操作系统配置
5. 考虑性能和稳定性平衡
- 内核参数优化应根据实际硬件配置进行调整
- 避免过度优化,可能导致系统不稳定
- 建议参考OceanBase官方推荐的配置值
常见问题(FAQ)
Q1: 操作系统预配置不生效怎么办?
A1: 操作系统预配置不生效的常见原因和解决方法:
- 配置文件编辑错误:检查配置文件内容是否正确
- 没有重启服务:某些配置需要重启服务或系统才能生效
- 配置被其他文件覆盖:检查是否有其他配置文件覆盖了当前配置
- 权限问题:确保配置文件的权限正确
Q2: 如何选择适合OceanBase的文件系统?
A2: 选择文件系统的建议:
- 推荐使用xfs文件系统,性能更好
- ext4文件系统也可以使用,但性能略差
- 不推荐使用btrfs等较新的文件系统,可能存在兼容性问题
- 对于SSD或NVMe SSD,建议使用xfs文件系统
Q3: 为什么要关闭swap分区?
A3: 关闭swap分区的原因:
- 避免OceanBase使用swap空间,提高性能
- 防止因swap导致的性能抖动
- 确保OceanBase使用的是物理内存,提高数据安全性
- 符合OceanBase的最佳实践要求
Q4: 如何批量配置多个节点?
A4: 批量配置多个节点的方法:
- 使用自动化工具,如Ansible、SaltStack等
- 编写Shell脚本,通过ssh批量执行命令
- 使用OceanBase Deployer (OBD)工具,它会自动配置操作系统
Q5: 操作系统版本不满足要求怎么办?
A5: 操作系统版本不满足要求的解决方法:
- 升级操作系统到支持的版本
- 如果无法升级,可以尝试在当前版本上安装,但可能存在兼容性问题
- 建议使用OceanBase官方推荐的操作系统版本
Q6: 如何验证操作系统预配置是否符合OceanBase要求?
A6: 验证操作系统预配置的方法:
- 使用OceanBase Deployer (OBD)工具的check命令,它会自动检查操作系统配置
- 手动检查关键配置项,如内核参数、资源限制、文件系统等
- 参考OceanBase官方文档,逐一核对配置要求
Q7: 为什么要设置vm.swappiness=0?
A7: 设置vm.swappiness=0的原因:
- 告诉Linux内核尽量不要使用swap空间
- 只有当物理内存不足时才使用swap空间
- 避免因swap导致的性能下降
- 提高OceanBase的性能和稳定性
