使用OBD自动化部署OceanBase社区版多节点集群

概述

        手把手教你如何使用OBD自动化部署OceanBase社区版多节点集群,此篇文章内容较长,步骤比较详细,请耐心看完!!!如果觉得好用请收藏关注哦~

        先了解记录几点信息:

  1. 社区版只兼容MySQL,从5.6开始兼容。 兼容MySQL协议、语法和使用习惯,MySQL客户端工具可以直接访问OceanBase数据库。
  2. 多租户:原生支持多租户架构,同一套数据库集群可以为多个独立业务提供服务,租户间数据隔离,降低部署和运维成本。
  3. OceanBase面向海量事务处理的分布式数据库系统,采用了Zone(可用区)的概念,每个Zone是一个机房内的一组服务器,包含多台OceanBase数据库服务器(OBServer)。
  4. 开源开放,开源的内容包括:
    • 数据库内核 OceanBase
    • 反向访问代理 obproxy
    • 数据库客户端命令行工具 obclient
    • 自动化部署工具 OBD
    • C 语言驱动 obconnector-c
    • CDC 组件代理 oblogproxy 和 canal 插件
    • OceanBase 监控客户端组件 obagent
    • spark 插件 obspark(待开源)
  5. OceanBase社区版支持的操作系统包括:
    • CentOS:推荐 7.2 以后版本。
    • Debian:推荐 9.8、10.9 版本。
    • openSUSE:推荐 15.2 版本。
    • OpenAnolis:推荐 8.2 版本。
    • SUSE:推荐 15.2 版本。
    • Ubuntu:推荐 16.04、18.04、20.04 等版本。

一、部署准备

本教程采用在线安装,请确保机器可以连接公网。

1.1 查看网络连接

网络畅通请跳过步骤1.1,从步骤1.2开始操作。

1.1.1、测试网络是否畅通:

 [root@qyfkpt07 ~]# ping www.baidu.com

1.1.2、网络连接异常解决办法如下,修改文件/etc/sysconfig/network-scripts/ifcfg-ens160,然后修改DNS

        【注意:文件ifcfg-ens160后面的160数字是随机产生的

[root@qyfkpt07 ~]# cd /etc/sysconfig/network-scripts/
[root@qyfkpt07 network-scripts]# ll

使用OBD自动化部署OceanBase社区版多节点集群_第1张图片

1.1.3、编辑文件:将onboot值改为yes 后输入:wq保存退出

[root@qyfkpt07 network-scripts]# vi ifcfg-ens160

使用OBD自动化部署OceanBase社区版多节点集群_第2张图片

1.1.4、重新启动网络

[root@qyfkpt07 network-scripts]# service network restart

1.1.5、配置/etc/resolv.conf 添加 nameserver 8.8.8.8后输入:wq保存退出

[root@qyfkpt07 network-scripts]# vi /etc/resolv.conf

然后再ping测试,如果通了的话,就证明链接成功。如果还是失败请自行解决~~

1.2 查看服务器信息

先记录好服务器信息后面会用到~~

# 查看系统信息
[root@qyfkpt07 ~]# cat /etc/redhat-release
# 查看内核(OceanBase 数据库要求操作系统为 3.10.0 及以上)
[root@qyfkpt07 ~]# uname –r
# 查看内存
[root@qyfkpt07 ~]# free –g
# 查看网卡名称
[root@qyfkpt07 ~]# ifconfig
# 查看cpu核数
[root@qyfkpt07 ~]# lscpu
# 如果内存不足请清理缓存(慎用!!!)
echo 3 > /proc/sys/vm/drop_caches

使用OBD自动化部署OceanBase社区版多节点集群_第3张图片

使用OBD自动化部署OceanBase社区版多节点集群_第4张图片


二、规划 OceanBase 集群部署

2.1 集群架构规划

        OceanBase 数据库以集群形态运行,生产环境中最小规模为3台服务器(节点)。即集群中业务数据有三份,所以也叫三副本。您在学习测试的时候,可以部署单副本单节点 OceanBase 集群。

        注意:单副本跟单节点并不完全对等。单副本单节点是最小集群规模,单副本也可以扩容为多个节点,整个集群里数据依然是一份,所以叫单副本。

        生产环境中,每台机器上启动一个  observer 进程,所以一台机器就对应一个节点;学习环境中,一台机器可以启动多个 observer 进程,模拟多个节点。每个节点的监听端口(默认是2881和2882)、数据总目录是独立的,互不冲突。每个节点进程启动的最小内存是 10G。只有一台服务器时,启动的进程数可以分为以下几种情况:

  • 机器可用内存不足10G,不能启动observer进程。
  • 机器可用内存在10G ~ 20G 之间,只可以启动一个observer进程。
  • 机器可用内存在20G ~ 30G 之间,可以启动2个observer进程。
  • 机器可用内存超过30G,可以启动3个observer进程。

        内存充足时,也可以调大每个observer进程能获取的内存。内存越大节点的资源能力就越大。如果有三台机器,则无需在一台机器上模拟多个节点。

        您在部署observer进程后还需要部署obproxy。Obproxy也是单进程软件,是访问OceanBase数据库的反向代理。虽然observer节点可以直接访问,但是生产环境中还是建议通过obproxy访问OceanBase集群。obproxy进程对于部署位置没有要求。您可以部署在应用服务器上,也可以部署在独立的机器上,或者部署在OceanBase 机器上。obproxy可以部署多个,生产环境中建议至少部署两个。

2.2 用户规划

        OceanBase数据库本质上是一个软件,可以运行在任意用户下。 OceanBase 数据库软件包默认解压目录在/home/admin/ 下,生产环境默认也是安装在用户admin下,社区版的软件RPM包也是如此。OceanBase支持部署在任意用户的任意目录下。为了安全起见,不建议在root用户下直接部署。

        在部署OceanBase之前需初始化环境,此时可能需要修改操作系统的配置,或者设置目录的权限等,这些操作需要root用户权限。不同客户内部主机登录规范不一样,您可以通过su切换到root用户或者给admin用户增加sudo权限。

2.3 目录规划

        如果您通过OBD软件自动化安装OceanBase数据库,则会将RPM包解压到HOME目录的隐藏文件夹.obd下,如/.obd/repository/oceanbase-ce/3.1.0/afd11 。这种方式可以同时部署多个版本。

三、初始化服务器环境

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

3.1 内核参数修改

3.1.1、编辑配置文件,输入:wq保存退出

[root@qyfkpt07 ~]# vim /etc/sysctl.conf

修改内容如下:

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
fs.aio-max-nr = 1048576

3.1.2、运行命令让配置生效

[root@qyfkpt07 ~]# sysctl –p

3.2 修改会话变量设置

        OceanBase数据库的进程涉及的限制包括:线程最大栈空间大小(Stack)、最大文件句柄数(Open Files)和core文件大小(Core File Size)。您可将会话级别的最大栈空间大小设置为unlimited,最大文件句柄数设置为655350,Core文件大小设置为unlimited。如果已有设置值低于这个设置值,则按照以下命令修改 /etc/security/limits.conf 配置文件。

3.2.1、编辑配置文件,然后输入:wq保存退出

[root@qyfkpt07 ~]# vim /etc/security/limits.conf

修改内容如下:

* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited
* soft stack unlimited
* hard stack unlimited

3.2.2、退出当前会话,重新登录。执行以下命令,查看配置是否生效

[root@qyfkpt07 ~]# ulimit -a

3.3 关闭防火墙

        查看防火墙状态。如当前防火墙状态为inactive,则不需关注。若当前防火墙状态为active,则需永久关闭。

[root@qyfkpt07 ~]# systemctl status firewalld
[root@qyfkpt07 ~]# systemctl disable firewalld
[root@qyfkpt07 ~]# systemctl stop firewalld
[root@qyfkpt07 ~]# systemctl status firewalld

3.4 关闭 SELinux

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

[root@qyfkpt07 ~]# vi /etc/selinux/config

        注意:SELINUX 选项必须使用注释中的三个值之一。如果填写错误,机器重启后操作系统会报错,之后就只能通过进入单用户模式修改。

使用OBD自动化部署OceanBase社区版多节点集群_第5张图片

3.4.2、配置文件修改后需等到重启主机后才可生效,使用下面命令使其立即生效。

[root@qyfkpt07 ~]# setenforce 0

3.5 配置时间同步服务

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

        通常,只要节点配置时间同步服务器跟公网时间保持同步即可。实际上在企业机房里,企业会有统一的时间服务器跟机房提供的时间服务器或者直接跟公网时间服务器同步,OceanBase节点只需要跟机房统一的时间服务器进行同步即可。

        CentOS或RedHat 7.x版本推荐使用chrony服务做时间源。Chrony是NTP(即Network Time Protocol,网络时间协议,服务器时间同步的一种协议)的另一种实现。与ntpd不同的是,Chrony可以更快且更准确地同步系统时钟,最大程度的减少时间和频率误差。

3.5.1、判断是否使用 ntpd 同步时间

[root@qyfkpt07 ~]# systemctl status ntpd

        如果出现上述提示信息,表示没有使用  ntpd ,您可继续进行后续步骤。如果提示有  ntpd 服务,则需卸载  ntpd 软件。

3.5.2、关闭ntp服务

[root@qyfkpt07 ~]# sudo /etc/init.d/ntp stop

3.5.3、移除ntp

[root@qyfkpt07 ~]# yum remove ntp –y

3.5.4、安装chrony 服务

[root@qyfkpt07 ~]# yum -y install chrony

3.5.5、配置chrony,编辑文件

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

[root@qyfkpt07 ~]# vi /etc/chrony.conf

配置内容见如下文件:

# server后面跟时间同步服务器
# 使用 pool.ntp.org 项目中的公共服务器。按server配置,理论上您想添加多少时间服务器都可以。
# 或者使用阿里云的 ntp 服务器
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst

# 如果是测试环境,没有时间同步服务器,那就选取一台配置为时间同步服务器。
# 如果选中的是本机,则取消下面 server 注释
server 127.127.1.0

# 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整。
driftfile /var/lib/chrony/drift

# chronyd 根据需求减慢或加速时间调整,
# 在某些情况下系统时钟可能漂移过快,导致时间调整用时过长。
# 该指令强制 chronyd 调整时期,大于某个阀值时步进调整系统时钟。
# 只有在因 chronyd 启动时间超过指定的限制时(可使用负值来禁用限制)没有更多时钟更新时才生效。
makestep 1.0 3

# 将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。
rtcsync

# Enable hardware timestamping on all interfaces that support it.
# 通过使用hwtimestamp指令启用硬件时间戳
#hwtimestamp eth0
#hwtimestamp eth1
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# 指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器
#allow 192.168.0.0/16
#deny 192.168/16

# Serve time even if not synchronized to a time source.
# 即使没有同步到时间源,也要服务时间
local stratum 10

# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys

# Specify directory for log files.
# 指定日志文件的目录。
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

最简单的配置文件如下:

server 127.127.1.0
allow 172.20.0.0/16
loca lstratum 10

        常用命令,使用 chrony 时间服务是为了保证 OceanBase 集群各个节点时间尽可能同步,下面这些命令供参考。

        说明:用clockdiff 命令可以检查本机跟目标机器的时间同步误差,以该命令结果为准。

# 查看时间同步活动
[root@qyfkpt07 ~]# chronyc activity
# 查看时间服务器
[root@qyfkpt07 ~]# chronyc activity
# 查看同步状态
[root@qyfkpt07 ~]# chronyc sources -v
# 校准时间服务器:
[root@qyfkpt07 ~]# chronyc tracking

3.5.6、时区设置(可选)

# 如果时间跟当前实际时间差异很大,参考如下命令查看确认当前系统时区。
[root@qyfkpt07 ~]# timedatectl
# 查看所有可用时区。
[root@qyfkpt07 ~]# timedatectl list-timezones
# 设置当前系统时区
[root@qyfkpt07 ~]# timedatectl set-timezone Asia/Shanghai
# 设置完时区后,您可强制同步系统时钟。
[root@qyfkpt07 ~]# chronyc -a makestep

使用OBD自动化部署OceanBase社区版多节点集群_第6张图片

3.6 配置安装用户

        前文介绍过,建议安装部署在普通用户下。下面是创建用户admin并授予sudo 权限的方法,仅供参考。后文以root用户为例(哈哈哈~~)

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

3.6.1、新增普通用户 admin

[root@qyfkpt07 ~]# useradd admin

3.6.2、运行下面命令指定密码,密码修改为自己的。

[root@qyfkpt07 ~]# echo 'admin:a********3' | chpasswd

3.6.3、在CentOS上为admin用户增加sudo权限

[root@qyfkpt07 ~]# sermod admin -G wheel
[root@qyfkpt07 ~]# id admin

        验证是否生效,切换到admin用户下,执行命令:sudo date。输入密码后查看返回结果。

3.7 配置 SSH 免密登录

        使用自动化技术部署 OceanBase 集群,所有的命令通过中控机向 OceanBase 集群节点发出。则需要配置中控机中 OBD 运行的用户到 OceanBase 集群节点中 OBServer 安装的用户的 SSH 免密登录。

        本文示例是中控机的用户root到OBServer 节点的用户 root 的免密登录。这里选择将中控机的 RSA 或 DSA 公钥复制到目标节点的 SSH 配置文件中。

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

[root@qyfkpt07 ~]# ssh-keygen -t rsa
[root@qyfkpt07 ~]# ls -al .ssh/

        上面命令会在用户对应的目录中生成文件夹 .ssh 。注意不要改变文件夹以及里面文件的访问权限。

使用OBD自动化部署OceanBase社区版多节点集群_第7张图片

3.7.2、打通到本机的SSH免密登录,制RSA或DSA公钥到目标节点,推荐使用命令ssh-copy-id,多台服务器时都要打通。输入root用户密码回车即可。

[root@qyfkpt07 ~]# ssh-copy-id -i [email protected]
[root@qyfkpt07 ~]# ls -al .ssh/

使用OBD自动化部署OceanBase社区版多节点集群_第8张图片

3.8 磁盘文件系统划分

        OceanBase 数据库读写磁盘主要是三类文件:

  • 运行日志:位于启动目录下的log目录。记录进程observer的运行日志、选举服务的运行日志和rootservice的运行日志。主要读写特点是顺序写。
  • 数据文件:主要是指数据文件block_file,一次性初始化大小,可以在线扩容,但是不能缩容。主要读写特点是随机读、顺序写,偶尔密集的随机写。
  • 事务日志文件:主要是指事务和sstable相关的日志,包括clog、ilog 和slog等。主要读写特点是顺序写。

        这三个文件尽可能分散在不同的磁盘上存储。如果只有一块盘,则可以使用 fdisk或lvm划分为多个逻辑盘。

        如需分盘需优先考虑事务日志文件的大小,生产环境下建议是可用内存大小的 3-4 倍。剩余的大小再留给数据文件。学习环境下,总的盘本身就很小,可以不遵守这个规则,日志文件大小比内存大 1-2 倍即可。

3.8.1、磁盘划分(以下操作为示例,请自行验证)

        这里使用LVM技术对 /dev/vdb 进行划分。使用 LVM 技术划分 LV 大小时,请根据实际磁盘大小调整参数。

# lvm分盘
pvcreate /dev/vdb
vgcreate obvg /dev/vdb
lvcreate -L 20G obvg -n lvredo
lvcreate -l 100%FREE obvg -n lvdata

# 格式化文件系统
mkfs.ext4 /dev/obvg/lvdata
mkfs.ext4 /dev/obvg/lvredo

# 修改mount参数文件
vim /etc/fstab
/dev/obvg/lvredo /redo   ext4    defaults,noatime,nodiratime,nodelalloc,barrier=000
/dev/obvg/lvdata /data   ext4    defaults,noatime,nodiratime,nodelalloc,barrier=000

# 挂载文件系统
mkdir -p /data /redo
vim /etc/fstab
mount /data
mount /redo
chown -R admin.admin /data /redo

# 检查
df –h

输出:
文件系统            容量 已用 可用 已用% 挂载点
/dev/mapper/obvg-lvdata  59G  53M  56G  1%   /data
/dev/mapper/obvg-lvredo  20G  45M  19G  1%   /redo

        注意:OBProxy 独立部署的服务器不需要做文件系统划分,OBProxy 只有运行日志目录。

        由于以下操作是单机部署,服务器磁盘不是裸盘,未进行分盘操作,以下空间分配使用了已有的磁盘空间。

3.8.2、查看服务器磁盘信息

[root@qyfkpt07 ~]# df –h

使用OBD自动化部署OceanBase社区版多节点集群_第9张图片

四、安装 OBD 自动化部署软件(在线)

        OBD 全称为 OceanBase Deployer,是 OceanBase 数据库社区版的命令行自动化部署软件。在中控机上部署 OBD 软件。直接添加 OceanBase 数据库的仓库,使用 YUM 安装。

4.1 添加 OceanBase 数据库的仓库

4.1.1、安装仓库

[root@qyfkpt07 ~]# sudo yum install -y yum-utils
[root@qyfkpt07 ~]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
[root@qyfkpt07 ~]# sudo yum install -y ob-deploy
[root@qyfkpt07 ~]# source /etc/profile.d/obd.sh

4.1.2、查看OceanBase.repo内容。

[root@qyfkpt07 ~]# cat /etc/yum.repos.d/OceanBase.repo

使用OBD自动化部署OceanBase社区版多节点集群_第10张图片

4.2 规划机器信息

        这些信息会在下文配置OBD配置文件时用到,文章开头有进行查询,如果没记录也不要紧,那就用到的时候再查一次呗-~-~!

属性

详情

IP

172.31.115.64

网卡名

ens160

OS

CentOS Linux release 7.7.1908 (Core)

CPU

16C

内核

3.10.0-1062.el7.x86_64

内存

总内存31G,可用内存 19G

磁盘1

/dev/mapper/centos-home 100G

磁盘2

/dev/sdb1 250G

4.3 机器和角色划分

角色

机器

备注

OBD

172.31.115.64

中控机,自动化部署软件

OBServer

172.31.115.64

OceanBase数据库

OBProxy

172.31.115.64

OceanBase访问反向代理

OBClient

172.31.115.64

OceanBase命令行客户端

4.4 编辑OBD配置文件

        编辑文件obproxy-example.yaml,后续版本配置文件格式可能会变化,具体情况请参考 配置文件说明。

## Only need to configure when remote login is required
user:
  username: root
  password: swyf#222!master
  key_file: .ssh/authorized_keys
  port: 22
#   timeout: ssh connection timeout (second), default 30
oceanbase-ce:
  servers:
    # Please don't use hostname, only IP can be supported
  - 172.31.115.64
  global:
    #  The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
    home_path: /home/admin/oceanbase-ce
    # The directory for data storage. The default value is $home_path/store.
    data_dir: /data/oceanBaseData
    # The directory for clog, ilog, and slog. The default value is the same as the data_dir value.
    # redo_dir: /redo
    redo_dir: /home/redo
    # 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: ens160
    mysql_port: 2881 # External port for OceanBase Database. The default value is 2881. DO NOT change this value after the cluster is started.
    rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882. DO NOT change this value after the cluster is started.
    zone: zone1
    cluster_id: 1
    # please set memory limit to a suitable value which is matching resource. 
    memory_limit: 20G # 进程默认使用的最大内存,如果设置为0 就是这个参数不受限制。跟参数 memory_limit_percentage 二选一
    # memory_limit_percentage: 80 # 进程默认使用的最大内存占总可用内存的百分比。跟参数 memory_limit 二选一
    system_memory: 4G # The reserved system memory. system_memory is reserved for general tenants. The default value is 30G.
    datafile_size: 10G # 进程的数据文件(block_file)的初始化大小。如果为0就是这个参数不受限制。 
    datafile_next: 2G # the auto extend step. Please enter an capacity, such as 2G
    datafile_maxsize: 20G # the auto extend max size. Please enter an capacity, such as 20G
    log_disk_size: 50G # The size of disk space used by the clog files.
    cpu_count: 14 # 默认取操作系统的CPU数减去2.
    production_mode: false
    enable_syslog_wf: false # Print system logs whose levels are higher than WARNING to a separate log file. The default value is true.
    enable_syslog_recycle: true # Enable auto system log recycling or not. The default value is false.
    max_syslog_file_count: 30 # The maximum number of reserved log files before enabling auto recycling. The default value is 0.
    # observer cluster name, consistent with obproxy's cluster_name
    appname: obcluster
    # root_password: # root user password, can be empty
    # proxyro_password: # proxyro user pasword, consistent with obproxy's observer_sys_password, can be empty
    root_password: A***********t # 建议设置复杂的密码。
obproxy-ce:
  # Set dependent components for the component.
  # When the associated configurations are not done, OBD will automatically get the these configurations from the dependent components.
  depends:
  - oceanbase-ce
  servers:
  - 172.31.115.64
  global:
    listen_port: 2883 # External port. The default value is 2883.
    prometheus_listen_port: 2884 # The Prometheus port. The default value is 2884.
    home_path: /home/admin/obproxy
    # oceanbase root server list
    # format: ip:mysql_port;ip:mysql_port. When a depends exists, OBD gets this value from the oceanbase-ce of the depends.
    # rs_list: 192.168.1.2:2881
    enable_cluster_checkout: false
    # observer cluster name, consistent with oceanbase-ce's appname. When a depends exists, OBD gets this value from the oceanbase-ce of the depends.
    # cluster_name: obcluster
    skip_proxy_sys_private_check: true
    enable_strict_kernel_release: false
    # obproxy_sys_password: # obproxy sys user password, can be empty. When a depends exists, OBD gets this value from the oceanbase-ce of the depends.
    # observer_sys_password: # proxyro user pasword, consistent with oceanbase-ce's proxyro_password, can be empty. When a depends exists, OBD gets this value from the oceanbase-ce of the depends.

        注意:如果服务器配置较低,部分配置参数请参考以下文件mini-memory-obproxy-example.yaml,专门针对最小内存(可用内存大于8G)的节点配置,指定了很多observer进程的启动参数。

oceanbase-ce: 
  global:
    memory_limit: 8G #
    system_memory: 3G
    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_size: 50G
    syslog_level: WARN
    enable_syslog_wf: false
    enable_syslog_recycle: true
    max_syslog_file_count: 10

上面配置不满足就自己对照参数说明看着改配置文件吧(我不管了)

使用OBD自动化部署OceanBase社区版多节点集群_第11张图片

关键参数说明

配置项名

配置值

备注

servers

172.31.115.64

本示例是在中控机上部署OBServer,所以写的是中控机IP。可以写实际IP,也可以写127.0.0.1(仅学习用)。

home_path

/home/admin/oceanbase-ce

指定到普通用户(admin)的目录下,为区别于企业版,文件名叫oceanbase-ce。

data_dir

/data/oceanBaseData

指向独立的磁盘,这里使用前面分配的LV(lvdata)。实际存储OceanBase的数据文件目录(sstable)。

redo_dir

/home/redo

指向独立的磁盘,这里使用前面分配的LV(lvredo)。实际存储OceanBase的事务日志目录(clog、slog和ilog)。

devname

ens160

跟servers里指定的IP对应的网卡名

mysql_port

2881

进程observer的连接端口,默认是2881。后面OceanBase客户端直连这个端口可以访问该节点。

rpc_port

2882

进程observer跟其他节点进程之间的RPC通信端口,默认是2882。

zone

zone1

zone是逻辑机房的概念。单副本集群下只有一个zone,默认取名zone1。三副本集群会有三个zone,名字随意,不要重复即可。

cluster_id

1

OceanBase集群ID标识,不同集群不要重复即可。

memory_limit

20G

进程observer能从OS获取的最大内存,最小不少于8G。如果机器内存丰富的话,这个参数可以大一些。

system_memory

4G

进程observer留给集群内部用的保留内存,这个会占用上面memory_limit的内存,留给业务租户的就更少。

datafile_size、

datafile_disk_percentage

10G

80%

这两个参数2选1。用来指定该节点数据文件(block_file)大小的。可以按大小指定,或者按磁盘空间的百分比指定。这里示例磁盘空间很小,为精确控制,指定数据文件大小。

注意:当数据文件和事务日志文件共用一个磁盘时,必须指定数据文件具体大小,以避免日志文件目录空间不够的情况发生。

syslog_level

WARN或ERROR

运行日志的日志级别,有INFO、WARN、ERROR等几个级别。级别越低,日志量越大。进程observer的日志量非常大,如果磁盘空间不大的话,就调整为WARN或ERROR。

enable_syslog_recycle

true

指定运行日志是否以滚动方式输出,最多保留指定数量的运行日志。

max_syslog_file_count

30

根据磁盘空间大小定数值,这里默认保留最多10个历史运行日志文件。

root_password

随机字符串

OceanBase集群的超级管理员root@sys的密码,默认随机字符串,建议设置复杂的密码。

        部署成功后,OBD会把配置文件obproxy-example.yaml复制到自己的工作目录里(~/.obd/cluster/obce-single/config.yaml),后期再对原obproxy-example.yaml文件进行修改是不生效的。

        说明:如果你机器内存大于 64G,上面和内存相关的参数可以不设置。

4.5 部署集群

        部署使用命令:obd cluster deploy [集群名] -c [集群配置文件]。若想显示详细安装信息在命令最后加 –v。

        这里的集群名是配置文件在OBD里的唯一标识,可以跟配置文件中的集群名相同,也可以跟文件名相同。这里的obce-single.yaml文件就是上文配置的obproxy-example.yaml配置文件。

4.5.1、部署集群

[root@qyfkpt07 ~]# obd cluster deploy obce-single -c /home/obce-single.yaml

使用OBD自动化部署OceanBase社区版多节点集群_第12张图片

4.5.2、查看部署结果

[root@qyfkpt07 ~]# cd
[root@qyfkpt07 ~]# obd cluster list

使用OBD自动化部署OceanBase社区版多节点集群_第13张图片

        查看目录结构,其中/store、/data和/redo的目录关系是重点。总体结构不变,后期映射关系时可能会进行细微调整。

4.5.3、查看/store目录结构

[root@qyfkpt07 ~]# tree /home/admin/oceanbase-ce/

使用OBD自动化部署OceanBase社区版多节点集群_第14张图片

4.5.4、查看/data目录结构(路径在上一步的结果中)

[root@qyfkpt07 ~]# tree /data/oceanBaseData

使用OBD自动化部署OceanBase社区版多节点集群_第15张图片

4.5.5、查看/redo目录结构(路径在上一步的结果中)

[root@qyfkpt07 ~]# tree /home/redo

使用OBD自动化部署OceanBase社区版多节点集群_第16张图片

4.6 启动和初始化集群

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

        说明:第一次运行  start 命令会对集群进行初始化( boostrap ),以后再使用  start 命令就只会启动集群中节点进程。该命令进行初始化需要几分钟。

        注意:当可用内存不足 8G 或者日志目录剩余可用空间比例不足 5% 时,bootstrap 很可能会失败。

4.6.1、初始化集群

        初始化完成后自己记好连接信息尤其是密码(下图红框所示)。如果配置文件中未配置会自动随机生成,这里忘记记录就要自己找到配置文件去查看(配置文件指的是OBD复制到自己工作目录里的配置文件【~/.obd/cluster/obce-single/config.yaml】

[root@qyfkpt07 ~]# obd cluster start obce-single

使用OBD自动化部署OceanBase社区版多节点集群_第17张图片

4.6.2、确认集群是否初始化成功查看启动后的集群状态

[root@qyfkpt07 ~]# obd cluster list
[root@qyfkpt07 ~]# obd cluster display obce-single

使用OBD自动化部署OceanBase社区版多节点集群_第18张图片

使用OBD自动化部署OceanBase社区版多节点集群_第19张图片

4.6.3、检查数据文件大小,进程observer启动后会初始化数据文件block_file的大小,可根据参数datafile_size或datafile_disk_percentage进行控制。

[root@qyfkpt07 ~]# ls -lrth /data/oceanBaseData/sstable/block_file

4.6.4、检查进程:OceanBase数据库是单进程软件,进程名为observer,可以使用下面命令查看这个进程。

[root@qyfkpt07 ~]# ps -ef | grep observer
[root@qyfkpt07 ~]# ps -ef | grep obproxy

使用OBD自动化部署OceanBase社区版多节点集群_第20张图片

4.6.5、检查进程监听端口

[root@qyfkpt07 ~]# sudo netstat -ntlp | grep observer

4.6.6、集群重启命令(没事别老重启~~)

[root@qyfkpt07 ~]# obd cluster restart obce-single

使用OBD自动化部署OceanBase社区版多节点集群_第21张图片

五、安装OBClien

安装准备好的rpm包(部署包obclient与libobclient自己去下载,建议最新版本)

[root@qyfkpt07 ~]# sudo rpm -ivh /home/obclient-*.rpm /home/libobclient-*.rpm

六、连接 OceanBase 集群的内部实例(sys)

        OceanBase数据库提供自己的客户端工具obclient,需要安装后才可使用。和传统MySQL不同,OBServer的连接端口是2881,访问反向代理OBProxy的连接端口是2883,建议使用代理连接,用户名是root@sys,密码就是上文让你记录的那个。

Obclient连接命令

[root@qyfkpt07 ~]# obclient -h 172.31.115.64 -uroot@sys -P2881 -p -c -A oceanbase

参数说明:

  • -h:提供 OceanBase 数据库连接 IP,通常是一个 OBProxy 地址。
    • -u:提供租户的连接账户,MySQL 租户的管理员用户名默认是 root。格式有两种:
              用户名@租户名#集群名
              集群名:租户名:用户名
  • -P:提供OceanBase数据库连接端口,也就是OBProxy的监听端口默认2883,可以自定义。
  • -p:提供账户密码,为了安全可以不提供,改为在后面提示符下输入,密码文本不可见。
  • -c:表示在 MySQL 运行环境中不要忽略注释。

在数据库列表里看到  oceanbase 数据库,表示集群初始化成功。

使用OBD自动化部署OceanBase社区版多节点集群_第22张图片

七、创建和连接 MySQL 租户

创建租户分为以下三步:

  • 创建资源单元规格:该步骤为可选步骤,如果有合适的规格可以跳过此步骤,直接进行复用。
  • 创建资源池:可以每个zone一个资源池,使用独立的资源单元规格,也可以所有zone使用同一个资源单元规格,都在一个资源池下。
  • 创建租户:创建租户时需关联到第 2 步中创建的资源池。

7.1 创建资源单元规格

        创建资源单元规格后并不会立即分配资源。资源单元规格元数据在表  DBA_OB_UNITS里,建议创建之前先查看此表,如果有合适的规格,可直接复用。

7.1.1、创建资源单元规格(这里注意需要按实际配置自己修改)

obclient [oceanbase]> CREATE RESOURCE UNIT my_test MAX_CPU = 12, memory_size = '12G', MAX_IOPS = 10000, log_disk_size = '80G', MIN_CPU = 2, MIN_IOPS = 5000;

7.1.2、删除资源

obclient [oceanbase]> DROP RESOURCE UNIT my_test;

7.1.3、修改多个资源,修改资源时MAX资源不能小于MIN资源

obclient [oceanbase]> ALTER RESOURCE UNIT my_test MAX_CPU = 12, memory_size = '12G', log_disk_size = '40G';

7.2 创建资源池

        资源池中的资源是从节点资源中分配而来。资源池在每个节点里的部分被称为资源单元。每个资源单元的大小通过创建时指定的资源单元规格大小确定。生产环境中,为了管理方便,可以一个资源池横跨三个  Zone ,并且使用同一种资源单元规格。

7.2.1、创建资源池

obclient [oceanbase]> create resource pool test_pool_1 unit='my_test', unit_num=1, zone_list=('zone1');

7.2.2、查看资源单元

obclient [oceanbase]> SELECT * FROM oceanbase.__all_unit_config\G;

7.3 创建名为 my_test 的一个 1 副本的租户

7.3.1、创建名为 my_test 的一个 1 副本的租户(多副本自己改OBD配置文件,需要重新初始化)

obclient [oceanbase]> CREATE TENANT IF NOT EXISTS my_test charset='utf8mb4',replica_num=1, zone_list=('zone1'), primary_zone='RANDOM',comment 'mysql tenant/instance', resource_pool_list=('test_pool_1') set ob_tcp_invited_nodes='%',ob_compatibility_mode='mysql';

参数说明:

  • ob_tcp_invited_nodes='%' 白名单这个最好设上,否则首次登录报错ERROR 1227 (42501): Access denied。不过也可以用命令改一下这个参数。ALTER TENANT test_tenant SET VARIABLES ob_tcp_invited_nodes='%';
  • ob_compatibility_mode='mysql' 社区版只支持mysql租户。

7.3.2、查询创建结果

obclient [oceanbase]> select * from dba_ob_tenants\G;

7.3.3、强制删除租户

obclient [oceanbase]> drop TENANT my_test force;

7.3.4、不退出sys租户,切换到 my_test 租户

obclient [oceanbase]> alter system change tenant my_test;

7.3.5、当前链接的租户

obclient [oceanbase]> SHOW TENANT;

7.3.6、查看租户参数

obclient [oceanbase]> show variables;
obclient [oceanbase]> show variables like '%limit%';

7.3.7、新创建的业务租户的管理员(root)密码默认是空的。需要改密码。使用root登录到新建的my_test租户中(密码为空直接回车登录)

[root@qyfkpt07 ~]# obclient -h 172.31.115.64 -P2883 -uroot@my_test#obcluster -p -c -A oceanbase

7.3.8、设置新密码

obclient [oceanbase]> ALTER USER 'root' IDENTIFIED BY 'test!Odb01@ro**ot';

7.3.9、使用root新密码登录到新建的 my_test 租户中

[root@qyfkpt07 ~]# obclient -h 172.31.115.64 -P2883 -uroot@my_test#obcluster -p -c -A oceanbase

7.3.10、创建库(database)

obclient [oceanbase]> create database dev_test;
obclient [oceanbase]> create database dev_test1;

导入数据(自行处理)

完成!感谢查看!

你可能感兴趣的:(数据库部署,自动化,oceanbase,运维)