OceanBase(1)OceanBase介绍与安装部署教程

tanglu 929 2022-05-07

一、OceanBase简介

OceanBase是一种原生的分布式数据库,阿里旗下很多服务都是运行于OceanBase上,比如淘宝、支付宝、天猫、花呗等,后来随着发展又有工商银行、中国移动、招商证券等金融机构开始使用OceanBase。OceanBase有以下核心特性

· 分布式:集群形式部署,支持水平扩展,在线扩容缩容方便,能自动负载均衡

· 高可用:基于Paxos协议做到数据强一致性,即便少数副本故障也不会丢失数据,服务自动恢复(RPO=0;RTO<30S)

· 多租户:按需分配实例(集群创建好了后通过命令来创建业务实例),可以对配置在线调整,CPU和内存资源可以相互隔离

· 高兼容:原生的SQL和事务引擎,兼容MySQL、Oracle(社区版暂不支持Oracle的兼容),数据可以平滑迁移

· 高性能:在真实业务系统下单表最大3200亿行,QPS 6100万次,准内存处理性能

· 低成本:X86服务器,不依赖存储设备


OceanBase可以解决MySQL集群以下痛点

ob1.png


二、OceanBase社区版安装部署教程

1、OceanBase软件包介绍

oceanbase-ce(必需):OceanBase社区版核心程序

oceanbase-ce-libs(必需):OceanBase社区版库文件

ob-deploy:自动化部署工具

obproxy:OceanBase反向代理工具,当集群数量较多时建议使用

ob2.png


2、下载OceanBase软件包

可通过以下3种方式获取OceanBase安装包

· 官方下载:https://open.oceanbase.com/softwareCenter/community

· Github下载:https://github.com/oceanbase/oceanbase/releases

· 阿里云Yum:https://mirrors.aliyun.com/oceanbase/OceanBase.repo


3、手动部署OceanBase三副本集群(以下操作每个节点都需要执行)

· 建立admin用户并配置sudo权限

useradd admin
usermod admin -G wheel


· 下载RPM包进行安装,RPM 包将被自动安装在/home/admin/oceanbase

wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-3.1.1-4.el7.x86_64.rpm
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-libs-3.1.1-4.el7.x86_64.rpm
rpm -ivh oceanbase-ce-*

obtree.png


· 切换admin用户,为OB建立对应的数据目录(和使用 OBD 自动化部署不同的是这里创建了一个obdemo的目录作为集群名标识)。其中store作为数据文件目录包含了 clog、ilog、slog、sstable 4个子目录。clog、ilog、slog 是事务日志目录,slog 存储静态数据写入的事务日志,clog 存储动态数据写入的事务日志,ilog 存储日志目录。sstable 是磁盘上的静态数据目录,sstable 目录下会有一个 block_file,这个文件在 observer 启动后就会被创建,文件的大小由 datafile_size 或 datafile_disk_percentage 控制。

su - admin
sudo chown admin:admin /home/admin/oceanbase/

#创建总目录
mkdir -p /home/admin/oceanbase/store/obdemo  

#创建数据文件目录
mkdir -p /data/obdemo/{sstable,etc3} 

#创建日志目录
mkdir -p /redo/obdemo/{clog,ilog,slog,etc2}

#通过软连接进行目录关联,尽量分配独立磁盘给/data分区和/redo分区
sudo chown -R admin:admin /home/admin/oceanbase/

for f in {clog,ilog,slog,etc2}; 
do
 ln -s /redo/obdemo/$f /home/admin/oceanbase/store/obdemo/$f
done

for f in {sstable,etc3}; 
do
 ln -s /data/obdemo/$f /home/admin/oceanbase/store/obdemo/$f
done


sudo chown -R admin. /data/obdemo
sudo chown -R admin. /redo/obdemo


· 最终目录结构如下

obtree2png.png

ob_tree.png


· 启动服务(如果节点之间配置一致,启动参数里只有 -z 参数不同)

-z 选项:声明节点所属的zone,三个 zone 的三个节点就可以初始化为一个三副本集群,需要注意对应关系一定要正确

-o 选项:内存相关配置,需要注意系统可用内存不要低于memory_limit 值。如果节点内存大于64G可以不用额外声明 -o。其中datafile_size用于设置数据文件(block_file)的大小;system_memory用于设置系统预留的内存容量;memory_limit用于设置进程使用的最大内存,0为不限制;__min_full_resource_pool_memory用于设置创建租户时的最小内存规格

-d 选项:数据存放目录

-r 选项:节点信息

-c 选项:集群标识号,节点之间配置一个相同的号码,必须是数字格式

su - admin
sudo chown -R admin. /home/admin
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/admin/oceanbase/lib' >> /home/admin/.bash_profile
. /home/admin/.bash_profile

/home/admin/oceanbase/bin/observer -i eth0 -p 2881 -P 2882 -z zone1 -d /home/admin/oceanbase/store/obdemo -r '172.20.1.212:2882:2881;172.20.1.213:2882:2881;172.20.1.214:2882:2881' -c 20220518 -n obdemo -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=3G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=4,datafile_size=50G,stack_size=1536K,config_additional_dir=/data/obdemo/etc3;/redo/obdemo/etc2"
/home/admin/oceanbase/bin/observer -i eth0 -p 2881 -P 2882 -z zone2 -d /home/admin/oceanbase/store/obdemo -r '172.20.1.212:2882:2881;172.20.1.213:2882:2881;172.20.1.214:2882:2881' -c 20220518 -n obdemo -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=3G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=4,datafile_size=50G,stack_size=1536K,config_additional_dir=/data/obdemo/etc3;/redo/obdemo/etc2"
/home/admin/oceanbase/bin/observer -i eth0 -p 2881 -P 2882 -z zone3 -d /home/admin/oceanbase/store/obdemo -r '172.20.1.212:2882:2881;172.20.1.213:2882:2881;172.20.1.214:2882:2881' -c 20220518 -n obdemo -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=3G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=4,datafile_size=50G,stack_size=1536K,config_additional_dir=/data/obdemo/etc3;/redo/obdemo/etc2"


· 初始化集群

当 OceanBase 集群三个节点都正常启动后就可以通过2881端口连接到任一节点进行bootstrap集群初始化操作,如果初始化失败的话需要排查上一步初始化时-o所配置的参数,比如内存是否不足、cpu是否配置不够等都会导致初始化集群失败

mysql -h 172.20.1.212 -u root -P 2881 -p -c -A
set session ob_query_timeout=1000000000;alter system bootstrap ZONE 'zone1' SERVER '172.20.1.212:2882', ZONE 'zone2' SERVER '172.20.1.213:2882', ZONE 'zone3' SERVER '172.20.1.214:2882' ;
#大概需要30秒左右


· 集群创建完成后会默认生成一个sys租户,在该租户下有一个默认的root用户(每个租户创建后都会有一个root账号),这里需要先修改root的密码(OBProxy用户密码也可以同时修改,这里非必须),直连observer时用户名格式为user_name@tenant_name,比如root@sys

mysql -h 172.20.1.212 -u root@sys -P 2881 -p -c -A
alter user root identified by '123456' ;

#下面的操作可以先不做,等需要进行obpxory的时候再操作,可以看后面的相关文章
#create user proxyro;       # OBProxy默认使用proxyro用户去连接集群,该用户需要手动创建
#grant select on oceanbase.* to proxyro identified by '123456' ;


4、OceanBase日志文件(/home/admin/oceanbase/log)

observer.log:observer运行时的日志文件

rootservice.log:observer上的RootServer日志

election.log:选举模块日志

为了避免硬盘被日志填满,建议开启日志循环,并且调整日志级别

enable_syslog_recycle=True;
max_syslog_file_count=<count>;
syslog_level=[DEBUG,TRACE,INFO,WARN,USER_ERR,ERROR];  #默认为INFO


版权声明
本站所有文章均为原创,转载请注明出处!小站维护不易,如果对您有所帮助,希望能点击一下站内广告,谢谢!
上一篇:【MySQL运维】如何对大表进行优化的思路
下一篇:【系统运维】文本流编辑器工具sed命令使用教程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

微信二维码