部署Oceanbase

一、简介

OceanBase 数据库是一个金融级分布式关系数据库,提供社区版和企业版

二、特性

  • 高性能:存储采用读写分离架构,计算引擎全链路性能优化,准内存数据库性能。
  • 低成本:使用PC服务器和低端SSD,高存储压缩率降低存储成本,高性能降低计算成本,多租户混部充分利用系统资源。
  • 高可用:数据采用多副本存储,少数副本故障不影响数据可用性,通过“三地五中心”部署实现城市级故障自动无损容灾。
  • 强一致:数据多副本通过paxos协议同步事务日志,多数派成功事务才能提交,缺省情况下读写操作都在主副本进行,保证强一致性。
  • 可扩展:集群节点全对等,每个节点都具备计算和存储能力,无单点瓶颈。可线性、在线扩展和收缩。
  • 兼容性:兼容常用的MySQL、Oracle以及MySQL、Oracle前后台协议,业务零修改或少量修改即可从MySQL、Oracle迁移至OceanBase.

三、Oceanbase部署准备工作

1、时间同步

sudo yum install ntp ntpdate -y
sudo crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com

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

查看:

ulimit -a

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

生效配置:

sysctl -p

4、关闭防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

5、创建普通用户并设置密码

sudo useradd admin
sudo passwd admin
admin

6、硬盘规划

#ods环境配置,本地环境200G
/ob_data    1.2T                 #数据盘
/ob_redo    200G                 #存放 redo 日志
/home/admin/oceanbase    500G    #存放 OceanBase 数据库的二进制文件和运行日志

四、部署Oceanbase

1、部署模式

其中一台作为ODP
采用三副本部署模式,使用三台机器部署OceantBase集群

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

3、安装oblibs

sudo yum install -y oceanbase-ce-libs

4、安装obclient

sudo yum install -y libobclient
sudo yum install -y obclient

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

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

7、初始化集群并查看

obd cluster autodeploy obtest -c distributed-with-obproxy-example.yaml 
obd cluster list

注:如有报错,请按相关报错进行处理

8、配置优化

链接ob:

obclient -h 172.16.79.136 -u root@sys -P 2883 -p'cl8q!a#jrkYgMBHu'

相关查询操作:

#查询系统保留内存,用于程序运行
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;

9、创建使用租户

创建资源单元: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 'cl8q!a#jrkYgMBHu';

在test租户下创建用户并授权

create user if not exists test@'%' identified by 'test';
grant all on *.* to test@'%';

使用test用户登录

obclient -h 172.16.79.136 -P2883 -utest@test -ptest

查看资源分配:

SELECT * FROM gv$unit\G;
#备注,查询资源使用情况,使用root登录到sys,切换到oceanbase库
select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, (cpu_total-cpu_assigned) cpu_free, round(mem_total/1024/1024/1024) mem_total_gb, round((mem_total-mem_assigned)/1024/1024/1024) mem_free_gb, usec_to_time(b.last_offline_time) last_offline_time, usec_to_time(b.start_service_time) start_service_time, b.status, b.build_version , usec_to_time(a.stop_time) stop_time from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port) order by a.zone, a.svr_ip \G;

10、安装ocp监控

创建ocp到资源配置:ocp_unit_config

CREATE RESOURCE UNIT ocp_unit_config MAX_CPU 2, MAX_MEMORY '2G', MAX_IOPS 10000,max_disk_size '20G', MAX_SESSION_NUM 9223372036854775807, MIN_CPU=1, MIN_MEMORY='2G', MIN_IOPS=5000;

创建ocp资源池:ocp_pool

create resource pool ocp_pool unit='ocp_unit_config', zone_list=('zone1','zone2','zone3'), unit_num=1;

创建租户:

create tenant ocp_meta resource_pool_list = ('ocp_pool');

创建ocp资源池:ocp__monitor_pool

create resource pool ocp__monitor_pool unit='ocp_unit_config', zone_list=('zone1','zone2','zone3'), unit_num=1;

创建租户:

create tenant ocp_monitor resource_pool_list = ('ocp__monitor_pool');

授权:

ALTER TENANT ocp_monitor SET VARIABLES ob_tcp_invited_nodes='%';
ALTER TENANT ocp_meta SET VARIABLES ob_tcp_invited_nodes='%';

登录ocp_meta租户并创建用户和数据库:

obclient -h 172.16.79.136 -u root@ocp_meta -P 2883
create user ocp identified by 'ocp@123';
grant all on *.* to ocp;
CREATE DATABASE metadb DEFAULT CHARACTER SET UTF8;

登录ocp_monitor租户并创建用户和数据库:

obclient -h 172.16.79.136 -u root@ocp_monitor -P 2883
create user ocp identified by 'ocp@123';
grant all on *.* to ocp;
CREATE DATABASE monitordb DEFAULT CHARACTER SET UTF8;

ocp所在节点安装docker:

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
yum -y install docker-ce
systemctl start docker

获取安装包:

https://open.oceanbase.com/softwareCenter/community
tar xzvf ocp-3.1.1-ce-bp1.tar.gz

生成配置文件:

cd ocp-ce-3.1.1-bp1/
chmod +x ocp_installer.sh
./ocp_installer.sh genconf -c ocp.yaml

配置文件如下:

grep -Ev "^$|^#" ocp.yaml 
OCP_IP_ARRAY=(172.16.79.136)
SSH_USER=root    # if not root, make sure remote user can use sudo without password    admin   ALL=(ALL)   NOPASSWD:ALL
SSH_PORT=22
SSH_AUTH=password    # can be password or pubkey
SSH_PASSWORD='shuinfo@123'     # password for passowrd auth, when use pubkey auth, is passphrase
OCP_METADB_HOST=172.16.79.57
OCP_METADB_PORT=2881
OCP_METADB_USER=ocp@ocp_meta
OCP_METADB_PASSWORD='ocp@123'   # password may contains special char, make sure correctly quote
OCP_METADB_DBNAME=metadb
OCP_MONITORDB_USER=ocp@ocp_monitor
OCP_MONITORDB_PASSWORD='ocp@123'    # password may contains special char, make sure correctly quote
OCP_MONITORDB_DBNAME=monitordb
OCP_WEB_PORT=8080
OCP_LB_VIP=       # HA OCP VIP
OCP_LB_VPORT=     # HA OCP VPORT
OCP_IMAGE=/root/ocp-ce-3.1.1-bp1/ocp.tar.gz  # absoulute path of ocp image file
OCP_CPU=4
OCP_MEMORY=8G
OCP_LOG_DIR=/data/ocp_logs

#备注:以上链接信息与上面创建的数据库用户名密码保持一致

执行安装ocp:

./ocp_installer.sh install -c ocp.yaml

#确保执行完成不报错

访问并接入ob集群:

http://172.16.79.136:8080/login
默认用户名密码: admin   root

备注:需要将ocp节点的root公钥放到各个ob节点上

等待任务执行完成。

点进去即可查看相关资源信息。


【完成】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值