OceanBase 初探学习历程之——安装部署
一、介绍
OceanBase 数据库是一个原生的分布式关系数据库,它是完全由阿里巴巴和蚂蚁集团自主研发 的项目。OceanBase 数据库构建在通用服务器集群上,基于 Paxos 协议和分布式架构,提供 金融级高可用和线性伸缩能力,不依赖特定硬件架构,具备高可用、线性扩展、高性能、低成 本等核心技术优势。
OceanBase 数据库具有如下特点:
- 高可用 单服务器故障能够自愈,支持跨城多机房容灾,数据零丢失,可满足金融行业 6 级容灾标 准(RPO=0,RTO
- 在线性扩展 透明扩展,自动负载均衡,应用透明的水平扩展,集群规模可超过 1500 节点,数据量可达 PB 级,单表记录万亿行。
- MySQL/Oracle 高度兼容 社区版兼容 MySQL 协议、语法和使用习惯,MySQL 客户端工具可以直接访问 OceanBase 数据库。 企业版兼容 MySQL、Oracle 协议,需要使用 OceanBase 自己的驱动才可以访问 OceanB ase 数据库的 Oracle 租户。
说明:MySQL 从 5.6 开始兼容,Oracle 从 Oracle 11g 开始兼容
- 高性能 准内存级数据变更操作、独创的编码压缩技术,结合线性水平扩展,TPC-C 测试达到 7.07 亿 tpmC。
- 低成本 使用 PC 服务器和低端 SSD,高存储压缩率降低存储成本,高性能降低计算成本,多租户 充分利用系统资源。
- 多租户 原生支持多租户架构,同一套数据库集群可以为多个独立业务提供服务,租户间数据隔离, 降低部署和运维成本。
二、安装部署
2.1 安装前准备
OceanBase 数据库是一个分布式集群产品,在生产环境中至少要求三台机器,学习环境可以部 署单机版本。OceanBase 数据库的部署跟传统数据库的部署相比,存在很多共同的地方,对操 作系统硬件、软件设置、文件系统等会有一些最佳实践建议,这些是 OceanBase 数据库发挥 高性能稳定运行的基础。社区版提供了一些工具保证 OceanBase 数据库可以实现一定程度的自动化。
软件包下载地址如下:
- 官网下载:https://open.oceanbase.com/softwareCenter/community
- GitHub 下载:https://github.com/oceanbase/oceanbase/releases/
- 阿里云 Yum 源:https://mirrors.aliyun.com/oceanbase/OceanBase.repo
2.2 安装部署资源要求
OceanBase 数据库运行时会对主机资源有一些要求,主要是 CPU、内存和磁盘空间。安装 OceanBase 数据库的目的不同,对资源的要求也不同。
注意:这里性能测试环境和生产环境的资源要求只是建议。在社区版后续版本,会进一步降低对内 存的要求。
OceanBase 数据库对操作系统也有一些要求,目前仅支持以下系统:
- Redhat / CentOS 7.x/8.x
- SUSE / OpenSUSE 15.x
- Anlios 7.x/8.x
- Debian 9.x
- Ubuntu 20.x
- 当然实践其他操作系统机遇以上内核高版本也支持。
2.3 安装过程
2.3.1、时间同步
sudo yum install ntp ntpdate -y
sudo crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
2.3.2 设置limit
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
2.3.3 设置sysctl系统参数
sudo 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
# 此处为 OceanBase 数据库的 data 目录
kernel.core_pattern = /ob_data/core-%e-%p-%t
2.3.4 关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
2.3.5 创建普通用户并设置密码
sudo useradd admin
sudo passwd admin
admin
2.3.6 硬盘规划
#ods环境配置,本地环境200G
/ob_data 1.2T #数据盘
/ob_redo 200G #存放 redo 日志
/home/admin/oceanbase 500G #存放 OceanBase 数据库的二进制文件和运行日志
2.4 部署模式
2.4.1 规划
其中一台作为ODP
采用三副本部署模式,使用三台机器部署OceantBase集群
2.4.2 使用yum安装OBD
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
2.4.3 安装oblibs
sudo yum install -y oceanbase-ce-libs
2.4.4 安装obclient
sudo yum install -y libobclient
sudo yum install -y obclient
2.4.5 创建目录并赋权
sudo mkdir -p /home/admin/oceanbase /ob_redo /ob_data /ob/obproxy
sudo chown -R admin.admin /home/admin/oceanbase /ob/obproxy /ob_data /ob_redo
2.4.6 修改初始化集群文件:#在主节点上执行
obd cluster autodeploy obtest -c distributed-with-obproxy-example.yaml
下载配置文件并修改:
https://github.com/oceanbase/obdeploy/blob/master/example/autodeploy/distributed-with-obproxy-example.yaml
user:
username: admin
password: admin
oceanbase-ce:
servers:
- name: server1
ip: 172.16.79.57
- name: server2
ip: 172.16.79.58
- name: server3
ip: 172.16.79.59
global:
home_path: /home/admin/oceanbase
data_dir: /ob_data
redo_dir: /ob_redo
appname: obtest
root_password: cl8q!a#jrkYgMBHu
proxyro_password: proxy@123
server1:
zone: zone1
server2:
zone: zone2
server3:
zone: zone3
obproxy:
depends:
- oceanbase-ce
servers:
- 172.16.79.136
global:
home_path: /ob/obproxy
cluster_name: obtest
obproxy_sys_password: proxy@sys123
observer_sys_password: proxy@123
2.4.7 初始化集群并查看
obd cluster autodeploy obtest -c distributed-with-obproxy-example.yaml
obd cluster list
2.4.8 配置优化
obclient -h 172.16.79.136 -u root@sys -P 2883 -p'密码'
2.4.9 查询及参数优化
#查询系统保留内存,用于程序运行
SHOW PARAMETERS LIKE 'system_memory'\G;
#查询ob内存分配限制百分比
SHOW PARAMETERS LIKE 'memstore_limit_percentage'\G;
#查询ob预设可用最大内存
SHOW PARAMETERS LIKE 'memory_limit'\G;
#查看资源分配情况,切换到oceanbase
SELECT * FROM gv$unit\G;
#并行查询相关参数:
SHOW VARIABLES LIKE '%paral%';
#查看压缩情况:
SHOW PARAMETERS LIKE 'default_compress'\G;
#sys租户下查看资源单元配置,切换到oceanbase
SELECT * FROM __all_unit_config\G;
优化
#设置系统保留内存
ALTER system set system_memory='4G';
#修改observer可以使用最大内存
ALTER system set memory_limit='28G';
#sys租户下修改资源单元配置:cpu/内存/硬盘等根据自己实际资源调整
ALTER RESOURCE UNIT sys_unit_config MAX_CPU 1, MAX_MEMORY '2G', MAX_IOPS 10000,max_disk_size '20G', MAX_SESSION_NUM 9223372036854775807, MIN_CPU=1, MIN_MEMORY='2G', MIN_IOPS=5000;
#并行查询参数优化:
SET GLOBAL parallel_max_servers = 32;
SET GLOBAL ob_max_parallel_degree = 128;
SET GLOBAL parallel_servers_target=540;
#修改内存分配限制百分比
ALTER SYSTEM SET memstore_limit_percentage = '80';
#慢查询执行时间阈值
ALTER SYSTEM SET trace_log_slow_query_watermark = '1s';
#cpu并发调度调整
ALTER SYSTEM SET cpu_quota_concurrency = '4';
ALTER SYSTEM SET resource_soft_limit = '100';
#转储合并相关优化
ALTER SYSTEM SET minor_freeze_times = 50;
ALTER SYSTEM SET freeze_trigger_percentage = '60';
ALTER SYSTEM SET data_copy_concurrency = 100;
ALTER SYSTEM SET server_data_copy_out_concurrency = 10;
ALTER SYSTEM SET server_data_copy_in_concurrency = 10;
ALTER SYSTEM SET minor_warm_up_duration_time = '0s';
ALTER SYSTEM SET memory_chunk_cache_size = 0;
ALTER SYSTEM SET max_kept_major_version_number = '1';
#事务相关优化
ALTER SYSTEM SET clog_sync_time_warn_threshold = '1s';
ALTER SYSTEM SET enable_one_phase_commit='False';
#分区迁移速度控制
ALTER SYSTEM SET data_copy_concurrency=40;
ALTER SYSTEM SET server_data_copy_out_concurrency=20;
ALTER SYSTEM SET server_data_copy_in_concurrency=20;
#缓存刷新
ALTER SYSTEM SET autoinc_cache_refresh_interval = '43200s';
#系统相关,observer异常临时下线时间
ALTER SYSTEM SET server_permanent_offline_time = '7200s';
#关闭回收站以及truncate回滚参数
SET GLOBAL recyclebin = 0;
SET GLOBAL ob_enable_truncate_flashback = 0;
#设置ob查询超时时间:默认10s
set global ob_query_timeout = 20000000;
#请求锁等待时间:为-1与ob查询超时时间相同
SHOW VARIABLES LIKE 'ob_trx_lock_timeout';
#事物超时时间:默认100s,保持默认
SHOW VARIABLES LIKE 'ob_trx_timeout';
#事物空闲超时时间:默认120s,保持默认
SHOW VARIABLES LIKE 'ob_trx_idle_timeout';
#设置查询时间阈值
ALTER SYSTEM SET large_query_threshold = '10s';
#设置弱一致性读版本号的刷新周期,表示不再刷新弱一致性读版本号,不提供单调读功能
ALTER SYSTEM SET weak_read_version_refresh_interval = '0';
#设置系统日志所能占用的磁盘 IO 带宽上限,超过丢掉
ALTER SYSTEM SET syslog_io_bandwidth_limit = "10m";
#设置系统日志级别
ALTER SYSTEM SET syslog_level = "PERF";
#用于设置每日合并工作的线程数
ALTER SYSTEM SET merge_thread_count = "64";
#用于设置数据坏块自检周期,为0表示不检测
ALTER SYSTEM SET builtin_db_data_verify_cycle = "0";
#设置合并时候数据列统计信息的采样率
ALTER SYSTEM SET merge_stat_sampling_ratio = "1";
#设置合并时宏块的校验级别,0表示不校验
ALTER SYSTEM SET micro_block_merge_verify_level = "0";
#设置触发全局冻结的租户使用内存阈值
ALTER SYSTEM SET freeze_trigger_percentage = "50";
#设置小合并时的并发线程数,期望提高转储的速度
ALTER SYSTEM SET minor_merge_concurrency = 32;
#增大 mini_merge 的线程数,期望提高 mini_merge 的速度(默认值为 3)。调大为 8 以后,发现会导致压测中 CPU 使用率有时飙升至 90%,对性能有影响。
ALTER SYSTEM SET _mini_merge_concurrency = 8;
#OceanBase 占系统总内存的比例,提高 OceanBase 可用的内存量
ALTER SYSTEM SET memory_limit_percentage = 90;
#obproxy优化
#判断是否开启 PL 路由
SHOW PROXYCONFIG LIKE 'enable_partition_table_route';
ALTER PROXYCONFIG SET enable_partition_table_route = False;
#判断是否开启 partition table 路由
SHOW PROXYCONFIG LIKE 'enable_pl_route';
ALTER PROXYCONFIG SET enable_pl_route = False;
#OBProxy 所能接受的客户端最大连接数
SHOW PROXYCONFIG LIKE 'client_max_connections';
ALTER PROXYCONFIG SET client_max_connections = 20000;
2.4.10 创建使用租户
创建资源单元:unit1
CREATE RESOURCE UNIT unit1 MAX_CPU 8, MAX_MEMORY '12G', MAX_IOPS 10000,max_disk_size '80G', MAX_SESSION_NUM 9223372036854775807, MIN_CPU=6, MIN_MEMORY='12G', MIN_IOPS=5000; #查看资源单元 SELECT * FROM oceanbase.__all_unit_config;
创建资源池:
CREATE RESOURCE POOL pool1 UNIT='unit1',UNIT_NUM=1,ZONE_LIST=('zone1','zone2','zone3');
#查询资源池
select * from __all_resource_pool\G;
创建租户:
CREATE TENANT IF NOT EXISTS test charset='utf8mb4', replica_num=3, zone_list=('zone1','zone2','zone3'), primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1');
#查询租户:
SELECT * FROM oceanbase.gv$tenant;
授权:
ALTER TENANT test SET VARIABLES ob_tcp_invited_nodes='%';
在test租户下,使用root登录,初始化的oceanbase的root密码为空:
obclient -h 172.16.79.136 -u root@test -P 2883 -p
#修改密码:
ALTER USER root IDENTIFIED BY '密码';
在test租户下创建用户并授权:
create user if not exists test@'%' identified by 'test';
grant all on *.* to test@'%';
使用test用户登录:
obclient -h 192.168.10.10 -P2883 -utest@test -ptest
到此位置基本完成基础安装部署,后续需要安装部署ocp监控 进行集群查看及监控,后续继续分享。