CockroachDB适配OBS开源开发任务心得

举报
yd_227792923 发表于 2024/11/24 22:34:08 2024/11/24
【摘要】 CockroachDB适配OBS开源开发任务CockroachDB是一个开源的分布式关系数据库,其设计灵感来源于Google的全球性分布式数据库Spanner。它旨在打造一个能够应对全球规模、具有高可用性和一致性的数据库系统。CockroachDB采用完全去中心化的架构,集群中各个节点的地位完全对等,同时所有功能封装在一个二进制文件中,尽量不依赖配置文件即可直接部署。本任务的主要目的是让C...

CockroachDB适配OBS开源开发任务

CockroachDB是一个开源的分布式关系数据库,其设计灵感来源于Google的全球性分布式数据库Spanner。它旨在打造一个能够应对全球规模、具有高可用性和一致性的数据库系统。CockroachDB采用完全去中心化的架构,集群中各个节点的地位完全对等,同时所有功能封装在一个二进制文件中,尽量不依赖配置文件即可直接部署。本任务的主要目的是让CockroachDB支持华为云OBS服务,拓展OBS服务的影响力,方便CockroachDB的用户使用华为云服务时能够顺利对接OBS服务。

从计划书开始开始

这次任务是验证CockroachDB适配OBS。

根据任务计划书要求,完成OBS适配开发,DEMO设计、部署、验证等工作。

验证分析

CockroachDB

CockroachDB提供基于S3备份恢复功能

  • BACKUP 备份
BACKUP INTO 's3://{bucket}?AWS_ENDPOINT={endpoint}&AWS_ACCESS_KEY_ID={ak}&AWS_SECRET_ACCESS_KEY={sk}'
  • RESOTRE 恢复
    • 集群
    • 数据库
RESTORE DATABASE {empty} | {database_name} | TABLE {table_name} FROM '{path}' IN 's3://{bucket}?AWS_ENDPOINT={endpoint}&AWS_ACCESS_KEY_ID={ak}&AWS_SECRET_ACCESS_KEY={sk}'

AWS S3

S3(Simple Storage Service)协议是亚马逊推出的一种对象存储服务协议,这也是最早的对象存储协议,所以大部分的对象存储都兼容S3协议。它为开发者提供了一种简单、高效、可靠的方式来存储和管理大量的数据对象。S3 协议已经成为云存储领域的事实标准,被众多云服务提供商广泛采用。

S3 协议的设计目标是提供一种易于使用的接口,使得用户可以通过互联网轻松地存储、访问和管理数据。它采用了基于对象的存储模型,每个数据对象都被视为一个独立的实体,可以通过唯一的键来识别和访问。

OBS

对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。

OBS系统和单个桶都没有总数据容量和对象/文件数量的限制,为用户提供了超大存储容量的能力,适合存放任意类型的文件,适合普通用户、网站、企业和开发者使用。OBS是一项面向Internet访问的服务,提供了基于HTTP/HTTPS协议的Web服务接口,用户可以随时随地连接到Internet,通过OBS管理控制台或各种OBS工具访问和管理存储在OBS中的数据。此外,OBS支持SDK和OBS API接口,可使用户方便管理自己存储在OBS上的数据,以及开发多种类型的上层业务应用。

在全球多区域部署了OBS基础设施,具备高度的可扩展性和可靠性,用户可根据自身需要指定区域使用OBS,由此获得更快的访问速度和实惠的服务价格。

OBS兼容AWS S3协议

部署

产品名称 版本 架构 部署方式 端口
CockroachDB v24.1.7 linux.arm64 集群(2台机器) 26257
  • 本次实验用户root

  • 本次部署实验Node1和Node2地址

    • 192.168.0.201,Node1
    • 192.168.0.105,Node2
  • 创建cockroachdb部署目录

mkdir /opt/cockroachdb
cd /opt/cockroachdb
  • 下载cockroachDB 24.1.7
# 下载cockroachDB 24.1.7
wget https://binaries.cockroachdb.com/cockroach-v24.1.7.linux-arm64.tgz
  • 解压压缩文件并复制到/usr/bin目录
tar -zxf cockroach-sql-v24.1.7.linux-arm64.tgz
cp -i cockroach-*/cockroach /usr/bin
  • 查看版本信息
cockroach-sql --version

sql version details:
Build Tag:        v24.1.7
Build Time:       2024/11/12 18:11:58
Distribution:     OSS
Platform:         linux arm64 (aarch64-unknown-linux-gnu)
Go Version:       go1.22.5 X:nocoverageredesign
C Compiler:       gcc 6.5.0
Build Commit ID:  3613a619e327fb412ac62036ce2c7060c25e48db
Build Type:       release
Enabled Assertions: false
# 单机部署
# 数据目录
mkdir -p /data/cockroachdb/data
# 日志目录
mkdir -p /data/cockroachdb/logs
# 单机启动
cockroach start-single-node --insecure --store=/data/cockroachdb/data --log-dir=/data/cockroachdb/logs --listen-addr=localhost --background
  • certs 和 private 目录,2台机器上执行
mkdir -p /opt/cockroachdb/{certs,private}
  • 生成 CA 证书,Node1上执行
cockroach cert create-ca \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key
  • 拷贝将 ca.crt 和 ca.key 上传到Node2
scp /opt/cockroachdb/private/ca.key root@192.168.0.105:/opt/cockroachdb/private/
scp /opt/cockroachdb/certs/ca.crt root@192.168.0.105:/opt/cockroachdb/certs/
  • 生成客户端证书
cockroach cert create-client \
root \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key

  • 生成服务的证书,Node1和Node2上执行
cockroach cert create-node \
ruster-comm \
192.168.0.201 \
localhost \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key
cockroach cert create-node \
ruster-05023 \
192.168.0.105 \
localhost \
--certs-dir=/opt/cockroachdb/certs \
--ca-key=/opt/cockroachdb/private/ca.key
  • 创建systemd 服务文件,Node1和Node2上执行,修改ExecStart中的–advertise-addr为当前主机IP地址,–join为Node1和Node2的IP地址,–http-port=8090,UI端端口,默认为8080,容易冲突,修改为8090,User为root用户,使用其他用户需要创建用户组和给部署修改用户权限
vim /etc/systemd/system/cockroachdb.service

# 以下是文件内容
Requires=network.target

[Service]
Type=notify
WorkingDirectory=/opt/cockroachdb
ExecStart=/usr/bin/cockroach start --certs-dir=/opt/cockroachdb/certs --http-port=8090 --advertise-addr=192.168.0.201 --join=192.168.0.201,192.168.0.105
TimeoutStopSec=60
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=cockroach
User=root

[Install]
WantedBy=default.target
  • 重新加载 systemd 管理器
systemctl daemon-reload
  • 启用 cockroachdb 服务
systemctl enable --now cockroachdb
  • 查看服务状态
systemctl status cockroachdb
  • 创建集群
cockroach init --certs-dir=/opt/cockroachdb/certs --host=192.168.0.201:26257
  • 检查集群状态
cockroach node --certs-dir=/opt/cockroachdb/certs --host=ruster-comm ls
  id
------
   1
   2
(2 rows)

cockroach node --certs-dir=/opt/cockroachdb/certs --host=ruster-comm status
  id |       address       |     sql_address     |  build  |              started_at              |              updated_at              | locality | is_available | is_live
-----+---------------------+---------------------+---------+--------------------------------------+--------------------------------------+----------+--------------+----------
   1 | 192.168.0.201:26257 | 192.168.0.201:26257 | v24.1.7 | 2024-11-24 04:10:18.359026 +0000 UTC | 2024-11-24 04:11:54.383516 +0000 UTC |          | true         | true
   2 | 192.168.0.105:26257 | 192.168.0.105:26257 | v24.1.7 | 2024-11-24 04:10:18.910868 +0000 UTC | 2024-11-24 04:11:54.918999 +0000 UTC |          | true         | true
(2 rows)
  • 使用cockroach sql 命令访问cockroach
cockroach sql --certs-dir=/opt/cockroachdb/certs --host=ruster-comm:26257
  • 创建用户并赋予权限
CREATE USER spcockroach WITH PASSWORD 'ss@111111';
GRANT admin TO spcockroach;
  • 部署完成,使用客户端工具连接测试。

DEMO设计

  • 使用Go开发DEMO,提供以下几个接口。
    1. 创建数据接口
    2. 数据列表接口
    3. 备份接口
    4. 删除表接口
    5. 恢复表接口

以下是DEMO设计内容。

  • 准备数据表Users
create table "users" (
    id serial primary key,
    name varchar(32) not null,
    email varchar(64),
    age smallint not null default 0,
    birthday timestamp,
    member_number varchar(32),
    activated_at timestamp,
    created_at timestamp not null default now(),
    updated_at timestamp
);
  • 验证步骤
    1. 添加数据
    2. 查看数据列表,列表有数据
    3. 备份数据到OBS,检查OBS是否有备份数据
    4. 删除数据库表users
    5. 查看数据列表,提示users表不存在
    6. 恢复数据库表users
    7. 查看数据库列表,列表是之前备份的数据

总结

验证任务到此完成,CockroachDB在部署方面还是很容易的,很轻松就能部署集群。

OBS兼容S3协议,对应用对接提供极大的便利。

验收说明

本文提供的验收材料按照《xorm适配GaussDB开源开发任务》任务计划书的要求提供,没有偏离。

验收材料

  1. 开源软件fork地址:不涉及

  2. 开源软件修改记录(可以有多个修改记录):不涉及

  3. 推送上游社区PR(包括代码、文档、可以有多个):不涉及

  4. 验证DEMO地址:https://gitcode.com/sunsungk9/opensource-demo-xorm-241116/overview

  5. 验证DEMO修改记录(可以有多个修改记录,只包含和本任务验证强相关的提交记录,比如添加依赖、增加配置文件、演示开源软件功能使用的代码等):

  1. 博客地址:https://bbs.huaweicloud.com/blogs/439216
验收细则 评分说明 是否为验收必选项 结果(通过/不通过) 开发者举证
功能开发:完成与华为三大根技术生态(鲲鹏云、昇腾云、鸿蒙)适配的功能开发 完成GaussDB数据库适配功能验证。 (1)(2)(3)
代码质量:适配华为三大根技术生态的代码质量经过工具检测达标 推送给开源社区的代码符合开源社区关于代码风格、功能、自动化测试等要求。 (3)
提供相关文档,比如部署文档、使用文档、配置文档等 提供相关文档,比如部署文档、使用文档、配置文档等 (3)
合入到开源项目主仓:代码推送上游社区 代码合并到当前主干分支。举证提供代码仓库链接。 (1)(2)(3)
Deomo设计&开发:完成功能演示Demo的开发 Deomo设计&开发:完成功能演示Demo的开发 (4)(5)
Demo部署&验证:完成功能演示DEMO基于华为云鲲鹏环境的部署和功能验证 提供DEMO部署验证结果的关键截图进行举证。提供DEMO运行环境和资源的规格清单。 参考资源清单和验证截图。
发布博客:发布博客介绍适配心得。 提供博客的地址。 (6)
制作单机版无高危开源镜像。 上架云商店。
单机版镜像上架时支持模板部署。
制作集群版无高危开源镜像。 上架云商店。
集群版镜像上架时支持模板部署。

资源清单

CCE

产品名称 集群类型 集群版本 集群规模
云容器引擎CCE Turbo集群 V1.29 50

ECS

产品名称 CPU架构 实例类型 公共镜像 镜像版本
弹性云服务器 鲲鹏计算 鲲鹏通用计算增强型 EulerOS EulerOS 2.9 64位 ARM版

OBS

产品名称 存储类型 数据冗余存储策略 桶策略
对象存储服务 OBS 低频访问存储 多AZ存储 私有桶

验证截图

验证思路

  • 使用Go-demo开发接口,提供以下几个接口。

    1. 创建数据接口
    2. 数据列表接口
    3. 备份接口
    4. 删除表接口
    5. 恢复表接口
    6. Cockroach备份列表
  • 验证步骤

    1. 添加数据
    2. 查看数据列表,列表有数据
    3. 备份数据到OBS,OBS显示有备份数据
    4. 通过Cockroach备份列表查看,显示有备份记录
    5. 删除数据库表users
    6. 查看数据列表,提示users表不存在
    7. 恢复数据库表users
    8. 查看数据库列表,列表是之前备份的数据

测试截图分别是执行4个REST接口的结果。

添加数据

查看数据列表

备份数据OBS

查看华为云OBS服务列表

查看Cockroach备份列表

删除数据库表users

查看数据列表

恢复数据库表

查看数据列表

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。