部署 OceanBase 集群前,您需要进行系统环境和配置检查。
如果您是企业用户,建议您在部署 OceanBase 集群时,所有的机器使用相同的软硬件配置。如果您部署的是单机版 OceanBase 数据库,您可以跳过此步骤。
OceanBase 数据库支持 Red Hat Enterprise Linux Server 7.X、CentOS 7.X 和 Anolis OS 8.X 等操作系统。详细信息,参考 软硬件要求。
说明
本文中的配置文件指使用 OBD 部署 OceanBase 数据库时需要配置的文件。更多配置文件信息,参考 配置文件示例。
运行以下命令,查看操作系统信息:
cat /etc/redhat-release
返回结果如下:
Red Hat Enterprise Linux Server release 7.2 (Maipo)
运行以下命令,查看操作系统信息:
cat /etc/redhat-release
返回结果如下:
CentOS Linux release 7.2.1511 (Core)
运行以下命令,查看操作系统信息:
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/"
运行以下命令,查看操作系统信息:
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
运行以下命令,查看操作系统信息:
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依赖。
中控机器
存储 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。
您可以使用以下两种方法修改资源限制:
通过启动时在会话级别修改。
通过配置文件
/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
为保证 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。
说明
您必须在每台机器上执行此操作。
依次执行以下命令,关闭防火墙:
systemctl disable firewalld systemctl stop firewalld systemctl status firewalld
执行以下命令,打开
/etc/selinux/config 配置文件:
vi /etc/selinux/config
在
/etc/selinux/config 配置文件中修改对应配置项为以下内容:
SELINUX=disabled
执行以下命令或重启服务器,使更改生效:
setenforce 0
执行以下命令,查看更改是否生效:
sestatus
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 为示例挂载目录。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70026121/viewspace-2932570/ ,如需转载,请注明出处,否则将追究法律责任。