开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2550人左右 1 + 2 + 3 + 4 +5 + 6 + 7+8)(1 2 3 4 5 群均已爆满,6群关闭自由申请,新人进7群,开8群)
在开始学习OceanBase的概念,发现了很多新的知识和新的架构的思维方式,用传统的数据库理念去理解OceanBase可能有一些吃力,这里总结开始学习OceanBase数据库的学习的一些概念和大家进行探讨,加速理解OceanBase的一些基础知识和概念。
1 OceanBase 的概念中的数据库或数据库实例,并不是我们之前理解的传统数据库的实例,一个主机一个实例,或者一群主机充当一个实例,而是云,或者用无数量级的主机的组合,来建立一个Oceanbase的实例。
大致思路是(物理方式理解) OceanBase实例---> 可用区----> 节点,一个OB的实例本身是可以在一个数据中心,也可以在多个数据中心,可用区是一组硬件类似,性能类似的节点组成的数据存储和计算的节点。OceanBase从概念上已经彻底不是我们之前的单机对数据库物理的理解的方式。IDC,区域,成为部署OceanBase的unit单元,对于最上端的OceanBase的总称为OceanBase cluster。
上图中一个OB的集群由三个子集群组成,每个子集群我们可以理解为是一个ZONE,一个OB的集群由上图中3个ZONE组成,一个节点OBSERVER可以存储多个分区的数据的分片,且每个数据都具有多个副本,分散在不同的ZONE中,确保数据的安全和可访问性。
在整体部署中,就可以完成数据库经常提到的容灾,多可用区,跨物理机房等在传统数据库中很难躲到的事情。在OB 官方文档中,显示OB可以做到 RPO=0,RTO=30秒的国际最高等级。
关于高可用的部分学习完文档可以总结成如下的一些点
1 OB的高可用的基础是基于时间的,每个ob server 都应该具有NTP服务,或类似的服务,保证整体的集群的主机的时间差不超过200ms。2 在OB集群中,每个分区都有且只有一个leader,和多个follower,数据的写操作均在leader中操作,在操作的中会将这些操作产生日志流,将这些日志流同步给其他的副本,来修改副本中的数据。3 主副本之间是可以进行选举的,信息的持久性基于多副本大多数数据落盘作为标准,主副本切换判断等工作由OB本身负责,用户不用进行干预。4 数据库的隔离级别和事务的可见性等,都与时间戳有关,每个租户都有自己的时间戳,从此保证租户内的事务的全局顺序性。5 用户访问OB的数据需要obproxy,代理来支持其中的工作,代理本身时刻跟踪OB节点分区的状态,通过OB CLUSTER的系统表来获得集群的状态,来对应用的访问进行路由的导向。系统表将告知每个OB节点的健康状态和分区的实时位置,且发现节点有故障的情况下,会通知响应的服务进行切换。
这里我们安装了Oceanbase 4.X 来对系统进行学习和理解,基于开源的版本,这里支持的MySQL的操作,LBACSYS,SYS,oraauditor等库里面都是空的,这与开源的库主要支持MySQL有关,如果是收费的库,ORACLE,则这几个库应该有表。
obclient [oceanbase]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| LBACSYS |
| mysql |
| oceanbase |
| ocs |
| ORAAUDITOR |
| SYS |
| test |
+--------------------+
8 rows in set (0.003 sec)
在oceanbase库中大约有610个系统表
| __all_tenant_object_type_history |
| __all_tenant_ols_component |
| __all_tenant_ols_component_history |
| __all_tenant_ols_label |
| __all_tenant_ols_label_history |
| __all_tenant_ols_policy |
| __all_tenant_ols_policy_history |
| __all_tenant_ols_user_level |
| __all_tenant_ols_user_level_history |
| __all_tenant_profile |
| __all_tenant_profile_history |
| __all_tenant_rewrite_rules |
| __all_tenant_role_grantee_map |
| __all_tenant_role_grantee_map_history |
| __all_tenant_scheduler_job |
| __all_tenant_scheduler_job_class |
| __all_tenant_scheduler_job_run_detail |
| __all_tenant_scheduler_program |
| __all_tenant_scheduler_program_argument |
| __all_tenant_security_audit |
| __all_tenant_security_audit_history |
| __all_tenant_security_audit_record |
| __all_tenant_sysauth |
| __all_tenant_sysauth_history |
| __all_tenant_tablespace |
| __all_tenant_tablespace_history |
| __all_tenant_time_zone |
| __all_tenant_time_zone_name |
| __all_tenant_time_zone_transition |
| __all_tenant_time_zone_transition_type |
| __all_tenant_trigger |
| __all_tenant_trigger_history |
| __all_tenant_user_failed_login_stat |
| __all_transfer_partition_task |
| __all_transfer_partition_task_history |
| __all_transfer_task |
| __all_transfer_task_history |
| __all_type |
| __all_type_attr |
| __all_type_attr_history |
| __all_type_history |
| __all_unit |
| __all_unit_config |
| __all_user |
| __all_user_history |
| __all_weak_read_service |
| __all_zone |
| __all_zone_merge_info |
| __tenant_parameter |
| __wr_active_session_history |
| __wr_control |
| __wr_snapshot |
| __wr_statname |
| __wr_sysstat |
+-------------------------------------------+
610 rows in set (0.004 sec)
obclient [oceanbase]>
obclient [oceanbase]>
ocs 中有大约10个表
obclient [oceanbase]> use ocs
Database changed
obclient [ocs]> show tables;
+---------------------+
| Tables_in_ocs |
+---------------------+
| all_agent |
| cluster_status |
| dag_instance |
| node_instance |
| partial_maintenance |
| sub_task_log |
| subtask_instance |
| task_maintainer |
| upgrade_pkg_chunk |
| upgrade_pkg_info |
+---------------------+
10 rows in set (0.003 sec)
而其他的一些库如information_schema 和 mysql中有部分的表,模拟了MySQL提供的信息。
obclient [information_schema]> show tables;
+------------------------------------------+
| Tables_in_information_schema |
+------------------------------------------+
| CHARACTER_SETS |
| CHECK_CONSTRAINTS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS |
| ENGINES |
| EVENTS |
| FILES |
| GLOBAL_STATUS |
| GLOBAL_VARIABLES |
| KEY_COLUMN_USAGE |
| PARAMETERS |
| PARTITIONS |
| PROCESSLIST |
| QUERY_RESPONSE_TIME |
| REFERENTIAL_CONSTRAINTS |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| SESSION_STATUS |
| SESSION_VARIABLES |
| STATISTICS |
| ST_GEOMETRY_COLUMNS |
| ST_SPATIAL_REFERENCE_SYSTEMS |
| TABLES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
| VIEW_TABLE_USAGE |
+------------------------------------------+
33 rows in set (0.003 sec)
obclient [information_schema]> use mysql
Database changed
obclient [mysql]> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| db |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| proc |
| time_zone |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
11 rows in set (0.003 sec)
下面开始通过OceanBase文档中的信息,开始我们的学习OceanBase之旅,首先我们要开始建立一个租户,通过租户来管理我们的业务系统。
1 查看当前系统可以分配的资源
obclient [oceanbase]> SELECT SVR_IP,ZONE,(CPU_CAPACITY-CPU_ASSIGNED) cpu_free,round((MEM_CAPACITY-MEM_ASSIGNED)/1024/1024/1024) mem_free_gb FROM GV$OB_SERVERS;
+-----------+-------+----------+-------------+
| SVR_IP | ZONE | cpu_free | mem_free_gb |
+-----------+-------+----------+-------------+
| 127.0.0.1 | zone1 | 13 | 4 |
+-----------+-------+----------+-------------+
1 row in set (0.003 sec)
我们通过oceanbase数据库中的,资源表GV$OB_SERVERS,来获得当前数据库中的可以分配的资源,目前是CPU 13 MEM 4,下一步我们开始对数据库进行创建租户的操作。
obclient [oceanbase]>
obclient [oceanbase]> SELECT SVR_IP,ZONE,(CPU_CAPACITY-CPU_ASSIGNED) cpu_free,round((MEM_CAPACITY-MEM_ASSIGNED)/1024/1024/1024) mem_free_gb FROM GV$OB_SERVERS;
+-----------+-------+----------+-------------+
| SVR_IP | ZONE | cpu_free | mem_free_gb |
+-----------+-------+----------+-------------+
| 127.0.0.1 | zone1 | 13 | 4 |
+-----------+-------+----------+-------------+
1 row in set (0.003 sec)
obclient [oceanbase]>
obclient [oceanbase]>
obclient [oceanbase]> CREATE RESOURCE UNIT test001 MAX_CPU 1,MEMORY_SIZE '1G';
Query OK, 0 rows affected (0.014 sec)
obclient [oceanbase]>
obclient [oceanbase]> drop resource unit test001;
Query OK, 0 rows affected (0.008 sec)
obclient [oceanbase]>
obclient [oceanbase]>
obclient [oceanbase]> CREATE RESOURCE UNIT test001 MAX_CPU 1,MEMORY_SIZE '1G';
Query OK, 0 rows affected (0.010 sec)
obclient [oceanbase]>
obclient [oceanbase]> CREATE RESOURCE POOL pool001 UNIT='test001',UNIT_NUM=1,ZONE_LIST=('zone1');
Query OK, 0 rows affected (0.035 sec)
obclient [oceanbase]> CREATE TENANT IF NOT EXISTS mysql001 CHARSET='utf8mb4',PRIMARY_ZONE='zone1',RESOURCE_POOL_LIST=('pool001') SET ob_tcp_invited_nodes='%';
Query OK, 0 rows affected (35.756 sec)
obclient [oceanbase]>
obclient [oceanbase]>
obclient [oceanbase]> obclient -h192.168.198.188 -P2881 -uroot@mysql001 -p -A
-> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'obclient -h192.168.198.188 -P2881 -uroot@mysql001 -p -A' at line 1
obclient [oceanbase]>
obclient [oceanbase]>
obclient [oceanbase]> exit
Bye
[root@oceanbase4 ~]# obclient -h192.168.198.188 -P2881 -uroot@mysql001 -p -A
Enter password:
Welcome to the OceanBase. Commands end with ; or \g.
Your OceanBase connection id is 3221497762
Server version: OceanBase_CE 4.2.1.9 (r109010012024101414-52e69c82a233d141442077439e3143dda41e28ae) (Built Oct 14 2024 14:57:29)
Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
obclient [(none)]> set PASSWORD = PASSWORD('mysql');
Query OK, 0 rows affected (0.075 sec)
一顿操作猛如虎,这里说一下兼容MySQL的OB的操作方式 1 先建立资源的单元 2 建立资源池 3 建立租户挂载资源池 4 建立MySQL账号 5 建立MySQL账号的密码
任务完成
今天的学习到此为止,后续会持续的学习OceanBase数据库,每天都学习,进步一点点。
置顶文章:
往期热门文章:
阿里云数据库--市场营销聊胜于无--3年的使用感受与反馈系列
阿里云数据库产品 对内对外一样的卷 --3年阿里云数据库的使用感受与反馈系列
阿里云数据库使用感受--客户服务问题深入剖析与什么是廉价客户 --3年的使用感受与反馈系列
阿里云数据库使用感受--操作界面有点眼花缭乱 --3年的使用感受与反馈系列
PolarDB 最近遇到加字段加不上的问题 与 使用PolarDB 三年感受与恳谈
PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆
MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
临时工访谈:从国产数据库 到 普罗大众的产品 !与在美国创业软件公司老板对话
感谢 老虎刘 刘老师 对 5月20日 SQL 问题纠正贴 ---PostgreSQL 同一种SQL为什么这样写会提升45%性能
PostgreSQL 同一种SQL为什么这样写会提升45%性能 --程序员和DBA思维方式不同决定
PostgreSQL 熊灿灿一句话够学半个月 之 KILL -9
临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一 (阿里云组团PK笔者实录)
临时工访谈:金牌 “女” 销售从ORACLE 转到另类国产数据库 到底 为什么?
临时工访谈:无名氏意外到访-- 也祝你好运(管理者PUA DBA现场直播)