离线使用OBD本地部署单副本单节点社区版OceanBase
一:检查软硬件的要求
软件资源介绍:
OceanBase 数据库是一个分布式集群产品,在生产环境中至少要求三台机器,学习环境可以部署单机版本。下表列出了不同操作系统版本适用的安装包:
操作系统 | 安装包下载地址 |
Anlios 7、CentOS 7、RedHat 7、Ubuntu 20.X、Debian 9.X | |
Anlios 8、CentOS 8、RedHat 8、Debian 10 | https://mirrors.aliyun.com/oceanbase/community/stable/el/8/x86_64/ |
硬件资源准备:
项目 | 描述 |
系统 | 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 版本及以上) – 推荐 |
CPU | 企业用户最低要求 16 核,推荐 32 核及以上 个人用户最低要求 2 核,推荐 8 核及以上 性能测试场景推荐 24 核及以上 生产环境推荐 32 核及以上 |
内存 | 企业用户最低要求 64G,推荐 256G 及以上 个人用户简单试用最低要求 8G,长期使用要求不低于 32G,推荐 64G 及以上 内存低于 64G 建议使用 OBD 部署集群,不建议使用 OCP 部署小规格集群 性能测试场景推荐128G 及以上 生产环境推荐256G 及以上 |
磁盘类型 | 推荐使用 SSD |
磁盘存储空间 | 内存大小的 4 倍及以上 |
文件系统 | EXT4 戓 XFS,当数据超过 16T 时,使用 XFS |
网卡 | 千兆互联及以上 |
二:环境和配置检查
部署 OceanBase 集群前,您需要进行系统环境和配置检查。
查看资源:
如果您是企业用户,建议您在部署 OceanBase 集群时,所有的机器使用相同的软硬件配置。如果您部署的是集群版 OceanBase 数据库,可去官网查看相关环境配置检验。OceanBase 数据库支持 Red Hat Enterprise Linux Server 7.X、CentOS 7.X 和 Anolis OS 8.X 等操作系统。
三:获取安装包并进行安装
下载地址:https://open.oceanbase.com/softwareCenter/community
- 部署单机单节点只需要以下三个包:ob-deploy-1.2.1-9.el7.x86_64.rpm,oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm,oceanbase-ce-3.1.2-10000392021123010.el7.x86_64.rpm(说明:版本号可根据自己需要下载)
- 安装obd:
rpm -ivh ob-deploy-1.2.1-9.el7.x86_64.rpm
- 设置环境变量:
source /etc/profile.d/obd.sh
- 构建本地源 :
obd mirror clone /home/frank/rpm/*.rpm
- 删除远程源:
rm -rf ~/.obd/mirror/remote/
- 查看本地源
obd mirror list local
- 创建
mini-local-example.yaml
配置文件,获取方式:https://github.com/oceanbase/obdeploy/blob/master/example/mini-local-example.yaml
内容如下:
oceanbase-ce:
servers:
# Please don't use hostname, only IP can be supported
- 127.0.0.1
global:
# The working directory for OceanBase Database. OceanBase Database is started under this directory. This is a required field.
home_path: /root/observer
# The directory for data storage. The default value is $home_path/store.
# data_dir: /data
# The directory for clog, ilog, and slog. The default value is the same as the data_dir value.
# redo_dir: /redo
# Please set devname as the network adaptor's name whose ip is in the setting of severs.
# if set severs as "127.0.0.1", please set devname as "lo"
# if current ip is 192.168.1.10, and the ip's network adaptor's name is "eth0", please use "eth0"
devname: lo
mysql_port: 2881 # External port for OceanBase Database. The default value is 2881. DO NOT change this value after the cluster is started.
rpc_port: 2882 # Internal port for OceanBase Database. The default value is 2882. DO NOT change this value after the cluster is started.
zone: zone1
cluster_id: 1
# please set memory limit to a suitable value which is matching resource.
memory_limit: 8G # The maximum running memory for an observer
system_memory: 4G # The reserved system memory. system_memory is reserved for general tenants. The default value is 30G.
stack_size: 512K
cpu_count: 16
cache_wash_threshold: 1G
__min_full_resource_pool_memory: 268435456
workers_per_cpu_quota: 10
schema_history_expire_time: 1d
# The value of net_thread_count had better be same as cpu's core number.
net_thread_count: 4
sys_bkgd_migration_retry_num: 3
minor_freeze_times: 10
enable_separate_sys_clog: 0
enable_merge_by_turn: FALSE
datafile_disk_percentage: 20 # The percentage of the data_dir space to the total disk space. This value takes effect only when datafile_size is 0. The default value is 90.
syslog_level: INFO # System log level. The default value is INFO.
enable_syslog_wf: false # Print system logs whose levels are higher than WARNING to a separate log file. The default value is true.
enable_syslog_recycle: true # Enable auto system log recycling or not. The default value is false.
max_syslog_file_count: 4 # The maximum number of reserved log files before enabling auto recycling. The default value is 0.
# root_password: # root user password, can be empty
注意事项:
- servers:只能使用ip,不能使用主机名(hostname)
- cpu_count:CPU数量可以大于物理CPU的数量。
-
home_path
是 OceanBase 数据库的工作目录,OceanBase 数据库在此目录下启动,您需提前创建。
8.部署observer
obd cluster deploy myob -c mini-local-example.yaml
9.查看部署结果
obd cluster display myob
obd cluster list
10.参数设置(此步骤可省略,yum配置文件已加载)
echo fs.aio-max-nr = 131072 >> /etc/sysctl.conf
sysctl -p
ulimit -n
ulimit -n 65535
ulimit -n
10.启动集群
obd cluster start myob
11.连接数据库:
安装:obclient连接工具(注意:需安装依赖libobclient)
安装libobclient:
sudo rpm -ivh libobclient-2.0.0-2.el7.x86_64.rpm;
安装obclient :
sudo rpm -ivh obclient-2.0.0-2.el7.x86_64.rpm;
12.使用系统用户命令进行连接:
obclient -h127.0.0.1 -P2881 -uroot
mysql -h127.0.0.1 -P2881 -uroot@sys -p -c -A oceanbase
四:创建新租户的过程
查看可分配资源(区):
select zone,cpu_total,cpu_assigned,round(mem_total/1024/1024/1024,2) MEM_TOTAL_GB,round(mem_assigned/1024/1024/1024,2) MEM_ASSIGNED_GB FROM __ALL_VIRTUAL_SERVER_STAT;
查询所有单元规格(unit)配置(资源池配置):
select name,max_cpu,min_cpu,max_memory,min_memory,max_iops,max_disk_size,max_session_num from __all_unit_config;
注意:mysql -h127.0.0.1 -P2881 -uroot@sys -p -c -A oceanbase连接才可以查询
1.创建资源配置(单元)
CREATE RESOURCE UNIT uc1 MAX_CPU 8,MIN_CPU 8, MAX_MEMORY '20G', MIN_MEMORY '20G', MAX_IOPS 128, MIN_IOPS 128, MAX_DISK_SIZE '2T', MAX_SESSION_NUM 64;
修改资源配置:
ALTER RESOURCE UNIT uc1 MAX_CPU 8, MIN_CPU 8, MAX_MEMORY '16G', MIN_MEMORY '16G';
ALTER RESOURCE UNIT uc1 max_session_num 2000;
2.创建资源池
create resource pool p1 unit='uc1' , unit_num=1; p1:资源池名称
说明:所有zone使用同一个资源单元规格(保持和步骤一名称一致)
或者:
CREATE RESOURCE POOL rp1 UNIT 'uc1', UNIT_NUM 2, ZONE_LIST ('zone1', 'zone2');
删除资源池:
DROP RESOURCE POOL uc1 ;
3.创建资源池出现的问题:machine resource ‘zone1’ is not enough to hold a new unit (你会遇到的)
问题说明:zone1上剩余可用资源不足
解决方法:
1.查看memory_limit参数
show parameters like 'memory_limit';
2.使用alter sytem修改memory_limit参数
alter system set memory_limit='12G'; (参数放大)
说明:可根据服务器配置设置大小
4.创建租户(TENANT),关联到这个资源池。
CREATE TENANT test_tenant resource_pool_list=('p1'); test_tenant : 租户名称
或者直接创建资源池创建租户:CREATE RESOURCE POOL pool1 UNIT 'uc1', UNIT_NUM 1, ZONE_LIST ('zone1');
新建新租户参考:
create tenant if not exists obmysql resource_pool_list=('p1','p2'), primary_zone='RANDOM',comment 'mysql tenant/instance', charset='utf8mb4' set ob_tcp_invited_nodes='%' ;
或
CREATE TENANT IF NOT EXISTS test_tenant CHARSET='utf8mb4',ZONE_LIST=('zone1','zone2','zone3'), PRIMARY_ZONE='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1') SET ob_tcp_invited_nodes='%' ;
说明:
1)参数ob_tcp_invited_nodes='%' 是指允许所有客户端访问。对于 MySQL 模式,可选字符集有:utf8mb4, binary, gbk, gb18030。缺省为utf8mb4。
2)Zone List和primary_zone中的列表写法,使用逗号,则逗号两侧优先级相同,使用分号,则分号左侧优先级高于右侧。此处PRIMARY_ZONE='zone1;zone2,zone3'则表示优先将主副本分配至zone1中,减少跨Zone及跨服务器的操作。
5.租户中创建其它用户admin
create user if not exists admin@'%' identified by 'admin';
五:新用户连接新租户数据库
1.用户赋予权限远程连接mysql数据库权限
grant all on scoot.* to admin@'%';
2.使用新创建的用户admin登录test_tenant租户
obclient -h 127.0.0.1 -P2881 -uadmin@test_tenant -p -c -A 用户名:admin@test_tenant
租户test_tenant密码为空登录:
obclient -h 127.0.0.1 -P2881 -uroot@test_tenant -c -A oceanbase
3.出现问题:ERROR 1227 (42501): Access denied
解决:
1.显示连接的权限:
SHOW VARIABLES LIKE 'ob_tcp_invited_nodes';
2.设置租户白名单
SET GLOBAL ob_tcp_invited_nodes='%';
新租户白名单设置:
ALTER TENANT csmysql SET VARIABLES ob_tcp_invited_nodes=’%’;
alter tenant 租户名 set variables ob_tcp_invited_nodes='%'; alter tenant test_tenant set variables ob_tcp_invited_nodes='%';
4.修改用户admin权限
授予用户级全部权限:
GRANT ALL ON *.* TO admin;
(在新租户的登录下操作)
5.修改用户密码
ALTER USER admin IDENTIFIED BY 'password';
示例:将用户 sqluser01 的密码修改为 *1 的示例如下: ALTER USER sqluser01 IDENTIFIED BY ‘*1’;
六:相关命令操作:
创建和删除数据库:
create database scoot; drop database scoot;
查询集群名称:
show parameters like 'cluster';
查询数据库中的租户:
select * from gv$tenant;
启动集群 :
obd cluster start myob
停止集群:
obd cluster stop myob
销毁集群 :
obd cluster destroy myob
版本查询:
SELECT version();
查询租户的用户和密码:
select user_name,passwd from __all_user;
显示用户正在运行的线程:
show processlist
关闭防火墙:
systemctl stop firewalld
开机不启动防火墙:
systemctl disable firewalld
查看防火墙状态:
systemctl status firewalld
并查看当前server列表:
select zone, svr_ip, svr_port, with_rootserver, status from __all_server order by zone, with_rootserver desc;
系统用户连接:obclient -h 127.0.0.1 -uroot@sys -p -c -A oceanbase
七:SQL 基本操作注意项
修改语句:
OB目前的DDL修改列类型(兼容类型向上修改) 例如: int 改 bigint、varchar 改 text、blob 改 long blob 等,
修改列类型(不兼容类型修改) 例如: int 改 varchar、char 改 varchar 等。