OceanBase集群部署

我认为学习一个中间件比较好的方式是,先了解它的架构和运行原理,然后动手部署一遍,加深对它的了解,再使用它,最后进行总结和分享

本篇介绍OceanBase部署前提条件和集群部署

1.使用开源免费的社区版,企业版需要付费

社区版目前最新是V4.2.1_CE_BP3,它们之间的差异请查看此链接:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000507492

2.OceanBase下载地址

https://www.oceanbase.com/softwarecenter
https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/?spm=a2c6h.25603864.0.0.34a0130dfVJgW5

3.软硬件环境满足以下要求:
项目 描述
系统 内核 Linux 3.10.0 版本及以上,如:CentOS7.X Ubuntu 20.X
CPU 最低要求 2 核,推荐 4 核及以上。
内存 最低要求 8 GB,推荐设置在 16 GB 至 1024 GB 范围内。
磁盘类型 建议使用 SSD 存储。
磁盘存储空间 最低要求 19 GB。
文件系统 EXT4 戓 XFS,当数据超过 16T 时,使用 XFS。
all-in-one 安装包 all-in-one 安装包需选择 V4.1.0 及以上版本。
4.部署方式
  • 使用 OBD 部署 OceanBase 集群 (本篇使用OBD)
  • 使用 OCP 部署 OceanBase 集群
  • 使用 Docker 镜像的方式部署 OceanBase 集群
  • 在 Kubernetes 环境中使用 ob-operator 部署 OceanBase 集群

介绍下部署工具软件:

OBD 全称为 OceanBase Deployer,是 OceanBase 集群安装部署工具,通过命令行部署或白屏web界面部署的方式,将复杂配置流程标准化,降低集群部署难度,该软件包61M,适合中小型团队,OBD文档:https://www.oceanbase.com/docs/community-obd-cn-10000000002049469

OCP 全称为 OceanBase Cloud Platform云平台,是一款以 OceanBase 数据库为核心的企业级数据库管理平台。使用 OCP,可以一键安装、升级、扩容、卸载 OceanBase 数据库集群,创建和管理运维任务,监控集群的运行状态,并查看告警,该软件包ocp-all-in-one-4.2.1有1.1GB,适合有运维能力的大型团队,OCP文档:https://www.oceanbase.com/docs/ocp

OCP Express是OCP的精剪版,是基于 Web 的 OceanBase 4.x 管理工具,它集成在 OceanBase 数据库集群中,可以以极小的资源消耗部署在任意一台数据库节点上,文档:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000508228,https://www.oceanbase.com/docs/community-obd-cn-10000000001690027

5.规划部署方案

根据业务量和高可用要求规划部署方案,有同城三机房三副本、三地五中心五副本

咱们学习使用,选择同城三机房三副本,需要准备三台服务器,每个机房一台服务器,我在Mac上用VMware创建了3台Centos7.4虚拟机,规划如下:

服务器 IP 配置 zone
db1 192.168.113.161 2C 13G 100G zone1
db2 192.168.113.162 2C 10G 100G zone2
db3 192.168.113.163 2C 10G 100G zone3

db1需安装 OBD 软件,配置高一点,OBD用于管理 OceanBase 集群,存储 OceanBase 集群安装包和集群配置信息

因OceanBase集群的服务器都是对等的,所以后续扩容时,每次增加服务器的数量都是zone数量乘以服务器数量,如:3个zone每个加一台 = 3台

6.部署前配置
查看操作系统信息:cat /etc/redhat-release
查看内核信息:uname -r
查看内存:free -g
查看磁盘:df -h
查看网卡:ifconfig
6.1.服务器之间需配置无密码SSH登录
1.查看机器上密钥是否存在:ls ~/.ssh/id_rsa.pub

2.不存在,则生成 SSH 公钥和私钥:ssh-keygen -t rsa

3.将公钥复制到目标机器的 authorized_keys 文件中:ssh-copy-id -i ~/.ssh/id_rsa.pub <user>@<server_ip>

tips:每台服务器都生成密钥并复制到另外其他服务器上

6.2.配置时钟源

OceanBase 集群需要保证集群内各机器的时间同步,否则集群无法启动,服务在运行时也会出现异常,集群允许的时钟偏差不能超过 2s。当超过 2s 时,会出现无主情况

1.安装 NTP:yum install ntp ntpdate -y
2.查看服务器的 NTP 连接:ntpq -4p
3.以某台服务器为NTP 服务端服务器
 3.1.以 root 用户登录 NTP 服务端服务器,编辑配置文件:vi /etc/ntp.conf
 3.2.在配置文件中添加以下内容:server <your_ntp_server_ip>
 3.3.重启 NTP 服务端服务:service ntpd restart
 3.4.查看 NTP 服务端服务是否启动成功:ps -ef | grep -i ntpd
 3.5.设置 NTP 服务开机自启动:chkconfig ntpd on
4.开启 NTP 客户端服务
 4.1.用 root 用户登录 OBServer 节点服务器
 4.2.停止 NTP 服务:service ntpd stop
 4.3.同步 NTP 服务端时间:ntpdate 10.10.10.1
 4.4.编辑配置文件:vi /etc/ntp.conf
 4.5.添加以下内容:server <your_ntp_server_ip>
 4.6.启动 NTP 服务:/etc/init.d/ntpd start
 4.7.运行命令验证配置是否成功:ntpstat
   synchronised to NTP server (xxx.xxx.xxx.xxx) at stratum 3
   time correct to within 2 ms
   polling server every 64 s
 4.8.运行命令验证配置是否成功: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

6.3.规划磁盘

OceanBase数据存储在:事务日志盘、数据盘,并建议这两种数据分别存储在不同磁盘上,从而提供IO效率,此处咱们学习就不区分两块磁盘了。

  • 事务日志盘,建议大小为机器内存的4倍,事务日志达到磁盘总量的 80% 时,将触发自动清除,如 /redo。

  • 数据盘,存储基线数据,如 /data。

6.4.配置 limits.conf

OceanBase 数据库的进程涉及的限制包括线程最大栈空间大小(Stack)、最大文件句柄数(Open Files)和 core 文件大小 (Core File Size),如果不配置会在部署启动时报错,每台服务器都配置:

1.编辑文件:vi /etc/security/limits.conf

2.加入以下内容
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

3.查看配置:ulimit -a
6.5.配置 sysctl.conf

配置网络和内核参数提高 Linux 系统的性能,每台服务器都配置:

1.打开配置:vi /etc/sysctl.conf

2.添加以下内容:
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
修改进程可以拥有的虚拟内存区域数量
vm.max_map_count = 655360

此处为 OceanBase 数据库的 data 目录
kernel.core_pattern = /data/core-%e-%p-%t

3.加载配置,使配置生效:sysctl -p
6.6.关闭防火墙和 SELinux
systemctl disable firewalld 
systemctl stop firewalld
systemctl status firewalld

vi /etc/selinux/config
SELINUX=disabled

setenforce 0
6.7.创建用户

如果是用root帐号部署的,此处可忽略,但真实的环境可能不会给root帐号,那么就需要创建用户,并让帐号有某些目录的权限。

1.创建账户 admin
useradd -U admin -d /home/admin -s /bin/bash
mkdir -p /home/admin
chown -R admin:admin /home/admin

2.为账户 admin 设置密码
passwd admin

3.为账户 admin 设置 sudo 权限
vim /etc/sudoers
添加如下内容:
Same thing without a password
%wheel      ALL=(ALL)       NOPASSWD: ALL
admin       ALL=(ALL)       NOPASSWD: ALL

4.修改OceanBase集群相关文件所属用户,假设/data、/redo、/home/admin为真实挂载目录
chown -R admin:admin /data
chown -R admin:admin /redo
chown -R admin:admin /home/admin
6.8.配置JDK 1.8

OCP Express使用到了jdk,因为它是一个java web服务,下面多配置了一个java_bin,是因为OCP Express可视化部署页面中用到的就是java_bin

vi /etc/profile

export JAVA_HOME=/mnt/software/jdk1.8.0_251
export java_bin=/mnt/software/jdk1.8.0_251/bin
export PATH=$PATH:${JAVA_HOME}/bin

建议以上配置在目标服务器上都配一遍

7.部署

下载好 all-in-one 安装包,包含了安装所需的所有软件和依赖,并将其上传到中控机器目录下,解压并安装

tar -xzf oceanbase-all-in-one-*.tar.gz
cd oceanbase-all-in-one/bin/
./install.sh
source ~/.oceanbase-all-in-one/bin/env.sh

上面的命令只是在中控机上安装好了OBD,同时在中控机上安装了一个本地镜像仓库,并把all-in-one中的所有软件上传到镜像仓库,OBD部署时,会把镜像仓库中用到的安装包分发到各个服务器上进行部署安装

7.1.单机部署

1.1输入 obd demo,就会创建一个最小规格的OceanBase,shell终端会输出连接信息,使用obclient连接即可

1.2通过docker快速部署体验

docker pull oceanbase/oceanbase-ce
#MINI_MODE=1是最小规格,等于0是最大规格部署
docker run -p 2881:2881 --name obstandalone -e MINI_MODE=1 -d oceanbase/oceanbase-ce
docker logs obstandalone | tail -1 ,如果返回boot success!,此步骤要等待好几分钟,因为下载的文件比较大

单机部署不建议生产环境使用

7.5.集群部署

集群部署有OBD、OCP、命令行等方式,下面介绍OBD web页面可视化部署OceanBase集群。

安装 all-in-one后,通过下面命令启动一个web页面,通过web页面可视化方式部署集群,原理是把可视化配置的参数内容生成到一个配置文件里面,最后通过配置文件启动集群

obd web -p 8680
start OBD WEB in 0.0.0.0:8680
please open http://192.168.113.161:8680

访问http://192.168.113.161:8680

页面顶部有5个步骤:部署配置 、节点配置、集群配置、预检查、部署。

  • 部署配置 界面修改 集群名称 并勾选待部署组件,也可不做修改,使用默认配置(默认部署所有组件)。单击 下一步 进入 节点配置 页面
  • 节点配置 页面输入节点 IP 和用户密码,单击 下一步 进入 集群配置 页面

按上面服务器规划,有zone1、zone2、zone3,每个zone有一台服务器,192.168.113.161、192.168.113.162、192.168.113.163,选择zone1为RootServer节点

我是用root用户部署的,输入root和密码

  • 集群配置 页面配置集群的部署模式、密码、目录、端口以及更多配置,您也可不做修改,使用默认配置。单击 下一步 进入 预检查 页面

  • 预检查 页面查看配置信息,无误后单击 预检查 进行检查。若预检查报错,您可根据页面建议选择 自动修复 或者单击 了解更多方案 跳转至错误码文档,参考文档自行修改。所有报错修改后,可单击 重新检查 再次进行预检查。

自动修复一般修复不了,要根据错误信息手动处理,我遇到的是机器资源不够,ulimit太小,jdk未配置正确

  • 预检查通过后,单击 部署 开始 OceanBase 集群的部署。部署成功会输出各个组件的连接方式,可复制进行访问

出现此界面就代表OceanBase部署成功了,各个组件的配置信息非常重要,建议保存后再关闭此页面

OBProxy -> OceanBase 数据库代理(OceanBase Database Proxy,简称ODP),OceanBase 数据库用户的数据会以多副本的形式存放在各个 OBServer 节点上,ODP 接收用户发出的 SQL 请求,并将 SQL 请求转发至最佳目标 OBServer 节点,最后将执行结果返回给用户,有了ODP代理,当后端OBServer宕机、扩缩容时,OBProxy会屏蔽掉无效或下线的OBServer,对客户端透明。

  • 单击 完成,结束部署流程(一定要保存好各个组件的帐号、密码和连接字符串)

使用 OBClient 客户端连接 OceanBase 数据库,也可以使用mysql或Navicat去连接。

通过 ODP 代理访问数据库,以 ODP 所在节点为192.168.113.161 为例
obclient -h192.168.113.161 -P2883 -uroot@sys -p -Doceanbase -A

使用Navicat连接OBProxy

我用OceanBase的root用户,在sys系统租户下,创建了一个demo的数据库,创建一张表tb1,新增了两条数据

此处只做演示,官方推荐创建自定义租户,在业务租户下创建数据库和表,租户就是一个数据库实例,有自己的cpu-内存资源、用户和权限,租户间数据和硬件资源是隔离的。

登录 OCP Express web界面管理集群,可查看集群的健康状态,CPU、内存等资源使用情况,SQL执行次数,执行时间,报错等信息

地址是:http://192.168.113.161:8180/admin ,帐号和密码在上面的部署页面有

使用OBD web页面可视化方式部署集群看上去比较简单,但原理是把可视化配置的参数生成到一个配置文件里面,并通过命令行形式使用该配置文件启动集群

在中控机161服务器的家目录: ll -al,可以看到一个 .obd 目录

进入.obd/cluster/myoceanbase/ ,里面有个config.yaml文件,这就是obd web可视化页面配置后生成的配置文件,部署启动时就用到了该文件

cat config.yaml ,里面内容如下:

user:
  username: root
  password: 123456
  port: 22
oceanbase-ce:
  version: 4.2.1.2
  release: 102000042023120514.el7
  package_hash: b2ccb524f200a9ef0fad2cddf59d309ddaa2e3e4
  192.168.113.161:
    zone: zone1
  192.168.113.162:
    zone: zone2
  192.168.113.163:
    zone: zone3
  servers:
  - 192.168.113.161
  - 192.168.113.162
  - 192.168.113.163
  global:
    appname: myoceanbase
    root_password: /aVi*H8(0%FS_YwZ-|dmo&[hjlT7pe@E
    mysql_port: 2881
    rpc_port: 2882
    home_path: /root/myoceanbase/oceanbase
    cluster_id: 1702997757
    ocp_agent_monitor_password: CG6Ks3IBSn
    proxyro_password: UDECAf4jk1
    ocp_meta_password: BBieozeEvM
    enable_syslog_recycle: true
    enable_syslog_wf: false
    max_syslog_file_count: 4
    ocp_meta_tenant_log_disk_size: 6656M
    ocp_meta_tenant_memory_size: 1536M
    memory_limit: 6G
    datafile_size: 2G
    system_memory: 1G
    log_disk_size: 13G
    cpu_count: 16
    production_mode: false
    __min_full_resource_pool_memory: 1073741824
    datafile_maxsize: 8G
    datafile_next: 2G
obproxy-ce:
  version: 4.2.1.0
  package_hash: 0aed4b782120e4248b749f67be3d2cc82cdcb70d
  release: 11.el7
  servers:
  - 192.168.113.161
  global:
    prometheus_listen_port: 2884
    listen_port: 2883
    home_path: /root/myoceanbase/obproxy
    obproxy_sys_password: Zl7nTJ7rYf
    skip_proxy_sys_private_check: true
    enable_strict_kernel_release: false
    enable_cluster_checkout: false
    proxy_mem_limited: 500M
    rs_list: 192.168.113.161:2881;192.168.113.162:2881;192.168.113.163:2881
    observer_sys_password: UDECAf4jk1
    cluster_name: myoceanbase
    observer_root_password: /aVi*H8(0%FS_YwZ-|dmo&[hjlT7pe@E
  depends:
  - oceanbase-ce
obagent:
  version: 4.2.1
  package_hash: c08058fef64b2dc6b5e2f99748fbd76fe872e356
  release: 100000122023103020.el7
  servers:
  - 192.168.113.161
  - 192.168.113.162
  - 192.168.113.163
  global:
    monagent_http_port: 8088
    mgragent_http_port: 8089
    home_path: /root/myoceanbase/obagent
    http_basic_auth_password: rKwS3yRXiO
    ob_monitor_status: active
  depends:
  - oceanbase-ce
ocp-express:
  version: 4.2.1
  package_hash: c69fe1fe0ec0d1a4e14f75468ccda4d0a7ca8d28
  release: 100000222023111619.el7
  servers:
  - 192.168.113.161
  global:
    port: 8180
    home_path: /root/myoceanbase/ocpexpress
    admin_passwd: RQ8k1t(#
    memory_size: 752M
  depends:
  - obagent
  - oceanbase-ce
  - obproxy-ce

tips:这里有个问题,部署时的配置参数,可以通过obclient连接数据库后,使用数据库设置参数命令修改参数后,这个配置文件的参数不会被同步修改,如果重启集群,则在数据库中修改的参数失效了,官方说以后支持同步修改配置。

OBD部署后,可以使用命令行查看集群:obd cluster list

此处的status状态为 stopped,说明集群是停止的,可以使用:obd cluster start myoceanbase 启动集群

查看集群详细信息:obd cluster display myoceanbase

关闭虚拟机时,可以关闭集群:obd cluster stop myoceanbase

如果要修改上面的配置:obd cluster edit-config myoceanbase

刷新配置使其生效:obd cluster reload myoceanbase

查看obd cluster帮助文档:obd cluster --help

如果某台机器宕机了货observer进程挂了,可以登录到服务器上,使用命令行,单独启动这个observer,但需要注意,如果该observer下线时间超过默认的3600s (1小时)则会被集群长久下线,如果需要维护服务器则可以先手动修改该参数值的大小,再维护。

cd /home/root/myoceanbase
1.查看observer进程启动的参数:ps -ef|grep observer
2.无参数启动:/home/root/myoceanbase/bin/observer
3.带参数启动:/home/root/myoceanbase/bin/observer -o "max_syslog_file_count=15,datafile_size=100G...........等等"  ,此处的参数是第一步中查看到的
8.卸载集群

在清理集群环境之前,建议先进行数据备份。

  • 8.1.停止和卸载服务,停止旧 observer 进程,并确保它们不再运行。然后卸载数据库软件

    1.查看 observer 进程是否存在:ps -ef|grep observer
    
    2.停止 observer 进程:kill -9 `pidof observer`
    
    3.如果是使用obd部署的,建议使用: obd cluster stop myoceanbase 来停止集群
    
    4.查看已安装的 OceanBase 数据库 RPM 包名称:rpm -qa|grep oceanbase
    
    5.卸载安装的 OceanBase 数据库 RPM 包:sudo rpm -e $rpm_name
    
    6.查看RPM包是否卸载完:rpm -ql $rpm_name
    
  • 8.2.数据库文件清理,删除旧的数据库文件,包括数据文件、日志文件和其他临时文件

    1.删除 observer 进程运行日志盘文件,admin为部署用户,不同部署用户,此处需替换
    sudo rm -rf /home/admin/oceanbase/*
    
    2.删除 observer 进程日志盘文件
    sudo rm -rf /data/log1/*
    
    3.删除 observer 进程数据盘文件
    sudo rm -rf /data/1/*
    

以上卸载步骤,每台服务器都操作一遍

希望以上内容能对你有所帮助,谢谢

相关推荐
OceanBase数据库官方博客4 天前
半连接转内连接 | OceanBase SQL 查询改写
sql·oceanbase·分布式数据库
OceanBase数据库官方博客4 天前
解析在OceanBase创建分区的常见问题|OceanBase 用户问题精粹
oceanbase·分布式数据库·分区
OceanBase数据库官方博客4 天前
半连接转内连接规则的原理与代码解析 |OceanBase查询优化
sql·oceanbase·分布式数据库
IT培训中心-竺老师7 天前
OceanBase 数据库分布式与集中式 能力
数据库·分布式·oceanbase
靖顺7 天前
【OceanBase 诊断调优】—— OceanBase 数据库网络速率配置方案
网络·数据库·oceanbase
尚雷558015 天前
OceanBase 社区版 4.0 离线方式升级bp1至bp2 指南(含避坑总结)
oceanbase
五月高高15 天前
Linux部署oceanbase
linux·oceanbase
靖顺18 天前
【OceanBase 诊断调优】—— 统计信息自动收集超时导致的估行不准 SQL 选择错索引
数据库·sql·oceanbase
it界的哈士奇19 天前
Oceanbase离线集群部署
oceanbase