在大数据领域中,分布式数据库扮演着重要的角色。随着公司生成和处理的数据呈指数级增长,对于可扩展和可靠的数据库管理解决方案的需求也随之增长。越来越多的公司已经开始转向分布式数据库。OceanBase 是一个同时具备交易和分析能力的分布式数据库,可与 MySQL 兼容,对于数据驱动的团队来说是个不错的选择。
作为企业级数据库管理系统,OceanBase 还提供了社区版,让开发人员不需要复杂的安装就能免费体验数据库的能力。
针对如何安装 OceanBase,我将会出一系列文章进行讲解。这是第一篇,为大家介绍如何在 AWS EC2 实例上安装 OceanBase。
准备工作
在开始安装 OceanBase 之前,需要确保在 AWS 中启动的 EC2 实例符合 OceanBase 文档中的硬件要求。
根据文档,安装 OceanBase 需要至少有 4C10G 配置(最好是 16G)的服务器。推荐的操作系统是 Red Hat Enterprise Linux Server、 CentOS Linux 和 Anolis OS。
在本教程中,我将使用 CentOS 8 操作系统和 a1.x2large EC2 实例类型,该实例类型有 8 个 vCPU 和 16G 内存。由于 OceanBase 建议磁盘空间为“内存大小的四倍或更多”,因此我将为实例挂载一个 100G 的 SSD 磁盘。
一旦我们启动了 EC2 实例并连接到它,就可以开始安装 OceanBase。
安装 OceanBase
第一步是更新 yum 包。运行以下 bash 命令:
sudo yum update在服务器上安装 OceanBase 最简单的方法是使用官方的一体化安装包,该安装包将在您的机器上安装 OBD、OceanBase DBMS、OBProxy、obagent、Grafana 和 Prometheus。可以通过运行以下代码来使用一体化安装:
bash -c "$(curl -s <https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/oceanbase-all-in-one/installer.sh>)"此过程大概需要 5 分钟。安装完成后,将会显示如下“Install Finished”界面。
另外,也可以使用 Docker,用一行代码快速启动 OceanBase 服务器:
docker run -p 2881:2881 --name obstandalone -d oceanbase/oceanbase-ce为简单起见,接下来我将使用刚刚安装的一体化包作为 demo 实例。
下一步是通过输入以下命令来激活安装环境:
source ~/.oceanbase-all-in-one/bin/env.sh然后我们可以运行 obd demo 命令来启动我们刚刚从一体化包中安装的服务的 demo 实例。
obd demo请注意,obd demo 命令建议仅用于演示目的,不应用于生产环境。
注意:更新 ulimits 配置
运行此命令后可能会遇到一个错误,显示“open files must not be less than 20000 (Current value: 1024)”【打开的文件数必须不少于 20000(当前值:1024)】,并带有 OBD-1007 错误代码。根据 OceanBase 文档,这个错误信息意味着我们的 ulimits 配置没有符合官方要求。
更改 ulimits 配置时,需要编辑 /etc/security/limits.conf 文件。ulimit 是内置的 Linux 配置,允许查看或限制个人用户消耗的系统资源量。作为演示,我们将增加限制到一个较大的数字或无限制。但在生产环境中,建议遵循设置 ulimits 的最佳实践。
* soft nofile 655360* hard nofile 655360* soft nproc 655360* hard nproc 655360* soft core unlimited* hard core unlimited* soft stack unlimited* hard stack unlimited
为了使配置生效,需要退出会话并重新登录。配置完成后,可以执行如下命令查看配置是否正确:
ulimit -a如果重新配置成功,将会看到以下界面。
再次运行 obd demo 命令。结果,我们得到一个运行中的 OBServer。demo 命令还将为每个服务提供密码。
+---------------------------------------------+| observer |+-----------+---------+------+-------+--------+| ip | version | port | zone | status |+-----------+---------+------+-------+--------+| 127.0.0.1 | 4.0.0.0 | 2881 | zone1 | ACTIVE |+-----------+---------+------+-------+--------+obclient -h127.0.0.1 -P2881 -uroot -Doceanbase -A+--------------------------------------------------+| obagent |+--------------+-------------+------------+--------+| ip | server_port | pprof_port | status |+--------------+-------------+------------+--------+| 172.*.*.42 | 8088 | 8089 | active |+--------------+-------------+------------+--------++-----------------------------------------------------+| prometheus |+--------------------------+------+----------+--------+| url | user | password | status |+--------------------------+------+----------+--------+| <http://172>.*.*.42:9090 | | | active |+--------------------------+------+----------+--------++-------------------------------------------------------------------+| grafana |+--------------------------------------+-------+-----------+--------+| url | user | password | status |+--------------------------------------+-------+-----------+--------+| <http://172>.*.*.42:3000/d/oceanbase | admin | oceanbase | active |+--------------------------------------+-------+-----------+--------++---------------------------------------------+| obproxy |+-----------+------+-----------------+--------+| ip | port | prometheus_port | status |+-----------+------+-----------------+--------+| 127.0.0.1 | 2883 | 2884 | active |+-----------+------+-----------------+--------+obclient -h127.0.0.1 -P2883 -uroot -Doceanbase -Ademo running
连接到 OceanBase 客户端
现在我们尝试使用 OBClient 连接到 OceanBase 实例,OBClient 是基于 MariaDB CLI 的 OceanBase 官方 CLI,可用于连接到 OceanBase Server/Proxy。
由于 OBClient 已经在 all-in-one 包中安装了,因此可以简单地运行下面的代码来连接它:
obclient -h127.0.0.1 -P2881 -uroot -Doceanbase -A如果您已经有使用 MariaDB CLI 或 MySQL CLI 的经验,那么 OBClient 对您来说应该不会陌生。
在本教程中,我将使用 OceanBase 创建一个关于海洋生物的数据库。运行以下代码,在 demo OceanBase 实例中创建一个名为 MarineLife 的数据库:
CREATE DATABASE MarineLife DEFAULT CHARACTER SET UTF8 READ WRITE;现在运行 SHOW DATABASES,可看到新创建的数据库。
现在我们已经在 OceanBase 中创建了一个数据库,我们可以尝试使用 SQL 向数据库中插入一些数据。
在 OceanBase 中运行 SQL
首先,让我们在 OBClient 中选择新创建的 MarineLife 数据库。
USE MarineLife;在 MarineLife 数据库中创建一个名为 Species 的表,该表具有 species name(物种名称)、common name(通用名称)、habitant(栖息地)和 conservation_status(保护状况)等属性。为此,我们需要创建一个表及其架构:
CREATE TABLE Species (id INT AUTO_INCREMENT PRIMARY KEY,species_name VARCHAR(255) NOT NULL,common_name VARCHAR(255),habitat VARCHAR(255),conservation_status ENUM('Least Concern', 'Near Threatened', 'Vulnerable', 'Endangered', 'Critically Endangered', 'Extinct in the Wild', 'Extinct'));
然后向表中输入一些虚拟数据:
INSERT INTO Species (species_name, common_name, habitat, conservation_status)VALUES ('Carcharodon carcharias', 'Great White Shark', 'Coastal and offshore waters', 'Vulnerable'),('Delphinus delphis', 'Short-beaked Common Dolphin', 'Open seas', 'Least Concern'),('Chelonia mydas', 'Green Sea Turtle', 'Tropical and subtropical oceans', 'Endangered'),('Eubalaena glacialis', 'North Atlantic Right Whale', 'North Atlantic Ocean', 'Critically Endangered');
再检查数据库表:
SELECT * FROM Species;这时会看到刚刚插入到表中的数据。
从 TablePlus 连接 OceanBase
我们可以使用 TablePlus 从本地机器管理数据库。在此之前,需要更改 AWS EC2 安全组设置,以允许外部应用访问 2881 端口,这是 OceanBase 的默认端口号。
为此,需要选择 EC2 实例使用的安全组,并编辑入站规则以允许访问 2881 端口。
需要注意的是,上述设置仅用于演示。在生产环境中,可将允许的来源限制为有限的 IP 范围。
在大多数情况下,我们不希望使用 root 用户远程访问数据库。我们可以创建一个名为 demo 的新用户,该用户只能访问 MarineLife 数据库。
要创建一个新用户,我们将使用以下命令:
CREATE USER 'demo'@'localhost' IDENTIFIED BY 'password';接下来,我们将授予用户访问 MarineLife 数据库的权限:
GRANT ALL PRIVILEGES ON MarineLife.* TO 'demo'@'localhost';现在我们可以使用演示用户凭证将 OceanBase 实例连接到 TablePlu。一旦连接,我们就可以从用户友好的图形界面查看和管理 MarineLife 数据库及其表。
Host: YOUR_EC2_PUBLIC_IP_ADDRESSPort: 2881User: demoPassword: password
我还向数据库中添加了几行。
结论
在本文中,我们学习了如何在 AWS EC2 实例上安装 OceanBase,并使用 OBClient 和 TablePlus 连接到它。我们还创建了一个带有表格的数据库,并向其中插入了数据。
OceanBase 提供了一个可扩展、可靠的和高效的分布式数据库管理系统,并且与 MySQL 兼容,是处理大量数据的理想选择。




