准备工作
一、服务器准备
用途 | OS | CPU(core) | 内存(GB) | 磁盘(GB) | IP | 备注 |
---|---|---|---|---|---|---|
中控机,部署OBD | CentOS Linux release 7.9.2009 | 8 | 15 | 400 | 192.168.0.220 | 虚拟机 |
observer | CentOS Linux release 7.9.2009 | 16 | 25 | 400 | 192.168.0.221 | 虚拟机 |
observer | CentOS Linux release 7.9.2009 | 16 | 25 | 400 | 192.168.0.223 | 虚拟机 |
observer | CentOS Linux release 7.9.2009 | 16 | 25 | 400 | 192.168.0.224 | 虚拟机 |
backup | CentOS Linux release 7.9.2009 | 4 | 8 | 400 | 192.168.0.222 | 虚拟机 |
OCP-Server | Kylin Linux Advanced Server release V10 (Lance) | 6 | 30 | 400 | 192.166.0.87 | 虚拟机 |
MetaDB + MonitorDB | Kylin Linux Advanced Server release V10 (Lance) | 16 | 30 | 400 | 192.166.0.89 | 虚拟机 |
二、软件准备
1、在OceanBase官网下载社区版一键安装包
https://www.oceanbase.com/softwarecenter
根据自己的操作系统按需下载
三、资源规划
1、内存
observer节点是25G内存,预留2G给操作系统,剩余23G可分给OB
2、磁盘
observer节点是400G磁盘空间,其中/home的磁盘空间剩余330G,则OB的全部数据都放在/home中
OB运行时的磁盘空间占用大致分为3部分:数据 + redolog + 运行日志
其中 运行日志大致分为4个种类,每种日志的每个文件最大为256M,若每种日志最大保留10个文件,且开启enable_syslog_wf,则运行日志最大占用磁盘空间为 4 * 10 * 2 * 256M = 20G
另,需要预留部分空间给操作系统的其进程,因此可分给OB的磁盘空间大约300G
因为没有其他磁盘,所以OB的data和redolog都放在一起,空间比例按照2:1分配,因此为data分配200G,log分配100G(不小于分配给OB内存的3倍)
磁盘占用项 | 数值 |
---|---|
数据库运行日志 | 20G |
数据库数据 | 200G |
redolog | 100G |
四、操作系统配置
1、创建admin用户(中控机 + observer节点)
# useradd -U admin -d /home/admin -s /bin/bash
# mkdir -p /home/admin
# sudo chown -R admin:admin /home/admin
# passwd admin
# 密码:自行设置
# 为admin用户设置sudo权限
# vim /etc/sudoers
# 添加以下内容:
# admin ALL=(ALL) NOPASSWD: ALL
2、上传OceanBase All in One安装包到服务器(中控机)
上传到 /home/admin/install 目录
3、注意操作系统时间的配置(中控机 + observer节点)
如果服务器不能链接外网,则需要部署一个NTP服务器,集群和这个服务器保持时间同步
如果可以连接外网,看看是否安装了 chrony,安装了以后可以自动同步网络时间
4、配置limits.conf(中控机 + observer节点)
# sudo 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
退出当前会话,ulimit -a验证是否生效
查看 /etc/security/limits.d/20-nproc.conf 文件中是否存在 nproc 的配置,若存在需同步修改该文件中 nproc 的值
5、配置 /etc/sysctl.conf(中控机 + observer节点)
sudo vim /etc/sysctl.conf
# 新增或修改以下内容
fs.aio-max-nr=1048576 # 修改内核异步 I/O 限制
net.core.somaxconn = 2048 # Socket 监听队列的最大长度,频繁建立连接需要调大该值
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.tcp_rmem = 4096 87380 16777216 # Socket 接收缓冲区的大小,分别为最小值、默认值、最大值
net.ipv4.tcp_wmem = 4096 65536 16777216 # Socket 发送缓冲区的大小,分别为最小值、默认值、最大值
net.ipv4.tcp_max_syn_backlog = 16384 # 处于 SYN_RECVD 状态的连接数
net.ipv4.tcp_fin_timeout = 15 # Socket 主动断开之后 FIN-WAIT-2 状态的持续时间
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1 # 允许重用处于 TIME WAIT 状态的 Socket
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_slow_start_after_idle=0 # 禁止 TCP 连接从 Idle 状态的慢启动,降低某些情况的网络延迟
vm.swappiness = 0 # 优先使用物理内存
vm.min_free_kbytes = 2097152
vm.max_map_count=655360
fs.file-max=6573688
# 系统内核dump日志存储目录,结合具体使用修改目录位置
kernel.core_pattern = /home/admin/core-dump/core-%e-%p-%t
6、关闭防火墙和SELinux(中控机 + observer节点)
# 关闭防火墙
sudo systemctl status firewalld
sudo systemctl disable firewalld
sudo systemctl stop firewalld
# 关闭SELinux
sudo vim /etc/selinux/config
# 将以下内容改为 disabled
SELINUX=disabled
# 查看 SELinux 状态
sudo sestatus
# 重启
7、手动关闭透明大页
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
OBD白屏部署单机版OB-CE4.2.1
一、软件部署规划
192.168.0.220(以下简称220)中控机上安装OBD,并通过OBD在192.168.0.221(以下简称221)上部署单机版OB
虽然应用可直连OB,但考虑到后续扩容的需求,因此在220上同时安装OBProxy,应用连接OBProxy,这样后续可在用户无感知的情况下扩容
IP | 部署内容 |
---|---|
192.168.0.220 | OBD |
192.168.0.220 | OBProxy |
192.168.0.221 | OB数据库 |
二、解压、安装OBD、启动OBD WEB
1、 解压、安装OBD
# su admin
# cd install
# tar -xzf oceanbase-all-in-one-*.tar.gz && rm -rf oceanbase-all-in-one-*.tar.gz
# cd oceanbase-all-in-one/bin/
# ./install.sh
# echo "source ~/.oceanbase-all-in-one/bin/env.sh" >> ~/.bashrc
2、启动 OBD WEB
3、访问白屏安装页面
选择 OceanBase 及配套工具
集群名称自定义,只安装OBProxy,OCP Express 和 OBAgent不安装,后续直接安装完整版OCP
OBServer节点按照预定的计划,使用221,OBProxy使用220,部署用户为之前创建的admin用户
注意,部署过程中,如果log和data在一个磁盘上,则会报警,但不影响安装,如下
4、安装成功,查询集群状态
三、连接OBProxy、创建租户
1、 查询数据库版本
2、 查询集群资源
因为是新创建的数据库,且只需要一个用户租户,所以直接根据集群剩余资源创建 RESOURCE UNIT、RESOURCE POOL和TENANT即可
3、 创建资源单元
CREATE RESOURCE UNIT test_unit_config MEMORY_SIZE = '14G', MAX_CPU = 13, MIN_CPU = 13, LOG_DISK_SIZE = '90G', IOPS_WEIGHT = 1;
4、 创建资源池
CREATE RESOURCE POOL test_pool_01 UNIT='test_unit_config', UNIT_NUM=1, ZONE_LIST=('zone1');
5、 创建租户
CREATE TENANT obtest PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('test_pool_01') set OB_TCP_INVITED_NODES='%', ob_compatibility_mode='mysql';
查询创建好的租户
四、部分参数调整
1、 在SYS租户上,查询并设置一些配置项
# 限制打印程序日志的带宽
SHOW PARAMETERS LIKE '%syslog_io_bandwidth_limit%';
ALTER SYSTEM SET syslog_io_bandwidth_limit = '10M';
# 事务执行时间超过一定的阈值,打印 slow trans 日志
SHOW PARAMETERS LIKE '%trace_log_slow_query_watermark%';
ALTER SYSTEM SET trace_log_slow_query_watermark = '10s';
2、 登录新创建的租户(obtest),查询并设置一些系统变量
# 设置 SQL 最大执行时间(微秒)
SHOW variables LIKE '%ob_query_timeout%';
SET GLOBAL ob_query_timeout = 7200000000;
# 设置最大网络包大小
SHOW variables LIKE '%max_allowed_packet%';
SET GLOBAL max_allowed_packet = 41943040;
# 用于 SQL 执行的租户内存百分比限制
SHOW VARIABLES LIKE '%ob_sql_work_area_percentage%';
SET GLOBAL ob_sql_work_area_percentage = 10;
以上系统变量设置完成后,重新开启会话即可查询到生效后到系统变量
五、修改obtest租户的密码
租户创建完成后,默认的root用户没有密码
登录 root@obtest 修改密码
ALTER USER root IDENTIFIED BY '密码';
TPCC性能测试
使用obd做tpcc测试,测试流程参考官网
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218148
测试命令如下
obd test tpcc distributedob \
--tenant=obtest --user=root --password=密码 --database=test \
--warehouses=10 \
--run-mins=10 \
--optimization=1 \
--tmp-dir=/home/admin/tpcc/tmp
测试结果如下
中控机负载
observer负载
部署OCP4.2.1
在准备工作——服务器准备中,已经安装好了2台虚拟机 192.166.0.87 和 192.166.0.89,用来部署OCP相关服务,部署完成后,将接管部署在 192.168.0.221 上的OB
一、用户准备
参考准备工作——操作系统配置——创建admin用户
二、软件准备
参考:https://www.oceanbase.com/docs/common-ocp-1000000000368848
将OCP安装包,上传到 192.166.0.87 的某个目录
确保已经安装好JDK1.8,并要求构建版本号至少需为161
三、目录准备
mkdir /data
chown -R admin:admin /data
四、启动OBD WEB,白屏安装OCP
1、浏览器进入安装页面
2、选择安装OCP
3、安装OCP的同时安装全新的Oceanbase数据库作为OCP的数据库
4、OCP-Server和OCP的数据库不放在一起
之前准备了2台虚拟机分别为192.166.0.87(以下简称87)和192.166.0.89(以下简称89);在87上安装OCP-Server,在89上安装OCP依赖的数据库
注意下面的ocp.site.url设置,这是OCP的管理页面的地址
安装成功
5、登录OCP管理页面
目前遇到问题:使用admin用户安装完OCP后,启动成功,但是进入管理页面,无法查看服务器参数和数据等监控信息。这是因为 Pre check for create host 任务执行失败,这个任务失败的原因是admin用户执行clockdiff检查OCP-Server和数据库之间的时差时没有权限,只能通过sudo运行,但是OCP程序没有使用sudo调用clockdiff,导致失败。目前准备先跳过时差检查,官方准备在下一个版本修复这个问题
上面这个问题发生了 KylinOS V10 中,在CentOS 7.9中,虽然非root用户依然无法执行 clockdiff,但可以通过 sudo setcap cap_net_raw+ep /usr/sbin/clockdiff 命令,使admin用户可以不用sudo依然可以执行 clockdiff,从而解决这个问题
初始化成功
使用OCP4.2.1接管OB4.2.1
一、打开OceanBase云平台
其中 proxyro 的密码,可在待被接管集群的OBD部署主机上,通过 obd cluster edit-config <集群名称> 中查到,属性为:observer_sys_password
二、新建机型,按照要求输入
三、选择凭据中,新增一个凭据,使用非root用户
四、之后,OCP会创建一个接管集群的任务(Take over primary OB cluster)
五、如下所示,OCP已经接管了之前部署的OB集群(单体)
使用OCP扩容成3节点OB集群(1-1-1架构)
一、登录OCP云平台
二、添加主机
1、之前我们已经在220上部署了单节点的OB数据库,现在需要使用OCP将其扩容成3节点的OB集群,另外两个节点已经配置好(223和224),现在需要加入到OCP的主机管理中
2、OCP会为新添加的主机创建一个添加任务(主要是检查时间差和安装OCP Agent),等待执行完毕
3、OCP会检查新添加主机的一些重要配置,不满足需求时会提示
4、此时可以选择自动修复
5、全部修复完成后,就可以作为待扩容节点加入到集群了
三、扩容
1、点击需要扩容的集群,进入集群详细视图
2、点击扩展分布式集群
3、选择之前添加的主机
4、点击确定,扩容
扩容时发现缺少软件包oceanbase-ce-libs-4.2.1.3-103000032023122818.el7.x86_64.rpm
去官网下载缺少的软件包
上传缺少的软件包
重新扩容集群
发现还缺少软件包,重复之前的操作,去官网下载软件包,并上传到OCP
OCP成功创建集群扩容计划,等待扩容成功
扩容报错,“Cannot get disk usage of /home/admin/fvob/oceanbase/store, reason: failed to get disk usage: no such file or directory”
需要在扩容的2个节点上,创建好所有需要的目录(在 /home/admin/fvob/oceanbase 下)
mkdir -p /home/admin/fvob/oceanbase/store/{clog,slog,sstable}
跳过Make dir for ob子任务
扩容任务继续执行
任务执行到 Run io calibration(IO校准任务)时,出现任务无法执行完毕、长时间重复查询的情况
执行下面的查询,发现STATUS是FAILED状态
SELECT svr_ip, svr_port, storage_name, status, start_time, finish_time FROM GV$OB_IO_CALIBRATION_STATUS
WHERE svr_ip = '192.168.0.223' AND svr_port = 2882;
SELECT svr_ip, svr_port, storage_name, status, start_time, finish_time FROM GV$OB_IO_CALIBRATION_STATUS
WHERE svr_ip = '192.168.0.224' AND svr_port = 2882;
在sys租户上,手动执行校准任务后,STATUS变为READY
ALTER SYSTEM RUN JOB "io_calibration" SERVER = '192.168.0.223:2882';
ALTER SYSTEM RUN JOB "io_calibration" SERVER = '192.168.0.224:2882';
重试 Run io calibration,执行成功
Add OB zone 任务执行成功后,业务租户的 Batch add tenant replica 任务执行失败
提示资源不足
查询 GV$OB_SERVERS 视图,发现 zone1 的 memory_limit 是 23G(之前手动部署OB的时候填写的值),而 zone2 和 zone3 的 memory_limit 都是20G
在OCP云平台中,进入集群管理页面,点击待扩容集群,进入集群参数管理页面,修改 memory_limit 参数的值为23G,生效范围是集群
重新查询 GV$OB_SERVERS 视图,几个 zone 的 memory_limit 都是 23G 了,重试任务
Batch create resource pool 执行通过
集群扩容成功