暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase 部署前配置

SQL新手 2022-12-09
213

部署 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_dirredo_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 登录:

  1. 在中控机器上运行以下命令查看密钥是否存在:

    ls ~/.ssh/id_rsa.pub
    

    如果密钥已经存在,则无需生成新的密钥。

  2. (可选)在中控机器上运行以下命令生成 SSH 公钥和私钥:

    ssh-keygen -t rsa
    
  3. 在中控机器上执行以下命令登录目标机器:

    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 时钟同步。

  1. 在每台机器上执行以下命令安装 NTP。

    yum install ntp ntpdate -y
    
  2. 运行以下命令查看服务器的 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
    
  3. (可选)开启 NTP 服务端服务。

    如果您已经有了 NTP 服务端服务器,则可跳过此步骤。本文档使用目标机器 10.244.0.114 作为 NTP 服务端服务器。

    1. 编辑配置文件。

      以 root 用户登录 NTP 服务端服务器,运行以下命令编辑配置文件:

      vi /etc/ntp.conf
      

      在配置文件中添加以下内容:

      server <yout_ntp_server_ip>
      

      保存并关闭配置文件。

    2. 运行以下命令重启 NTP 服务端服务:

      service ntpd restart
      
    3. 运行以下命令查看 NTP 服务端服务是否启动成功:

      ps -ef | grep -i ntpd
      
    4. 运行以下命令设置 NTP 服务开机自启动:

      chkconfig ntpd on
      
  4. 开启 NTP 客户端服务。

    注意

    NTP 服务端服务启动后,您需要等待 5 分钟再开启 NTP 客户端服务。否则系统会提示 "no server suitable for synchronization found"。

    1. 使用 root 用户登录 OceanBase 数据库。

    2. 运行以下命令停止 NTP 服务:

      service ntpd stop
      
    3. 运行以下命令同步 NTP 服务端时间:

      ntpdate 10.244.0.114
      
    4. 编辑配置文件。

      运行以下命令打开配置文件:

      vi /etc/ntp.conf
      

      在配置文件中添加以下内容:

      server <yout_ntp_server_ip>
      
    5. 运行以下命令,启动 NTP 服务:

      /etc/init.d/ntpd start
      
  5. 运行以下命令验证配置是否成功。

    运行命令:

    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 的默认值为 95data_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

创建用户

如果您是个人用户,您可以直接使用 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 为示例挂载目录。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论