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

深入 OceanBase 社区版体验 CentOS7 使用 OBD 自动部暑三节点集群

原创 shunwah 2022-06-17
1065

上一篇测试文章介绍如何用docker部署OceanBase社区版,本次测试:使用OBD自动部署一个三副本集群,包括OBproxy,创建业务租户、业务数据库、测试表

作者:马顺华

从事运维管理工作多年,目前就职于某科技有限公司,熟悉运维自动化、OceanBase部署运维、MySQL 运维以及各种云平台技术和产品。并已获得OceanBase认证OBCA、OBCP证书。

前言

OceanBase 是一个分布式集群产品,在生产环境至少是三台机器。学习环境可以部署单机版本。OceanBase 的部署跟传统数据库的部署有很多共同的地方,对操作系统硬件、软件设置、文件系统等会有一些最佳实践建议。那些是 OceanBase 发挥高性能稳定运行的基础。社区版也提供了工具能实现一定程度的自动化。OceanBase部署的方法比传统数据库简单许多,新手觉得难的主要原因在于还不太了解OB的步骤原理。当机器资源和环境都初始化正确后,大概5分钟左右即可重新部署一个OceanBase集群。很多人喜欢自动化脚本部署,觉得省事。但弊端也很明显。如果部署成功了,不知道为什么成功;部署报错了,也不知道为什么报错。除非你研究自动化部署脚本的程序 。所以在测试完ODB自动部署OceanBase集群后,可以再测试一下手动部署OceanBase集群。

image-20220611142406567

部署准备

OceanBase 是一个集群数据库,生产环境最小规模是 3 台服务器(节点)至少要三个节点。通常三个节点是要在三台机器上,整个集群里,业务数据会有三份,所以也叫三副本。学习测试的时候,可以部署 单副本单节点 OceanBase 集群。本文介绍使用 OBD 自动化部署 OceanBase 集群的方法,OBDeploy 简称 OBD 是 OceanBase 集群部署的工具,当机器资源和环境都初始化正确后,通过一些简单的命令就能非常快速的完成 OceanBase 部署。使用该方法需要通过中控机直接远程登录到 OceanBase 节点上部署启动 OBServer 进程,并在中控机上部署 OBProxy 进程。obproxy 进程部署位置没有要求。可以部署在应用服务器上,也可以部署在独立的机器上,或者部署在 OceanBase 机器上。obproxy 可以部署多个,生产环境建议至少部署两个。

OceanBase机器里关键资源是内存。就目前而言,OS剩余可用空间大于4C10G的环境将OB跑起来是没问题的。如果条件允许,尽可能用更大资源的机器。

部署资源要求

OceanBase 数据库运行的时候会对主机资源有一些要求,主要是 CPU、内存和磁盘空间。安装 OceanBase 的目的不一样,对资源的要求也不一样。

image-20220611105412789

**注意:**上面性能测试环境和生产环境的资源要求是建议。在社区版后续版本,会进一步降低对内存的要求。

OceanBase 对操作系统也有一些要求,目前支持下面这些系统:

  • Redhat / CentOS 7.x/8.x
  • SUSE / OpenSUSE 15.x
  • Anlios 7.x/8.x
  • Debian 9.x
  • Ubuntu 20.x

测试环镜资源信息

机器类型主机配置备注
OSCentos 7.4 
中控机 /OBDCPU:8C内存:16G
目标机器 /OBserverCPU:8C内存:32G
系统盘 /dev/vda 100GLVS分区、文件系统:EXT4
数据盘 /datadev/vdb 200GGPT分区、文件系统:xfs
事务日志盘 /redodev/vdc 100GGPT分区、文件系统:xfs

image-20211231154309608

资源规划

角色机器IP备注
OBD112.127.2.131中控机
OBserver112.127.2.120{2881,2882}, {3881,3882} zone1
 112.127.2.121{2881,2882}, {3881,3882} zone2
 112.127.2.122{2881,2882}, {3881,3882} zone3
OBproxy112.127.2.120{2883,2884} 反向代理
 112.127.2.121{2883,2884} 反向代理
 112.127.2.122{2883,2884} 反向代理
OBAgent112.127.2.120监控采集框架 默认端口 8088、8089
 112.127.2.121监控采集框架 默认端口 8088、8089
 112.127.2.122监控采集框架 默认端口 8088、8089
OBclient112.127.2.131OB命令行客户端

目录规划:

如果是安装 OceanBase 的 RPM 包,则需要提前创建好用户 admin ,软件包默认安装目录是 : /home/admin/oceanbase

目录结构如下:

目录路径(相对于工作目录)备注
etc、etc2、etc3配置文件所在目录。
log运行日志目录。
run运行输出目录,输出 pid 文件。
store数据(包括日志)所在总目录。
store/clogcommit log 所在目录。
store/ilogilog 所在目录。
store/slogslog 所在目录。
store/sstable数据文件 block file 所在目录。

自动化部署过程简单来说分为几步:

  • 初始化 OceanBase 各个节点环境。包括参数配置、文件系统目录设置等。
  • (可选)初始化中控机到OceanBase 各个节点的 SSH 免密登录。
  • 准备 OBD 自动化部署配置文件。
  • 使用 OBD 部署集群节点目录。
  • 使用 OBD 启动并初始化集群。

一、学习如何使用 OBD 自动化部署多节点集群

1、OceanBase 社区版教程入门指引

链接:https://open.oceanbase.com/blog/10900159?currentPage=undefined

image-20220611141346053

2、官方文档学习

链接:https://open.oceanbase.com/docs/tutorials-cn/V1.0.0/10000000000012299

image-20220607152320870

3、官方视频学习

为您介绍使用 OBD 自动部署 OceanBase 三副本集群。

链接: https://open.oceanbase.com/docs/videoCenter/4700025

image-20220611104602095

4、官方书籍学习

数据库博大精深,需要系统学习数据库理论知识,如果你想从零开始学习数据库不用先学习Mysql和Oracle,这本书直接带你从零开始学习数据库,你会发现再学习Mysql和Oracle等数据库时,已经自通Mysql和Oracle数据库啦。

推荐学习 OceanBase 开源社区的《OceanBase原生分布式数据库实战教程实体书OceanBase原生分布式数据库实战教程**电子书在 OceanBase 社区版博客阿里云**都有发布。这本与开源社区用户共创的书籍共八章,从 OceanBase 数据库概述开始,到安装部署,到使用,到迁移、再到运维、测试、性能诊断,最后是 OceanBase 生态工具的使用,可以带你全面掌握 OceanBase 实战使用技能!

1)电子文档

链接: https://open.oceanbase.com/docs/tutorials-cn/V1.0.0/10000000000012249

2)电子书

链接:https://developer.aliyun.com/ebook/7541

img

3)实体书

img

二、磁盘文件系统划分

(所有节点都要设置)

1、查看原磁盘df -Th

image-20220213152223376

2、查看待增加磁盘fdisk-l

image-20220213152303408

3、磁盘划分(GPT)分区

使用 parted 技术对 /dev/vdb 进行划分。GPT分区大小请根据实际磁盘大小调整参数。需要登录到每个节点上手动初始化。

[root@CAIP120 /]# yum -y install gdisk cloud-utils-growpart parted e2fsprogs

[root@CAIP120 ~]# parted /dev/sdb
# 将设备转换成GPT分区格式。
(parted) mklabel gpt
#划分一个主分区,并设置分区的开始位置和结束位置
#使用全部空间创建一个主分区(请根据实际创建)。通常于前面留出1M的空余空间。
(parted) mkpart primary 1 100%  
# 检查分区是否对齐(如有多个分区,均需检查),此处显示“1 aligned”表示已对齐。
(parted) align-check optimal 1  
#查看分区表
(parted) print
#退出
(parted) quit

image-20220213152551680

4、查看到分区

此时使用fdisk -l应能查看到分区/dev/sdb1(根据实际显示分区名)。

image-20220213152712367

[root@CAIP120 ~]# fdisk -l
#格式化文件系统(请使用实际的分区名和文件系统类型)
mkfs.xfs /dev/sdb1     --xfs分区格式化
mkfs.ext4 /dev/sdb1    --ext4分区格式化

image-20220213153101198

[root@CAIP120 /]# mkdir data
#使用blkid查看UUID
[root@CAIP120 ~]# blkid
#备份/etc/fstab,并新增加UUID
vim /etc/fstab
#使用`mount -a`验证fstab配置是否正确。
[root@CAIP120 ~]# mount -a

5、挂载磁盘

重复上面操作、同上、依次挂载好对应磁盘和目录

(/data、/redo、)

mkdir -p /data  (/dev/sdb)

mkdir -p /redo   (/dev/sdc)

image-20220213154413084

6、检查磁盘

检查划分好的磁盘df -h #检查

image-20211231153558521

三、配置安装用户

OceanBase 本质上是一个软件,可以运行在任意用户下。OceanBase 软件包默认解压目录是在 /home/admin/ 下,生产环境默认也是安装在用户 admin 下。社区版的软件 RPM 包也是这个特点,支持部署在任意用户的任意目录下。

根据官方介绍,不建议在 root 用户下直接部署。建议安装部署在普通用户下,此次测试均以用户 admin 为例。

注意 为 admin 用户赋与 sudo 权限不是必须的,只是为了某些时候方便操作。您可以结合企业安全规范决定是否执行。

1、创建admin用户并设置密码:

(所有节点都要设置)

[root@CAIP120 /]# useradd -U admin -d /home/admin -s /bin/bash && echo "######" |passwd --stdin admin

image-20220213154453771

2、更改目录属主属组权限:

(所有节点都要设置)

[root@CAIP120 /]# chown -R admin.admin /data && chown -R admin.admin /redo && chown -R admin.admin /home/admin

image-20220213154543228

注意:先创建admin用户,后mount挂载/home/admin/ocaeabase 否则创建用户提示家目录存在

3、用户 admin 授予 sudo 权限配置:

(所有节点都要设置)

[root@CAIP120 /]# vim /etc/sudoers
## Allow root to run any commands anywhere
admin    ALL=(ALL)       ALL

image-20220213154720447

注意: sudoers拒绝所有用户读写,root用户也无权限,需增加权限后更改 #chmod u+w /etc/sudoers

四、初始化服务器环境

OceanBase 数据库是单进程软件,需要访问网络,需要打开多个文件以及开启很多 TCP 连接,所以需要修改内核参数和用户会话设置。

注意 您如果在独立服务器上部署 OBProxy,也需按本文要求初始化服务器环境。

1、配置 SSH 免密登录

手动部署 OceanBase 集群,相应节点上安装软件包,并启动 observer 或 obproxy 进程,不需要配置 SSH 免密登录。如果您是使用自动化技术部署 OceanBase 集群,则需要一台中控机,中控机的用户 admin 到 OBSERVER 节点的用户 admin 的免密登录:

此次测试为 OBD 自动部署 OceanBase 集群,需要配置 SSH 免密登录

  • 在中控机生成 RSA 或 DSA 公钥和私钥

    [admin@CAIP131 ~]$ ssh-keygen -t rsa #在中控机执行
    [admin@CAIP131 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    [admin@CAIP131 ~]$ mkdir ~/.ssh #在Observer3个节点建立隐藏ssh目录

image-20211231165737696

中控机复制到目标机器

image-20220613100455199[admin@CAIP131 ~]$ scp ~/.ssh/authorized_keys admin@112.127.2.120-122:~/.ssh/authorized_keys #中控机复制到目标机器

目标机器授权(所有目标节点)

[admin@CAIP120 ~]$ chmod 700 .ssh  
[admin@CAIP120 ~]$ chmod 600 .ssh/authorized_keys 

image-20220213161916554

注意:root用户配置免密可直接登录,普通用户需更改目录和文件权限,否则无法登陆

[admin@CAIP131 ~]$ for i in 120 121 122;do ssh 112.20.2.$i date;done --中控机执行免密连接测试

image-20220213162041256

2、配置时间同步服务

OceanBase 数据库是分布式数据库产品,是一个集群软件,对各个节点之间的时间同步性有要求。技术上要求所有节点之间的时间误差需控制在 50ms 以内。实际生产环境中为了稳定性和性能考虑,建议时间误差控制在 10ms 以内。

(中控节点作为时间服务器,以root身份配置):

1)判断是否使用 ntpd同步时间
[root@CAIP131 ~]# systemctl status ntpd
Unit ntpd.service could not be found.    #未安装

image-20220213184441861

出现上述提示,表示没有使用 ntpd,需要安装 chrony 服务

2)安装 chrony配置时间同步服务

CentOS 或 RedHat 7.x 版本推荐使用 chrony 服务做时间源

# yum remove ntp -y
# yum -y install chrony
# vim /etc/chrony.conf
server ntp1.aliyun.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
allow all
stratumweight 0
local stratum 10

image-20220213184547823

3)配置时间同步服务器

chrony 服务守护进程名为 chronydchronyc 是用来监控 chronyd 性能和配置参数的命令行工具。chrony 的主配置文件为 /etc/chrony.conf。配置方法如下:

[root@CAIP131 ~]# vim /etc/chrony.conf 

image-20220213184705084

4)配置时间同步服务器开机自启
[root@CAIP131 ~]# systemctl start chronyd && systemctl enable chronyd && systemctl status chronyd   #设置开机自启

image-20220213184810901

5)客户端配置(所有目标节点):
[root@CAIP120 /]# echo "* * * * * /sbin/ntpdate -u 112.127.2.131 2>&1 1>>/tmp/ntpdate.log" >> /var/spool/cron/root

[root@CAIP121 /]# echo "* * * * * /sbin/ntpdate -u 112.127.2.131 2>&1 1>>/tmp/ntpdate.log" >> /var/spool/cron/root

[root@CAIP122 /]# echo "* * * * * /sbin/ntpdate -u 112.127.2.131 2>&1 1>>/tmp/ntpdate.log" >> /var/spool/cron/root
6)中控机检查时间同步(中控机执行)
# for i in 120 121 122 ;do clockdiff 172.20.2.$i;done
检查和目标节点时间误差常用命令是: clockdiff

image-20220613102744780

7)客户端检查时间同步

(所有目标节点)目标机到中控机之间时间同步检查

[root@CAIP120 /]# clockdiff 112.127.2.131 

如果有机子clockdiff报错,使用tsandaddr

[admin@CAIP120 oceanbase]$ ping -T tsandaddr 112.127.2.131 -c 2

image-20220613100345449

3、修改会话变量设置

(所有目标节点)

您可以通过配置 limits.conf 修改会话限制。OceanBase 数据库的进程涉及的限制包括:线程最大栈空间大小(Stack)、最大文件句柄数(Open Files)和 core 文件大小(Core File Size)。

您可以使用以下两种方法修改资源限制:

  • 通过启动时在会话级别修改。如:ulimit -c unlimited,通过此方法修改只影响当前会话。如果会话断开之后重连,则又会是默认配置。

  • 通过配置文件 /etc/security/limits.conf 在全局级别修改。

    注意 修改后,已经登录的会话需要退出后重新登录才生效。

全局修改配置limits.conf(所有目标节点)最大文件句柄数设置为 655350,Core 文件大小设置为 unlimited 。

[root@CAIP120 /]# vim /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

image-20220612174624189

出当前会话,重新登录。执行 # ulimit -a,查看配置是否生效:

[root@CAIP120 /]# ulimit -a

image-20220612174750661

4、内核参数修改

修改(所有目标节点)配置文件 /etc/sysctl.conf

[root@CAIP120 /]# vim /etc/sysctl.conf

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

image-20220612175050656

加载配置,使配置生效

[root@CAIP120 /]# sysctl -p

image-20220612174924118

5、关闭防火墙和 SELinux

(所有目标节点)

不同操作系统的防火墙设置可能会有不同,本次是以 CentOS 7 系统为例进行测试。

查看防火墙状态

[root@CAIP120 /]# systemctl status firewalld

image-20220213191029699

如果是 inactive 那就不用管。如果是 active,那就永久关闭

[root@CAIP120 /]# systemctl stop firewalld
[root@CAIP120 /]# systemctl disable firewalld 
[root@CAIP120 /]# systemctl status firewalld

关闭 SELinux

修改 SELinux 配置文件中的 SELINUX 选项。

[root@CAIP120 /]# vim /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled

image-20220213191059206

配置文件修改后只会重启主机后生效,还需要使用下面命令立即生效。

[root@CAIP120 /]# setenforce 0

6、安装相关依赖工具软件

(所有目标节点)

未安装工具后面相关命令无法执行

[root@CAIP120 /]# yum install epel-release -y
[root@CAIP120 /]# yum install -y net-tools lrzsz tree htop dstat sysvinit-tools

查看 OBSERVER 进程特点
[root@CAIP120 /]# yum -y install sysvinit-tools
[root@CAIP120 /]# ps -ef|grep observer

查看进程监听端口
[root@CAIP120 /]# yum install -y net-tools
[root@CAIP120 /]# netstat -ntlp

查看 OceanBase 工作目录结构
[root@CAIP120 /]# yum -y install tree
[root@CAIP120 /]# tree /root/ob
[root@CAIP120 /]# tree /root/obce/

image-20220213191924818

五、安装部署OBD

OceanBase 本质上是一个单进程的软件,可执行文件名叫 observer 。可以通过 RPM 包安装,也可以通过源码直接编译安装。本次测试都是通过OBD自动安装。切换到 admin 用户下,执行

1、在线安装依赖软件

(中控节点)

[admin@CAIP131 ~]$ sudo yum install -y yum-utils

image-20220213200849774

2、在线安装ob-deploy

[admin@CAIP131 ~]$ sudo yum install -y ob-deploy

image-20220213201637563

[admin@CAIP131 ~]$ sudo yum install -y libobclient

image-20220213201847161

3、在线安装obclient客户端工具

OceanBase 数据库提供了专用的命令行客户端工具 obclient。使用方法和使用 MySQL 客户端一样。

[admin@CAIP131 ~]$ sudo yum install -y obclient

image-20220213202036729

六、使用 OBD 自动化部署三节点集群

本次测试介绍 OceanBase 集群三节点部署方法,需要通过中控机直接远程登录到 OceanBase 节点上部署启动 observer 和 obproxy 进程。

1、编辑 OBD yaml配置文件

OBD 针对不同的部署场景提供不同的配置文件。这些配置文件示例均放在 OceanBase 开源项目地址中,您可访问链接查看:https://github.com/oceanbase/obdeploy/tree/master/example 。

如果您是部署单节点版本,只需下载其中两个配置文件:

  • 部署三节点 observer 进程:

    https://github.com/oceanbase/obdeploy/blob/master/example/mini-distributed-example.yaml

  • 部署三节点 observer 和 obproxy 进程:

    https://github.com/oceanbase/obdeploy/blob/master/example/mini-distributed-with-obproxy-example.yaml

    这里是部署三节点 observer 进程,所以下载第二个配置文件。 **注意:**后续版本的配置文件格式可能会有些变化,请参考 OBD 工具具体使用说明。用户信息已脱敏。

    oceanbase-ce:
     servers:
     - name: z1
       ip: 112.127.2.120
     - name: z2
       ip: 172.20.2.121
     - name: z3
       ip: 172.20.2.122
     global:
        devname: ens192
        cluster_id: 1
        memory_limit: 24G 
        system_memory: 4G 
        stack_size: 512K
        cpu_count: 16
        cache_wash_threshold: 1G
        __min_full_resource_pool_memory: 268435456
        workers_per_cpu_quota: 10
        schema_history_expire_time: 1d
        net_thread_count: 4
        major_freeze_duty_time: Disable
        minor_freeze_times: 10
        enable_separate_sys_clog: 0
        enable_merge_by_turn: FALSE
        datafile_disk_percentage: 90 
        #datafile_size: 50G
        syslog_level: WARN 
        enable_syslog_wf: false 
        enable_syslog_recycle: true 
        max_syslog_file_count: 10 
        appname: obce-demo
        root_password: Pwd2012# 
     z1:
       mysql_port: 2881
       rpc_port: 2882
       home_path: /home/admin/oceanbase/ob
       data_dir: /data/ob
       clog_dir: /redo/clog
       ilog_dir: /redo/ilog
       slog_dir: /redo/slog
       zone: zone1
       enable_syslog_wf: true
       cpu_count: 16   
     z2:
       mysql_port: 2881
       rpc_port: 2882
       home_path: /home/admin/oceanbase/ob
       data_dir: /data/ob
       clog_dir: /redo/clog
       ilog_dir: /redo/ilog
       slog_dir: /redo/slog
       zone: zone2
       enable_syslog_wf: true
       cpu_count: 16
     z3:
       mysql_port: 2881
       rpc_port: 2882
       home_path: /home/admin/oceanbase/ob
       data_dir: /data/ob
       clog_dir: /redo/clog
       ilog_dir: /redo/ilog
       slog_dir: /redo/slog
       zone: zone3
       enable_syslog_wf: true
       cpu_count: 16
    obproxy:
     servers:
     - 112.127.2.120
     - 112.127.2.121
     - 112.127.2.122
     depends:
     - oceanbase-ce
     global:
       listen_port: 2883
       prometheus_listen_port: 2884
       home_path: /home/admin/obproxy
       rs_list: 112.127.2.120:2881;112.127.2.121:2881;112.127.2.122:2881
       enable_cluster_checkout: false
       cluster_name: ob_cluster
       enable_compression_protocol: false
       automatic_match_work_thread: True
       work_thread_num: 16
       net_accept_threads: 2
       proxy_mem_limited: 16G
       obproxy_sys_password: Pwd123#
    obagent:      
     servers:
     - name: z1
       ip: 112.127.2.120
     - name: z2
       ip: 112.127.2.121
     - name: z3
       ip: 112.127.2.122
     depends:
     - oceanbase-ce
     global:
       home_path: /home/admin/oceanbase/obagent
       server_port: 8088
       pprof_port: 8089
       log_level: INFO
       log_path: log/monagent.log
       crypto_method: plain
       log_size: 30
       log_expire_day: 7
       log_file_count: 10
       http_basic_auth_user: admin
       http_basic_auth_password: root
       pprof_basic_auth_user: admin
       pprof_basic_auth_password: root
       ob_monitor_status: active
       host_monitor_status: active
       disable_http_basic_auth: false
       disable_pprof_basic_auth: false
    

    image-20220613103045369

当上面部署成功后,OBD 会把配置文件 config.yaml 复制到自己的工作目录里(~/.obd/cluster/obce-3zones/config.yaml ),后面如果想修改外面这个 config.yaml 文件,是不生效的。

2、 部署 OceanBase 集群:

配置文件准备好后,就可以在(中控机)部署这个配置文件对应的集群了,部署内容主要包含:

  • 复制软件到所有目标节点,并安装软件。
  • 在所有目标节点创建相关目录。

这个集群名只是这个配置文件在 OBD 里的唯一标识,可以跟配置文件中的集群名一样,也可以跟文件名一样,这个不强要求。

[admin@CAIP131 ~]$ obd cluster deploy obce-3zones -c obce-3zones.yaml

注意:

obd cluster autodeploy使用该命令可传入一个简易的配置文件,OBD 会根据目标机器资源自动生成最大规格的完整配置并部署启动集群。

obd cluster deploy使用该命令可以根据配置部署集群。

查看部署后的运行状态

[admin@CAIP131 ~]$ obd cluster list
+----------------------------------------------------------------------+
|                             Cluster List                             |
+-------------+--------------------------------------+-----------------+
| Name        | Configuration Path                   | Status (Cached) |
+-------------+--------------------------------------+-----------------+
| obce-3zones | /home/admin/.obd/cluster/obce-3zones | deployed        |
+-------------+--------------------------------------+-----------------+

image-20220612192633225

3、OBD 启动和初始化集群

上面 deploy 操作只是安装了软件和准备初始化目录,您还需使用命令 obd cluster start 启动集群节点并初始化集群。

[admin@CAIP131 ~]$ obd cluster start obce-3zones

image-20220613103135816

如果要修改配置,可以通过edit-config修改配置,(如不需要修改请忽略此步骤)

[admin@CAIP131 ~]$ obd cluster edit-config obce-3zones
Search param plugin and load ok
Search param plugin and load ok
Parameter check ok
Save deploy "obce-3zones" configuration
Use `obd cluster restart obce-3zones --wp` to make changes take effect.

image-20220612201852746

参数 obce-3zones 为部署集群名,可以根据实际配置修改文件的别名。

修改完重启配置(如不需要修改请忽略此步骤)

[admin@CAIP131 ~]$ obd cluster restart obce-3zones
Get local repositories and plugins ok
Load cluster param plugin ok
Open ssh connection ok
Cluster status check ok
Connect to observer ok
Server check ok
Observer rotation restart ok
Wait for observer init ok

image-20220612201948996

4、连接 OceanBase 集群:

传统的 mysql 客户端可以连接 OceanBase 社区版,前提是 mysql 的版本是 5.5/5.6/5.7 。OceanBase 也提供自己的客户端工具 obclient 需要安装使用。

跟传统MySQL 不一样的地方是 OBSERVER 连接端口是 2881 , 连接用户名是 :root@sys ,密码是前面 OBD 配置文件里指定的。

[admin@CAIP131 ~]$ obclient -h112.127.2.120 -uroot@sys#obce-3zones -p -P2883 -A -c oceanbase

image-20220613103316196

使用sys系统租户查看所有节点是否正常:

MySQL [oceanbase]> select svr_ip,status,with_rootserver,usec_to_time(start_service_time),usec_to_time(stop_time) from __all_server;

image-20220613103420293

1)、status 表示节点状态。inactive, 表示节点已经掉线或者进程退出了。节点掉线常见原因是节点时钟偏差过大、网络延时过大、clog空间盘满(use大于等于95%)。如果进程刚刚启动,则是进程在跟 rootserver 通信沟通。正常情况下启动几秒就能变 active,异常宕机后的再启动可能需要几十秒变 acitve,最长不超过2分钟。

2)、start_service_time 表示节点开始提供服务时间。如果是默认值 1970-1-1 ,则表示进程还在应用clog、刷新schema等。通常如果要应用的clog不多的时候,这个几秒钟就好了。如果是此前内存中大量数据还没有合并落盘就宕机了,这个恢复时间就长一些,可能会要十几分钟。

3)、stop_service_time 表示停止服务时间。如果是默认值 1970-1-1 ,表示没有停止服务。如果时间大于默认值(在当前时间附近),表示手动发起过 stop server 或 stop zone 命令。则需要手动发起 start server 或者 start zone 命令恢复服务。

4)、只有这三个列都正常了,节点才是正常的,集群才是正常的

5、登录obproxy账户

OBProxy 作为 OceanBase 数据库专用的反向代理软件,其核心功能是路由,将客户端发起的数据访问请求转发到正确的 OBServer 上,并将 OBServer 的响应结果转发给客户端。

[admin@CAIP131 ~]$ obclient -h112.127.2.120 -uroot@proxysys -P2883 -p#####

image-20220613103510278

MySQL [(none)]> show processlist;
+------+----------+------+--------------------+------+-------------+-------------------+-------------------+-------+-------+
| Id   | Tenant   | User | Host               | db   | trans_count | svr_session_count | state             | tid   | pid   |
+------+----------+------+--------------------+------+-------------+-------------------+-------------------+-------+-------+
|    7 | proxysys | root | 112.127.2.131:59024 | NULL |           0 |                 0 | MCS_ACTIVE_READER | 58963 | 58963 |
+------+----------+------+--------------------+------+-------------+-------------------+-------------------+-------+-------+
1 row in set (0.001 sec)

image-20220214150329732

七、创建资源池和租户

1、查询系统资源总计资源

[admin@CAIP131 ~]$ obclient -h112.127.2.120 -uroot@sys#obce-3zones -p#### -P2883 -A -c oceanbase

MySQL [oceanbase]> SELECT svr_ip,svr_port, cpu_total, mem_total/1024/1024/1024, disk_total/1024/1024/1024, zone FROM __all_virtual_server_stat;

image-20220613103615412

查询租户已分配资源:

MySQL [oceanbase]> SELECT sum(c.max_cpu), sum(c.max_memory)/1024/1024/1024 FROM __all_resource_pool as a, __all_unit_config AS c WHERE a.unit_config_id=c.unit_config_id;

image-20220214172145283

Note:资源池cpu共14c/13g/79G 租户已用 5c/4G 新建租户最大可用为 9c/9g(超分会报错)

2、创建资源单元:

在创建租户前,需要先确定租户的资源单元配置和资源使用范围。租户使用的资源被限制在资源单元的范围内,如果当前存在的资源单元配置无法满足新租户的需要,可以新建资源单元配置。

MySQL [oceanbase]> CREATE RESOURCE UNIT unitcaip max_cpu = 4, max_memory = '4G', min_memory = '4G', max_iops = 100000, min_iops = 100000, max_session_num = 30000, max_disk_size = '20G';

image-20220613091648389

查看新创建的资源单元

MySQL [oceanbase]> SELECT unit_config_id,name,max_cpu,min_cpu,max_memory,min_memory,max_disk_size FROM __all_unit_config;
+----------------+-----------------+---------+---------+------------+------------+---------------+
| unit_config_id | name            | max_cpu | min_cpu | max_memory | min_memory | max_disk_size |
+----------------+-----------------+---------+---------+------------+------------+---------------+
|              1 | sys_unit_config |       5 |     2.5 | 5153960755 | 4294967296 |   53687091200 |
|           1001 | unitcaip        |       4 |       4 | 4294967296 | 4294967296 |   21474836480 |
+----------------+-----------------+---------+---------+------------+------------+---------------+
2 rows in set (0.010 sec)

image-20220613091733200

3、创建资源池:

在使用 SQL 语句创建资源池前,请确认已创建了待使用的资源单元配置

MySQL [oceanbase]> CREATE RESOURCE POOL poolcaip UNIT = 'unitcaip', UNIT_NUM = 1,ZONE_LIST = ('zone1', 'zone2', 'zone3');
Query OK, 0 rows affected (0.025 sec)

image-20220613091845759

  • 参数 UNIT_NUM 表示在集群的一个 Zone 里面包含的资源单元个数。该值小于等于一个 Zone 中的 OBServer 的个数。
  • 参数 ZONE_LIST 表示资源池的 Zone 列表,显示该资源池的资源在哪些 Zone 中被使用。

4、创建租户tenantobd:

新建租户后默认密码为空,需修改租户密码,以保证数据安全。

MySQL [oceanbase]> create tenant tenantobd resource_pool_list=('poolcaip'), charset=utf8mb4, replica_num=3, zone_list('zone1', 'zone2', 'zone3'), primary_zone=RANDOM, locality='F@zone1,F@zone2,F@zone3' set variables ob_compatibility_mode='mysql', ob_tcp_invited_nodes='%';
Query OK, 0 rows affected (0.788 sec)

image-20220613093903825

查看创建成功的租户:

创建租户后,您可以通过查询 tenant 相关视图来确认租户是否创建成功。

MySQL [oceanbase]> select tenant_id,tenant_name,primary_zone from __all_tenant;
+-----------+-------------+-------------------+
| tenant_id | tenant_name | primary_zone      |
+-----------+-------------+-------------------+
|         1 | sys         | zone1;zone2,zone3 |
|      1002 | tenantobd   | RANDOM            |
+-----------+-------------+-------------------+
2 rows in set (0.002 sec)

image-20220613093938285

5、登录新创建的租户:

您可尝试通过 OBProxy 连接 OceanBase 集群,obproxy 默认会监听2个端口:2883 和 2884。登录用户名:root@proxysys,端口:2883,初始密码:空。

[admin@CAIP131 ~]$ obclient -h112.127.2.120 -uroot@tenantobd#obce-3zones -P2883 -c -A oceanbase

image-20220613094402876

设置租户tenantobd的root密码

MySQL [oceanbase]> alter user root identified by 'Pwd123#';
Query OK, 0 rows affected (0.026 sec)

image-20220613094138811

八、创建测试用户

1、创建测试用户

1)登录新创建的tenantobd租户
[admin@CAIP131 ~]$ obclient -h112.127.2.120 -uroot@tenantobd#obce-3zones -P2883 -p -c -A oceanbase
Enter password: 

image-20220613094329406

2)创建用户userobd

创建用户并设置密码

MySQL [oceanbase]> CREATE USER 'userobd' IDENTIFIED BY '#####';
Query OK, 0 rows affected (0.033 sec)

image-20220613094646890

3)查看创建成功的用户userobd
MySQL [oceanbase]> SELECT user FROM mysql.user; 
+------------+
| user       |
+------------+
| root       |
| ORAAUDITOR |
| userobd    |
+------------+
3 rows in set (0.063 sec)

image-20220613094715003

2、授权用户GRANT

1)授权userobd用户

该语句用于系统管理员授予用户某些权限。用户授权后,该用户只有重新连接 OceanBase 数据库,权限才能生效。

MySQL [oceanbase]> grant all on *.* to 'userobd' WITH GRANT OPTION;
Query OK, 0 rows affected (0.051 sec)

image-20220613094807517

2)查看用户授权

通过 SHOW GRANTS 语句查看某个用户被授予的权限。

MySQL [oceanbase]> show grants for userobd;
+------------------------------------------------------------+
| Grants for userobd@%                                       |
+------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'userobd' WITH GRANT OPTION |
+------------------------------------------------------------+
1 row in set (0.026 sec)

image-20220613094841114

3)用于登录测试
[admin@CAIP131 ~]$ obclient -h112.127.2.120 -uuserobd@tenantobd#obce-3zones -p -P2883 -c -A oceanbase

image-20220613095029530

3、连接白名单设置

1)登录租户
[admin@CAIP131 ~]$ obclient -h112.127.2.120 -uroot@sys#obce-3zones -p -P2883 -A -c oceanbase
Enter password: 

image-20220613095229593

2)设置租户tenantobd白名单

您可以通过租户白名单功能来设置允许哪些客户端访问当前租户。(否则只能127登录)sys租户登录

MySQL [oceanbase]> ALTER TENANT tenantobd SET VARIABLES ob_tcp_invited_nodes='%'; 
Query OK, 0 rows affected (0.005 sec)

image-20220613095314699

白名单看来是设置成功了

九、创建测试业务数据库

设置好白名单后,再来创建业务数据库

1、用户登录

使用租户下的用户登录OB集群测试建库建表:

[admin@CAIP131 ~]$ obclient -h112.127.2.120 -uuserobd@tenantobd#obce-3zones -p -P2883 -c -A oceanbase
Enter password: 

image-20220613100102265

2、创建测试表

MySQL [oceanbase]> create database testobd;
Query OK, 1 row affected (0.020 sec)

MySQL [oceanbase]> show databases;
+--------------------+
| Database           |
+--------------------+
| oceanbase          |
| information_schema |
| mysql              |
| test               |
| testobd            |
+--------------------+
5 rows in set (0.021 sec)

MySQL [oceanbase]> use testobd;
Database changed
MySQL [testobd]> CREATE TABLE testobd (id int,name varchar(20));
Query OK, 0 rows affected (0.095 sec)

MySQL [testobd]> insert into testobd(id,name) values(20211212,"obobd");
Query OK, 1 row affected (0.026 sec)

MySQL [testobd]> select * from testobd;
+----------+-------+
| id       | name  |
+----------+-------+
| 20211212 | obobd |
+----------+-------+
1 row in set (0.003 sec)

image-20220613095916831

十、寻求帮助

1、官方社区问答板块寻求帮助

OB开源团队老师和同学非常乐于跟用户交流OB技术。在检查的最后,会将所有存在的问题一并列出,并且给出解决建议。 可以参照建议解决问题,并再次运行环境检查。或者你可以在OceanBase 社区问答板块提问、分享、查找之前别人遇到过的问题?在寻求帮助的过程中, 也不断的锻炼自己, 让自己的知识越来越丰富。

问答链接:https://ask.oceanbase.com/

image-20220611135940709

2、官方钉钉群寻求帮助

OB开源团队老师和同学非常乐于跟用户交流OB技术。加入钉钉社群,提问、分享、查找之前别人遇到过的问题? 在寻求帮助的过程中, 也不断的锻炼自己, 让自己的知识越来越丰富。

钉钉群号 33254054

image-20220611140154294

结语:

使用OBD自动化安装部署OceanBase整体还是比较简单的,但还是要比docker安装复杂一些,细心一点多检查在执行。在检查的最后,会将所有存在的问题一并列出,并且在OB官网找出解决建议,参照建议解决问题,并再次运行环境检查。OB官方网站文档中心提供了比较详细的资料,obd配置文件的各参数是否设置正确。但是在实验环境中安装还是会遇到各种问题,大家如果有机会可以自己搭建起来,对于理解OB的架构有些帮助。

  1. 有一种无缝使用MySQL的感觉,如果有mysql数据库经验,使用 OceanBase 的还是比较容易的。
  2. OBD 对 OceanBase 的管理权限很高,所以 OBD 要部署在数据库服务器的中控机上,需要 DBA 有完全的控制权限。
  3. 如果部署遇到报错,找你看得懂的ERROR日志。或者根据错误号到官网问答区查看别人发布过的问题,参考是如何解决的,可以参照建议解决问题,或在钉钉群提问。总会找到有用的线索,并再次运行环境检查。
  4. 只要按照官方文档步骤部署是一定能成功的,如果报错可能是某一个细节没做好。
  5. 不管是官方文档部署还是网络方法部署,只是测试。在测试OB之前至少得先确保熟悉原理,在根据实际环境部署。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论