生产环境我们还是建议使用标准化的配置来做部署,来尽可能地保证性能和稳定性。比如下面提到的服务初始化、日志和数据分盘等等。如果是非生产环境,并且条件满足,我们也建议规范部署。
前期准备
资源规划
评估方式一:POC
1、强烈建议POC,通过POC可以确认对应业务数据大致的压缩率、业务负载以及业务满足情况。
2、根据业务数据的压缩率以及性能情况评估所需要的机器数量。
评估方式二:高可用
1、是否有做两地三中心或者三地五中心的需求,如果有的话,那么需要对应的副本数量。
2、是否有做混合云的需求,专线&带宽需要提前准备。
3、业务是否重要性不高,不关注高可用性,是否准备单副本部署(线上环境不推荐,不能保证高可用)。
4、是否有异地灾备的需求,两地网络延迟比较高。这种可以使用主备库,多副本集群->多副本集群、多副本集群->单副本集群、单副本集群->单副本集群。
评估方式三:业务后续增长
1、后续请求量、数据量评估,需要预留机器资源,或者后续扩容也可以。
评估方式四:周边工具
1、确认需要安装的工具,比如OCP(管理平台)、OMS(迁移平台)、ODC(开发平台)。
2、多个工具的集群是否放在一起,单机部署 or 集群(三副本)部署。
3、工具服务是否单独部署。
服务器配置
重要的事情写在前面:
一、磁盘
1、要求至少SSD,不建议使用机械硬盘。
2、如果是NVME,并且是多块,不建议单机多实例部署,建议LVM进行磁盘管理。
这里碰到很多用户疑问:如果一块磁盘坏了,是不是这个实例就有问题了,答案是是的。那么为什么不每个实例占用一块盘来避免这个问题呢?咱们考虑这个一个问题,如果是LVM,坏了一块盘,本身OB是有高可用能力的,可以自动切走保证业务正常,之后修复完加入进来就好了,即便数据清空了,OB也会自动补数据的;但是如果单机多实例,如果一台机器挂了,那上面的所有实例就都不可用了,这个维护成本就会非常的高。
3、强烈建议分盘,也就是clog盘和数据盘,因为clog也会占用IO,尤其是写请求量比较高的时候。避免相互影响,强烈建议分盘。
4、clog盘存储空间大小至少是分配给observer内存的三倍以上;数据盘大小根据业务量来分配。后面创建租户也按照这个规则来,比如给租户内存100g,那么日志盘至少给他300g。
二、网卡
线上业务建议万兆网卡
以下为官网推荐软硬件配置:
项目 | 描述 |
服务器 | 支持主流服务器和国产化适配软硬件已适配基于硬件整机中科可控 H620 系列、华为 TaiShan 200 系列、长城擎天 DF720 等整机。已适配支持海光 7185/7280、鲲鹏 920、飞腾 2000+ 等 CPU。已适配支持麒麟 V4、V10 和 UOS V20 等国产操作系统,并适配上层中间件东方通 TongWeb V7.0、金蝶 Apusic 应用服务器软件 V9.0 等 |
系统 | Alibaba Cloud Linux 2/3 版本(内核 Linux 3.10.0 版本及以上)Anolis OS 8.X 版本(内核 Linux 3.10.0 版本及以上)Red Hat Enterprise Linux Server 7.X 版本、8.X 版本(内核 Linux 3.10.0 版本及以上)CentOS Linux 7.X 版本、8.X 版本(内核 Linux 3.10.0 版本及以上)Debian 9.X 版本及以上版本(内核 Linux 3.10.0 版本及以上)Ubuntu 16.X 版本及以上版本(内核 Linux 3.10.0 版本及以上)SUSE / OpenSUSE 15.X 版本及以上版本(内核 Linux 3.10.0 版本及以上)KylinOS V10 版本统信 UOS V20 版本中科方德 NFSChina 4.0 版本及以上浪潮 Inspur kos 5.8 版本 |
物理 CPU | 生产环境最低要求 4 核,推荐 32 核及以上。 |
内存 | 生产环境最低要求 16 GB,长期使用要求不低于 32 GB,推荐设置在 256 GB 至 1024 GB 范围内。 |
磁盘类型 | SSD、NVME。 |
磁盘存储空间 | 日志盘建议OB内存的三倍以上,数据库根据业务存量+增量数据来确认。 |
文件系统 | EXT4 戓 XFS,当数据超过 16TB 时,使用 XFS |
网卡 | 建议万兆及以上 |
集群部署架构规划
我们建议的连接方式是应用连接obproxy(ODP),然后obproxy解析请求并且路由转发到合适的OBServer内执行。
在这个基础上,推荐在obproxy上面增加一层负载均衡器(LB),像SLB、F5等,也可以通过OCP上面的LB来做。
obproxy的部署常见有几种方式:
1、部署在OBServer端,如果每个zone有多个observer,那么可以每个zone部署1-2个obproxy节点,不需要每个observer的机器上面都1:1部署。
2、独立部署,专门为obproxy找机器来部署
3、sidecar的方式,跟应用容器部署在一起。
服务器初始化
强烈建议对新交付的服务器进行初始化操作,比如OS的内核参数、系统变量等。系统参数不调整,很容易为后面使用带来隐患,到时候再调整就比较麻烦了。
有两种方法:
1、手动/脚本化操作,推荐的配置可以参考官网:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000220856
2、如果使用的OCP部署,那么添加主机以后,会自动检测这些参数是否调整,然后可以通过平台一键初始化(标准化)。详情可以参见官网:
https://www.oceanbase.com/docs/common-ocp-1000000000584697
安装部署
安装OB集群,现在主要推荐以下两种方式:
1、优先推荐OCP部署,OCP是运维管控平台,可以在平台上直接管理OB集群,包括监控告警、运维操作等。
部署OCP:
https://www.oceanbase.com/docs/common-ocp-1000000000584989
OCP 创建集群:
https://www.oceanbase.com/docs/common-ocp-1000000000584993
2、OBD部署,OBD是安装部署工具,可以提供快速的安装能力,并且不占用资源,但是不提供管理能力。
https://www.oceanbase.com/docs/community-obd-cn-1000000000519108
需要注意:
1、OCP 的metadb和monitordb所在的集群一定是ocp独立的集群,不要跟业务集群混部。因为OCP需要周期性的获取大量的监控信息,会占用大量的资源。
2、OCP和OBD一定不要混着用,这里的混着用是指有时候用OBD重启,有时候用OCP重启。对于通过OBD部署然后OCP接管维护的集群,后续操作都使用OCP操作就好。
3、OBD 启动集群默认情况下是会指定配置文件中的参数的,如果使用的过程中修改过OB集群的参数,那么不会自动同步到OBD的配置文件中。所以这种情况要么手动同步配置到OBD的配置文件,要不OBD启动的时候指定 --wop来无参启动,要么使用OCP或者命令行手动启动。
4、Zone 的数量决定了集群内副本的最大数据,比如现在zone1、zone2、zone3,那么底层的分片数量就可以是三副本,可以保证高可用性。如果所有机器放到了一个zone下,那么分片只有单副本,不能保证高可用。
5、并不是说机器有多少资源,OBServer就能用多少的,而是要看分配给OBServer多少资源,资源参数可参考下面。
安装过程中注意事项:
1、提前创建OB部署用户,推荐admin用户。
2、提前创建目录并且授权。
3、部署的时候是可以指定参数的,默认情况下不需要额外做调优,但是资源占用需要了解一下,尤其是OB磁盘是预占用的,默认情况可能会预占用90% 左右的磁盘空间,很可能触发服务器使用率告警。这个时候就需要根据实际的情况来判断是否自定义资源。
常用资源参数简介及计算方式
参数 | 解释 | 特性 | 小课堂 | |
CPU资源参数 | cpu_count | OB可使用的CPU核数,参数为数值,例如:16,设置为0,系统自动检测并设置 | 不支持动态调整 | 修改该参数需要重启集群才能生效 |
内存资源参数 | memory_limit | OB可使用的内存大小,参数需要带单位,例如:32G | 支持动态调整 | 1. memory_limit没有上限边界,建议按实际内存free -m信息中的free列剩余大小进行规划设置。2. 支持动态增大和缩小,但不能比已分配出去的内存还小。3. memory_limit优先级大于memory_limit_percentage,即同时设置,以memory_limit生效。 |
内存资源参数 | memory_limit_percentage | OB可用内存占总内存的百分比,参数为数值,例如:80(表示80%) | 支持动态调整 | |
内存资源参数 | system_memory | OB的500租户的内存,即OB系统内部运行内存,参数需要带单位,例如:30G | 支持动态调整 | 1. system_memory取值计算方式:– 16G<=memory_limit <=32G,system_memory=3-5G– 32G<=memory_limit <=64G,system_memory=5-10G– memory_limit >64G,system_memory=取整数部分(3 *(memory_limit的平方根-3G))2. system_memory和sys租户没关系,sys租户是OB部署完成由系统自建的自适应资源租户,租户ID为1,而system_memory对应的租户ID为500。 |
磁盘资源参数 | datafile_size | OB数据目录预占用大小,参数需要带单位,例如:32G | 预占用,不支持调小 | 1. 预占用会提前申请磁盘空间,部署完成查看磁盘使用很大,属于正常现象。2. datafile_size优先级大于datafile_disk_percentage。 |
磁盘资源参数 | datafile_disk_percentage | OB数据目录预占用目录百分比,参数为数值,例如:80(表示80%) | 预占用,不支持调小 | |
磁盘资源参数 | log_disk_size | OB日志数据目录预占用大小,参数需要带单位,例如:32G | 预占用,支持动态调整 | 1. log_disk_size取值计算方式:log_disk_size>=memory_limit * 32. 预占用会提前申请磁盘空间,部署完成查看磁盘使用很大,属于正常现象。3. log_disk_size优先级大log_disk_percentage。 |
磁盘资源参数 | log_disk_percentage | OB数据目录预占用目录百分比,参数为数值,例如:80(表示80%) | 预占用 支持动态调整 | |
系统日志参数 | enable_syslog_recycle | 是否开启OB系统日志回收,建议开启 | 需要和max_syslog_file_count参数搭配使用 | |
系统日志参数 | max_syslog_file_count | 在回收OB系统日志文件之前最大保留OB系统日志个数 | 需要和enable_syslog_recycle参数搭配使用 | 单个系统日志256M,建议生产环境按需要日志保留天数需要,来设置系统日志个数。注意:OB系统日志打印较大较频繁,需要关注设置个数和磁盘大小关系,防止磁盘被占满。 |
集群使用
集群创建完成后,就可以创建业务租户并且使用了。
一定不要用 sys 租户来承载业务,因为 sys 租户要处理很多内部任务,会占用资源,影响集群以及业务使用。
创建租户
方法一:OCP 创建
https://www.oceanbase.com/docs/common-ocp-1000000000584674
1、确认可分配资源
具体可以分配多少内存,可以通过【资源管理】查看各节点的剩余资源
2、新建租户
3、填写租户信息
zone 优先级主要是 primary_zone 设置 leader优先级,如果优先级全部相同,那么 leader 会打散到所有节点上。
方法二:手动创建
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218355
1、确认可分配资源
新租户可以分配的内存大小为 memory_limit - system_memory - sys 租户内存,CPU 数量为 cpu_count - sys 租户 cpu。
# 查询参数
show parameters where name in ('memory_limit','system_memory','cpu_count');
# 查询 sys 租户资源
select * from DBA_OB_UNIT_CONFIGS;
2、创建租户
# 创建资源规格,5C14G,日志40G,IOPS 10000000。
create resource unit unit_1 max_cpu 5, min_cpu 5, memory_size '15G', log_disk_size '50G', max_iops 10000000;
# 创建资源池,指定 资源规格以及 zone_list。
create resource pool pool_1 unit = 'unit_1', unit_num = 1, zone_list = ('zone1','zone2','zone3');
# 创建租户,指定副本数量3,primary_zone,以及资源池和白名单。
create tenant perf replica_num = 3,primary_zone='RANDOM', resource_pool_list=('pool_1') set ob_tcp_invited_nodes='%';
3、修改 root 用户密码
创建完租户,默认的 root 密码为空,如果需要可以修改密码。
# 租户的 root 用户登陆后执行修改 sql
set password for root=password('xxx');
连接数据库
主要有两种连接方式:
1、通过 OBServer 直连(默认端口 2881)
mysql -h xxx.xxx.xxx.xxx -uroot@sys -P2881 -p -c -A oceanbase
2、通过 OBProxy 连接(默认端口2883)
mysql -h xxx.xxx.xxx.xxx -uroot@sys#obdemo -P2883 -p -c -A oceanbase
使用 OBProxy 连接时,用户信息需要包括【用户名@租户名#集群名】;如果是 OBServer 连接,那么只需要包括【用户名@租户名】。
应用连接建议:
jdbc 版本建议5.1.47 或者8.0.25以下
有兴趣的朋友,可以关注下微信公众号,会同步更新内容的。