作者简介:白云龙,六棱镜系统运维部负责人。
文档概要:
1、准备环境 2、基础配置 3、OceanBase自动化部署 4、资源池-租户-用户-创建
5、OB优化 6、常用命令 7、维护相关-服务篇 8、维护相关-obproxy故障重建
9、维护相关-副本重建 10、维护相关-节点磁盘更换 11、维护相关-物理资源扩容
12、维护相关-物理备份 13、维护相关-OB监控dooba基本使用 14、datax部署及使用
15、ob-loader-dumper 逻辑备份工具的使用
——————————————
7、维护相关-服务篇:
$ obd cluster stop sixlens_obcluster --停止集群服务
$ obd cluster stop sixlens_obcluster --启动集群服务
Note:上述方法为停止所有节点服务,生产环境需要持续提供服务,不能整体启停服务,需要单独维护某
一节点
完整单节点的维护流程应是先合并成功。再 stop server。再kill节点,合并是减少下次启动的恢复时间。
obclient -h172.20.2.119 -uroot@sys#ob_cluster -p123456 -P2883 -A -c oceanbase --sys租户
MySQL [oceanbase]>alter system major freeze; --合并数据
MySQL [oceanbase]> SELECT * FROM __all_zone WHERE name='merge_status'; --查询合并转态
Note:info字段都为“IDLE”代表合并完成,如状态为“MERGING”表示合并中
MySQL [oceanbase]> alter system stop server '172.20.2.118:2882';
Note:stop server(只是触发切主),成功后,在对应节点(118)机器上kill对应的observer进程、
Note1:stop_time为当前时间代表执行切换成功,默认为 1970-01-01
$ kill `pidof observer` --停止维护节点OBS服务,尽量不要使用-9 然服务正常停止
查看服务是否停止(服务停止后即可做相关维护操作,包括关机):
启动服务:
1、手动启动服务:
export LD_LIBRARY_PATH=~/.obd/repository/oceanbase-ce/3.1.1/f19f8bfb67723712175fb0dfd60579196b3168f1/lib/
$ cd /home/admin/oceanbase/ob && bin/observer --要在家目录执行,其他目录会报错
查看服务是否启动:
MySQL [oceanbase]> alter system start server '172.20.2.118:2882';
select svr_ip,status,usec_to_time(start_service_time),usec_to_time(stop_time) from __all_server;
Note:注意查看start前后 “stop_time”的状态
2、 自动启动服务:
$ obd cluster start sixlens_obcluster --已启动的服务不会有操作,未启动的节点会被拉起
节点状态为 inactive,稍等一段时间查看即为active,启动需要写时间
$ obd cluster display sixlens_obcluster --再次查看节点状态
8、维护相关-obproxy故障重建
当前为单节点obproxy,如意外down机,如何快速重建新obproxy,恢复集群连接入口,测试在任意一台observer部署obproxy(建议配置多节点obproxy,防止单点故障)
Note:obproxy可以单独使用一台服务器,也可以和observer公用
操作步骤:
1、在新的机器上安装obd的软件
2、配置新的obd机器到其他接管的主机之间的ssh互信
3、拷贝老的obd机器上的cluster下对应的文件夹到新的obd cluster目录下(需要提前备份出来一份)
4、OBD版本需要1.1.2
新节点安装OBD(模拟在116部署)
$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
$ sudo yum install -y ob-deploy
$ obd –version --查看当前OBD版本
OceanBase Deploy: 1.1.1
$ sudo obd update --升级OBD版本
ymal配置文件(总配置文件obproxy段落):
obproxy:
servers:
- 172.20.2.116
global:
listen_port: 2883
prometheus_listen_port: 2884
home_path: /home/admin/obproxy
rs_list: 172.20.2.116:2881;172.20.2.117:2881;172.20.2.118: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#
obd cluster autodeploy sixlens_obproxy -c config.yaml --部署yaml配置文件
$ obd cluster display sixlens_obproxy --查看obproxy运行状态
测试登录:
$ obclient -h172.20.2.116 -uroot@proxysys -P2883 –pPwd123#
拷贝老的obd机器上的cluster下对应的文件夹到新的obd cluster目录下 --注意目录结构
$ scp -r /home/admin/.obd/cluster/sixlens_obcluster admin@172.20.2.116:/home/admin/.obd/cluster
$ vim /home/admin/.obd/cluster/sixlens_obcluster/config.yaml --更改obproxy的ip,原为119
[admin@CAIP116 ~]$ $ obd cluster display sixlens_obcluster
租户连接测试:
$ obclient -h172.20.2.116 -uroot@sys#ob_cluster –pPwd123# -P2883 -A -c oceanbase
Note: 此为使用yum自动部署obp,也可以手工部署所有服务,具体步骤参考之前写的文档
https://open.oceanbase.com/blog/8600171 --Oceanbase 手动部署文档总结
9、维护相关-副本重建
当某个节点出现故障无法恢复则需要重建,集体操作如下
1、 查看问题节点observer的进程是否存在,存在直接kill掉(已节点118为例)
$ kill `pidof observer`
2、 alter system set server_permanent_offline_time='360s' 默认是3600s一个小时,副本下线一小时后才会启动补充副本重建的操作、把时间改短,让集群尽快补充副本
show parameters like '%server_permanent_offline_time%'; --查看是否更改
3、 清理相关目录文件,目录结构保留,只清理目录下的文件。
$ cd /home/admin/oceanbase/ob/log && rm –rf * --清空ob运行日志相关文件
$ cd /data/ob/sstable && rm –rf * --删除block_file文件
$ cd /redo/clog && rm –rf * && cd /redo/ilog && rm –rf * cd /redo/slog && rm –rf *
4、cd /home/admin/oceanbase/ob && bin/observer 拉起OBS服务
5、查看恢复状态
SELECT DATE_FORMAT(gmt_create, '%b%d %H:%i:%s') gmt_create_ , module, event, name1, value1, name2, value2, rs_svr_ip,name3,value3,name4,value4 FROM __all_rootservice_event_history WHERE 1 = 1 ORDER BY gmt_create DESC LIMIT 5 \G
补副本期间状态为:module: balancer event: start_add_replica
显示如下代表恢复完成: module: balancer event: tenant_balance_finished
Note:补充副本时间长短和数据大小有关
6、alter system set server_permanent_offline_time='3600s' --副本重建完毕改回默认值
10、维护相关-节点磁盘更换
如OB节点为SATA磁盘,现在更换为SSD或者其他原因、无需重新部署OB集群,每个节点单独维护重建即可,步骤类似于上面的“副本重建”操作:
1、 alter system major freeze; --任何停机操作都建议合并,会加快副本拉起的恢复速度
2、 $ kill `pidof observer` --停止节点服务
3、 挂载新盘
$ sudo mount /dev/sdd1 /home/admin/oceanbase1
$ sudo mount /dev/sde1 /redo1
$ sudo mount /dev/sdf1 /data1
4、 拷贝数据到新挂载的磁盘:
$ sudo cp -rf /home/admin/oceanbase/* /home/admin/oceanbase1
$ sudo cp –rf / redo/* / redo1
$ sudo cp –rf /data/* /data1/
5、 卸载全部磁盘
$ sudo umount /home/admin/oceanbase
$ sudo umount /home/admin/oceanbase1
$ sudo umount /redo
$ sudo umount /redo1
$ sudo umount /data
$ sudo umount /data1
6、 挂载新盘
$ sudo mount /dev/sdd1 /home/admin/oceanbase
$ sudo mount /dev/sde1 /redo
$ sudo mount /dev/sdf1 /data
Note:注意不要挂错,源盘为 sda1 sdb1 sdc1 要挂载的盘为 sdd1 sde1 sdf1
7、 拉起 observer
11、维护相关-物理资源扩容
1、 物理cpu核心从10c增加至20c 内存从48G增加至68G、硬盘增加至6T
$ obd cluster edit-config sixlens_obcluster
2、$ obd cluster reload sixlens_obcluster 重新加载配置
3、CPU在部署集群的时候已经超分,这位为30c、cpu无需配置
4、 调整资源规格
现有资源分配:
select unit_config_id,name,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb, round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gb from __all_unit_config order by unit_config_id;
调整租户资源规格
alter resource unit unitcaip max_cpu=10, min_cpu=10, max_memory='7G',min_memory='7G',max_disk_size = '2500G'; --调整unitcaip租户资源10c/7g/2500G
Note:cpu可超分,如租户多又不想避免资源浪费,可按需分配、内存为物理资源,严格收配置限制,超分会报错、磁盘受总资源
磁盘扩容:
SELECT * FROM __all_unit_config; 查询扩容前空间
alter system set datafile_size='6000G'; --所有租户共同使用的最大空间
SELECT * FROM __all_unit_config; 查询扩容后空间
ALTER RESOURCE UNIT unitcaip max_disk_size = '3000G'; --扩容对应租户的空间
12、维护相关-物理备份
备份建议:
物理备份只能是集群的全部租户数据,还原的时候可以针对指定租户还原,可跨集群恢复。
备份方案:每周一个全备(视情况,如果有大量数据写入全备可以手动做一次) 每天增量备份 日志归档为自动进行,无需人工参与
环境配置:
NFS为单独服务器,磁盘空间为10T
# yum install nfs-utils --NFT没有配置admin账户直接使用的root账户
# cat /etc/exports
/data/bakob 172.20.2.0/24(rw,no_root_squash,sync)
配置NFS参数
# cat /etc/sysconfig/nfs |grep ^[^#]
RPCNFSDARGS="-N 2 -N 3 -U"
RPCNFSDCOUNT=8
NFSD_V4_GRACE=90
NFSD_V4_LEASE=90
RPCMOUNTDOPTS=""
STATDARG=""
SMNOTIFYARGS=""
RPCIDMAPDARGS=""
RPCGSSDARGS=""
GSS_USE_PROXY="yes"
BLKMAPDARGS=""
启动NFS:
# systemctl restart nfs-config
# systemctl restart nfs-server
设置 Slot Table(所有OBS节点和NFS服务器)
# cat /etc/sysctl.conf |grep ^[^#]
sunrpc.tcp_max_slot_table_entries=128
所有节点安装nfs客户端(116 117 118)
yum install nfs-utils
所有OBS节点挂载NFS服务器
mount -tnfs4 -o rw,timeo=30,wsize=1048576,rsize=1048576,namlen=512,sync,lookupcache=positive 172.20.2.137:/data/bakob /obdatabak/
测试NFS性能:
fio -filename=/data/nfs/fio_test -direct=1 -rw=randwrite -bs=2048K -size=100G -runtime=300 -group_reporting -name=mytest -ioengine=libaio -numjobs=1 -iodepth=64 -iodepth_batch=8 -iodepth_low=8 -iodepth_batch_complete=8
配置:
show parameters like 'backup_dest';
ALTER SYSTEM SET backup_dest='file:////obdatabak'; --设置备份路径 sys租户
1、alter system minor freeze; 转储数据
2、ALTER SYSTEM ARCHIVELOG; 启动日志备份,日志归档是一个一次性的动作,执行一次即可
SELECT * FROM CDB_OB_BACKUP_ARCHIVELOG_SUMMARY; 确认日志备份任务是否已开始。
3、SELECT * FROM CDB_OB_BACKUP_ARCHIVELOG_SUMMARY; --确认备份是否开启,看是否是当前时间
4、alter system major freeze; --合并数据
5、SELECT * FROM __all_zone WHERE name='merge_status'; --查看合并进度
字段info值为IDLE即为合并完成,可以发起备份
6、ALTER SYSTEM BACKUP DATABASE; --发起数据备份
7、SELECT * FROM CDB_OB_BACKUP_PROGRESS; 查看正在备份的任务 D:表示全量备份 I:表
示增量备份
STATUS状态为RUNNING。备份完成后再次查询为空。没有信息输出
8、SELECT * FROM CDB_OB_BACKUP_SET_DETAILS; 查看备份任务的历史
9、ALTER SYSTEM CANCEL BACKUP; 停止数据备份任务
10、ALTER SYSTEM NOARCHIVELOG; 停止日志备份任务
关于日志归档状态的说明:
select * from cdb_ob_backup_archivelog_summary; 查看当前日志归档状态信息
log_archive_status 日志归档状态的种类,主要有:
• STOP: 没有日志归档备份
• BEGINNING: 正在启动日志归档备份
• DOING: 正在日志归档备份
• STOPPING: 停止日志归档备份
• INTERRUPTED: 日志归档备份断流了
删除过期备份:
查看备份:
select incarnation, tenant_id, bs_key , backup_type, encryption_mode, start_time, completion_time, elapsed_secondes , keep, output_bytes_display, output_rate_bytes_display, status from CDB_OB_BACKUP_SET_DETAILS order by start_time desc limit 10; --bs_key 要删除的备份id
ALTER SYSTEM DELETE BACKUPSET 5; --删除指定备份(删除逻辑为从后往前删除,不能删除近期备份)
手动清楚过期备份:
alter system set backup_recovery_window='7d'; 用于设置备份数据可以恢复的时间,默认为0天
alter system set auto_delete_expired_backup=true; 用于设置是否开启自动删除过期备份的功能
ALTER SYSTEM DELETE OBSOLETE BACKUP; --手工清理过期的备份
Note:OB3.1.1目前增量备份有BUG,执行增量备份为全备。下个版本会修复,3.1.1的备份组合目前只能为全备+日志
13、维护相关-OB监控:
随便创建一个只读账号即可,使用root账号也可以,安全起见,不建议是root账户
dooba.py脚本已上传至网盘,需要自取。
链接:https://pan.baidu.com/s/1VlCGrnMM55qfdCccccFwgw 提取码:kcd8
python dooba.py -h172.20.2.116 -umonitor@sys#ob_cluster -P2883 –pPwd123#
具体使用方法已有大佬整理详细文档 https://www.modb.pro/db/47556
Note:需要注意的是dooba调用mysql的客户端,如果没有直接yum安装即可
14、Datax部署及使用
datax web安装:
https://github.com/WeiYe-Jing/datax-web/blob/master/userGuid.md --datax 使用手册
https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md --部署
https://gitee.com/WeiYe-Jing/datax-web/tree/master --datax web使用文档参考
Note:安装部署很简单,照着文档一步步抄写就可以
常用json模板(所有均验证并使用):
mysql-to-csv.json --mysql使用datax导出csv文件
mysqlcsv-to-mysql.json --mysql-csv文件导入mysql
mysqlcsv-to-ob.json --mysql-csv文件导入OceanBase
mysql-to-ob.json --mysql到OB直传表及数据(不落地)
mysql-to-rds.json --本地mysql通过VPN连接到阿里云RDS数据直传(不落地)
ob-to-csv --OceanBase通过datax工具导出csv文件
obcsv-to-mysql.json ----OceanBase-csv文件导入mysql
obcsv-to-ob.json ----OceanBase-csv文件导入OB
ob-to-mysq.json --OB到mysql数据直传(不落地)
oracle-to-mongodb.json --oracle直传mongodb(不落地)
pgsql-mongodb.json --pgsql直传mongodn (不落地)
上述模板json文件已上传网盘,需要自取
链接:https://pan.baidu.com/s/1oj1pNbIcblc3-DUgpOsyEg
提取码:s4c2
--来自百度网盘超级会员V5的分享
datax插件需要根据数据源的情况和系统资源进行相关调整,可参考文档查看相关参数使用规则
https://github.com/alibaba/DataX
14、ob-loader-dumper逻辑备份工具使用功能
ob-loader-dumper逻辑备份工具,只支持 ob 到 ob。或者 csv 到 ob,但是对csv 有格式要求、经使用测试速度非常快,备份表平均速度在100MB/s 左右,还原70MB/s左右。目前主要用于OB的表备份。OB物理备份+逻辑备份,数据安全多一层保障
ob-loader-dumper工具不需要安装,解压可直接使用,ob-loader-dumper即将提供开放下载,敬请期待
租户级别操作
-- 导出租户表结构
bin/obdumper -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantcaip -p 123456 --sys-user=root --sys-password=123456 -D wo --ddl --all -f /byl
-- 导入租户表结构
bin/obloader -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantsixlens -p 123456 --sys-user=root --sys-password=123456 -D wo --ddl --all -f /byl
-- 导出租户数据
bin/obdumper -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantcaip -p 123456 --sys-user=root --sys-password=123456 -D wo --csv --all -f /byl
-- 导入租户表数据
bin/obloader -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantsixlens -p 123456 --sys-user=root --sys-password=123456 -D wo --csv --all -f /byl
单表操作:
-- 导出租户表结构
bin/obdumper -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantcaip -p 123456 --sys-user=root --sys-password=123456 -D wo --ddl --table ifi -f /byl
-- 导入租户表结构
bin/obloader -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantsixlens -p 123456 --sys-user=root --sys-password=123456 -D wo --ddl --table ifi -f /byl
-- 导出租户数据
bin/obdumper -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantcaip -p 123456 --sys-user=root --sys-password=123456 -D wo --csv --table ifi -f /byl
-- 导入租户表数据
bin/obloader -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantsixlens -p 123456 --sys-user=root --sys-password=123456 -D wo --csv --table ifi -f /byl
结构数据同时导出:
bin/obdumper -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantcaip -p 123456 --sys-user=root --sys-password=123456 -D wo --ddl --csv --all -f /byl
bin/obdumper -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantcaip -p 123456 --sys-user=root --sys-password=123456 --thread 64 --batch 50 -D wo --ddl --csv --all -f /byl
结构数据同时导入:
bin/obloader -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantsixlens -p 123456 --sys-user=root --sys-password=123456 --thread 64 --batch 100 -D wo --ddl --csv --all -f /byl
bin/obloader -h 192.168.1.1 -P 2883 -u rootcaip -c ob_cluster -t tenantsixlens -p '123456' --sys-user=root --sys-password '123456' --thread 64 --rw 0.05 -D wo --ddl --csv --all -f /byl
Note:数据量大,导入时间过长,中途会报错如 “”error:Request to read too old versioned data “” 这个报错是语句执行期间,中间发生过转储,把 session 级别变量调大可以规避:set global undo_retention=36000,表示10小时(具体可以根据实际情况来设置)、操完完毕记得恢复默认时间。
参考文献:
https://open.oceanbase.com/blog/8600171 --Oceanbase 手动部署文档
https://open.oceanbase.com/docs/tutorials/quickstart/V1.0.0/2-11-advanced-how-to-manually-deploy-an-oceanbase-cluster
https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.1/disk-planning
https://blog.csdn.net/obpilot/article/details/103296746 --扩容参考
https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.1/overview-of-physical-backup-and-recovery --物理备份