部署 OceanBase 集群前,您需要进行系统环境和配置检查。
查看资源
如果您是企业用户,建议您在部署 OceanBase 集群时,所有的机器使用相同的软硬件配置。如果您部署的是单机版 OceanBase 数据库,您可以跳过此步骤。
OceanBase 数据库支持 Red Hat Enterprise Linux Server 7.X、CentOS 7.X 和 Anolis OS 8.X 等操作系统。详细信息,参考 软硬件要求。
说明
本文中的配置文件指使用 OBD 部署 OceanBase 数据库时需要配置的文件。更多配置文件信息,参考 配置文件示例。
查看操作系统
Red Hat Enterprise Linux Server 7.X
运行以下命令,查看操作系统信息:
cat /etc/redhat-release
返回结果如下:
Red Hat Enterprise Linux Server release 7.2 (Maipo)
CentOS 7.X
运行以下命令,查看操作系统信息:
cat /etc/redhat-release
返回结果如下:
CentOS Linux release 7.2.1511 (Core)
Anolis OS 8.X
运行以下命令,查看操作系统信息:
cat /etc/os-release
返回结果如下:
NAME="Anolis OS"
VERSION="8.2"
ID="anolis"
ID_LIKE="rhel fedora centos"
VERSION_ID="8.2"
PLATFORM_ID="platform:an8"
PRETTY_NAME="Anolis OS 8.2"
ANSI_COLOR="0;31"
HOME_URL="https://openanolis.cn/"
Unbutu
运行以下命令,查看操作系统信息:
cat /etc/os-release
返回结果如下:
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
Debian9
运行以下命令,查看操作系统信息:
cat /etc/os-release
返回结果如下:
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
查看内核
运行以下命令,查看内核信息:
uname -r
OceanBase 数据库要求操作系统为 3.10.0 及以上。
查看内存
运行以下命令,查看内存:
free -g
如果可用内存小于配置文件中的 memory_limit 值,请清理缓存或者修改配置 memory_limit,将 memory_limit 修改为小于可用内存的值。
执行以下命令,清理缓存:
echo 3 > /proc/sys/vm/drop_caches
查看磁盘
运行以下命令,查看磁盘:
df -h
确保配置文件中的 data_dir、redo_dir 和 home_path 对应的磁盘已经完成挂载。data_dir 和 redo_dir 对应目录为空,data_dir 对应目录的磁盘已经使用率必须低于 4%。
查看网卡名称
您需要为配置文件中的 devname 配置项指定网卡。示例配置文件如下:
# Please set devname as the network adaptor's name whose ip is in the setting of severs.
# if set severs as "127.0.0.1", please set devname as "lo"
# if current ip is 192.168.1.10, and the ip's network adaptor's name is "eth0", please use "eth0"
devname: eth0
执行以下命令,查看网卡名称:
ifconfig
注意
要执行
ifconfig命令,您必须安装net-tools依赖。
设置无密码 SSH 登录
名词解释
中控机器
存储 OceanBase 数据库安装包和集群配置信息的机器。
目标机器
安装 OceanBase 数据库的机器。
前提条件
设置无密码 SSH 登录前,确保您拥有目标机器的 root 用户权限。
操作步骤
按以下步骤设置无密码 SSH 登录:
在中控机器上运行以下命令查看密钥是否存在:
ls ~/.ssh/id_rsa.pub如果密钥已经存在,则无需生成新的密钥。
(可选)在中控机器上运行以下命令生成 SSH 公钥和私钥:
ssh-keygen -t rsa在中控机器上执行以下命令登录目标机器:
ssh-copy-id root@<server_ip>
(附录)脚本参考
推荐您使用以下脚本,执行以下脚本需要拥有 sudo 权限。
#!/usr/bin/bash
SERVERS=("root@172.19.x.x root@172.19.x.x" "root@172.19.x.x" "root@172.19.x.x")
PASSWORD="test@"
keygen() {
yum -y install expect
expect -c "
spawn ssh-keygen -t rsa
expect {
*(/root/.ssh/id_rsa):* { send -- \r;exp_continue}
*(y/n)* { send -- y\r;exp_continue}
*Enter* { send -- \r;exp_continue}
*(y/n)* { send -- y\r;exp_continue}
*Enter* { send -- \r;exp_continue}
eof {exit 0}
}
expect eof
"
}
copy(){
expect -c "
set timeout -1
spawn ssh-copy-id $1
expect {
*(yes/no)* { send -- yes\r; exp_continue }
*password:* { send -- $PASSWORD\r; exp_continue}
eof {exit 0}
}
expect eof
"
}
ssh_copy_id_to_all(){
keygen ;
for host in ${SERVERS[@]}
do
copy $host
done
}
ssh_copy_id_to_all
注意
您必须将脚本中的 hosts 列表和 password 替换成您自己的实际机器列表和密码。
配置时钟源
如果您使用集群安装 OceanBase,则需要保证集群内各机器的时间同步。否则集群无法启动,服务在运行时也会出现异常。如果您已配置 NTP 时钟同步,则无需重新配置。
OceanBase 集群中的服务器时间必须保持一致,否则会导致 OceanBase 集群无法启动,运行时也会出现故障。物理机与时钟服务器的误差在 50ms 以下可认为时钟是同步状态,OceanBase 集群最大容忍误差不能超过 100ms。当超过 100ms 时,会出现无主情况。恢复时钟同步后。重启 OceanBase 集群, 可以恢复正常。
前提条件
配置 NTP 时钟源前,确保您拥有所有机器的 root 用户权限。
操作步骤
按以下步骤配置 NTP 时钟同步。
在每台机器上执行以下命令安装 NTP。
yum install ntp ntpdate -y运行以下命令查看服务器的 NTP 连接。
当物理机与时钟服务器的时间误差在 50ms 以内时,系统即认为时钟是同步的。
[root@centos-01 /root]#ntpq -4p remote refid st t when poll reach delay offset jitter ============================================================================== *time6.aliyun.co 10.137.38.86 2 u 712 1024 377 21.951 4.253 4.208(可选)开启 NTP 服务端服务。
如果您已经有了 NTP 服务端服务器,则可跳过此步骤。本文档使用目标机器
10.244.0.114作为 NTP 服务端服务器。编辑配置文件。
以 root 用户登录 NTP 服务端服务器,运行以下命令编辑配置文件:
vi /etc/ntp.conf在配置文件中添加以下内容:
server <yout_ntp_server_ip>保存并关闭配置文件。
运行以下命令重启 NTP 服务端服务:
service ntpd restart运行以下命令查看 NTP 服务端服务是否启动成功:
ps -ef | grep -i ntpd运行以下命令设置 NTP 服务开机自启动:
chkconfig ntpd on
开启 NTP 客户端服务。
注意
NTP 服务端服务启动后,您需要等待 5 分钟再开启 NTP 客户端服务。否则系统会提示 "no server suitable for synchronization found"。
使用 root 用户登录 OceanBase 数据库。
运行以下命令停止 NTP 服务:
service ntpd stop运行以下命令同步 NTP 服务端时间:
ntpdate 10.244.0.114编辑配置文件。
运行以下命令打开配置文件:
vi /etc/ntp.conf在配置文件中添加以下内容:
server <yout_ntp_server_ip>运行以下命令,启动 NTP 服务:
/etc/init.d/ntpd start
运行以下命令验证配置是否成功。
运行命令:
ntpstat返回以下结果:
synchronised to NTP server (10.143.0.44) at stratum 3 time correct to within 2 ms polling server every 64 s运行命令:
timedatectl返回以下结果:
Local time: Thu 2021-04-22 11:02:32 CST Universal time: Thu 2021-04-22 03:02:32 UTC RTC time: Thu 2021-04-22 11:02:32 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: yes RTC in local TZ: yes DST active: n/a说明 NTP 服务生效。
规划磁盘
OceanBase 数据库的服务器依赖数据盘、事务日志盘和 OceanBase 数据库的安装盘。如果您是个人用户, 您可以将所有数据放到一块盘上并跳过此步骤。如果您是企业用户,您必须将数据分别挂载至三块磁盘。
如果您的机器上没有三块磁盘,或者您使用的是 RAID 磁盘阵列, 您需要对磁盘或者磁盘阵列的逻辑卷进行分区。建议您采用以下方案分区:
数据盘
数据盘的配置参数为
data_dir。数据盘用来存储基线数据。在您首次启动 OceanBase 数据库时,${data_dir}/sstable将自动创建。数据盘的大小由datafile_disk_percentage参数决定。datafile_disk_percentage的默认值为95。data_dir创建后无法调整大小。您可以通过加减机器为 OceanBase 数据库进行扩容和缩容。目前,OceanBase 数据库不支持单机的磁盘级扩容和缩容。事务日志盘
事务日志盘的配置参数为
redo_dir。建议您将事务日志盘的大小设置为 OceanBase 数据库内存的 3 倍到 4 倍及以上。事务日志盘包含多个固定大小的文件。这些文件位于安装目录${redo_dir}/{clog,ilog,slog}下。您可以根据您的需要自动创建和清除事务日志。事务日志达到磁盘总量的 80% 时,将触发自动清除。但是,只有事务日志对应的内存数据已经合并融至基线数据中时,事务日志才能被删除。在相同数据量的情况下,事务日志的大小约为内存数据大小的三倍。因此事务日志盘所需空间上限与两次合并后的数据总量成正比。经验公式:事务日志文件大小 = 增量数据内存上限的 3 到 4 倍。OceanBase 数据库安装盘
OceanBase 数据库安装盘的配置参数为
home_path。建议您为 OceanBase 数据库安装盘预留至少 200 G 空间,以保存 7 天及以上的日志。OceanBase 数据库的 RPM 包安装目录位于${home_path}下。其中,基线数据文件和事务日志文件会通过软链接分别指向独立的数据盘和事务日志盘。OceanBase 数据库的运行日志位于${home_path}/log下。运行日志会不断增长,并且 OceanBase 数据库无法自动删除运行日志。因此您需要定时删除运行日志。
磁盘划分后, 执行以下命令检查磁盘划分情况:
df -h
返回以下结果:
Filesystem Size Used Avail Use% Mounted on
devtmpfs 31G 0 31G 0% /dev
tmpfs 31G 0 31G 0% /dev/shm
tmpfs 31G 516K 31G 1% /run
tmpfs 31G 0 31G 0% /sys/fs/cgroup
/dev/vda1 493G 171G 302G 37% /
tmpfs 6.2G 0 6.2G 0% /run/user/0
/dev/vdd1 984G 77M 934G 1% /data
/dev/vdc1 196G 61M 186G 1% /redo
/dev/vdb1 492G 73M 467G 1% /home/admin/oceanbase
结果说明
/data为数据盘,大小为 1 TB。/redo存放 redo 日志。/home/admin/oceanbase存放 OceanBase 数据库的二进制文件和运行日志。
配置 limits.conf
您可以通过配置 limits.conf 限制您的进程数量。如果您是个人用户,您可以跳过此步骤。如果您是企业用户,您必须配置 limits.conf。
您可以使用以下两种方法修改资源限制:
通过启动时在会话级别修改。
通过配置文件
/etc/security/limits.conf在全局级别修改。
OceanBase 数据库的进程涉及的限制包括线程最大栈空间大小(Stack)、最大文件句柄数(Open Files)和 core 文件大小 (Core File Size)。
更改配置
说明
您必须在每台机器上执行此操作。
将会话级别的最大栈空间大小设置为 unlimited,最大文件句柄数设置为 655350,Core 文件大小设置为 unlimited。
执行以下命令,打开 /etc/security/limits.conf 配置文件:
vi /etc/security/limits.conf
在 /etc/security/limits.conf 配置文件中添加以下内容:
root soft nofile 655350
root hard nofile 655350
* soft nofile 655350
* hard nofile 655350
* soft stack 20480
* hard stack 20480
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited
查看配置
退出当前会话,重新登录。执行以下命令,查看配置是否生效:
ulimit -a
配置 sysctl.conf
为保证 OceanBase 数据库正常运行,在安装 OceanBase 数据库之前,您需要修改所有机器的 sysctl.conf 配置,以提高 Linux 系统的性能。如果您是个人用户,您可以跳过此步骤。如果您是企业用户,您必须配置 sysctl.conf。
说明
您必须在每台机器上执行此操作。
更改配置
执行以下命令,打开 /etc/sysctl.conf 配置文件:
vi /etc/sysctl.conf
在 /etc/sysctl.conf 配置文件中添加以下内容:
# for oceanbase
## 修改内核异步 I/O 限制
fs.aio-max-nr=1048576
## 网络优化
net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 3500 65535
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_slow_start_after_idle=0
vm.swappiness = 0
vm.min_free_kbytes = 2097152
# 此处为 OceanBase 数据库的 data 目录
kernel.core_pattern = /data/core-%e-%p-%t
其中,kernel.core_pattern 中的 /data 为 OceanBase 数据库的 data 目录。如果您只是测试,您可以只设置 fs.aio-max-nr=1048576。
加载配置
更改配置完成后,执行以下命令,加载配置,使配置生效。
sysctl -p
关闭防火墙和 SELinux
如果您是个人用户,您可以跳过此步骤。如果您是企业用户,建议您关闭防火墙和 SELinux。
说明
您必须在每台机器上执行此操作。
关闭防火墙
依次执行以下命令,关闭防火墙:
systemctl disable firewalld
systemctl stop firewalld
systemctl status firewalld
关闭 SELinux
执行以下命令,打开 /etc/selinux/config 配置文件:
vi /etc/selinux/config
在 /etc/selinux/config 配置文件中修改对应配置项为以下内容:
SELINUX=disabled
执行以下命令或重启服务器,使更改生效:
setenforce 0
执行以下命令,查看更改是否生效:
sestatus
ARM 环境部署建议
bios 及内核参数开启 numa 支持
执行以下命令关闭 numa balancing,避免 balance 过程中性能可能发生抖动
sysctl kernel.numa_balancing=0执行以下命令将 zone_reclaim_mode 设置为0
sysctl vm.zone_reclaim_mode=0
创建用户
如果您是个人用户,您可以直接使用 root 账号并跳过此步骤。如果您是企业用户,建议您在机器上创建普通用户,以确保安全。您可以根据实际需要,创建您的常用账户。
说明
您必须在每台机器上执行此操作。
按照以下步骤创建用户。此处以创建 admin 用户为例进行说明。
执行以下命令,创建账户 admin。
useradd -U admin -d /home/admin -s /bin/bash mkdir -p /home/admin sudo chown -R admin:admin /home/admin执行以下命令,为账户 admin 设置密码。
passwd admin(可选)为账户 admin 设置 sudo 权限。
执行以下命令,打开
/etc/sudoers文件。在/etc/sudoers文件添加以下内容:## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL admin ALL=(ALL) NOPASSWD: ALL执行以下命令,查看目录权限。
ls -al返回以下结果:
drwxr-xr-x 2 admin admin 4096 2 月 9 18:43 drwxr-xr-x 2 admin admin 4096 2 月 9 18:43 log1若 admin 用户无权限,则以 root 用户执行以下命令:
chown -R admin:admin /data chown -R admin:admin /redo chown -R admin:admin /home/admin此处填写您真实的挂载目录。此处
/data、/redo、/home/admin为示例挂载目录。




