Skip to content

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 disable

1.2 关闭SELinux

SELinux可能会影响OceanBase的正常运行,建议关闭SELinux。

bash
# 临时关闭SELinux
setenforce 0

# 永久关闭SELinux
vi /etc/selinux/config
# 将SELINUX=enforcing改为SELINUX=disabled

1.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 chronyd

2. 内核参数优化

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 = 500

2.2 使内核参数生效

bash
sysctl -p

3. 资源限制配置

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 20480

3.2 编辑20-nproc.conf文件(仅CentOS/RHEL 7)

bash
vi /etc/security/limits.d/20-nproc.conf

修改为:

txt
* soft nproc 655350
root soft nproc unlimited

4. 文件系统配置

4.1 格式化数据盘和日志盘

推荐使用ext4或xfs文件系统,xfs性能更好,推荐使用。

bash
# 格式化数据盘为xfs
mkfs.xfs -f /dev/sdb

# 格式化日志盘为xfs
mkfs.xfs -f /dev/sdc

4.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 -a

4.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-grub

5. 用户和组配置

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" | chpasswd

5.2 设置用户权限

bash
# 设置数据盘和日志盘的所有者
chown -R oceanbase:oceanbase /data /log

# 允许obd用户sudo权限
echo "obd ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

6. 依赖包安装

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 git

6.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 pip

7. 网络配置

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 network

7.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 -a

3. 验证磁盘挂载

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-node3

5. 验证依赖包

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的性能和稳定性