【5分钟学会部署OpenTenBase V5.0 for CentOS 7.8】

1.服务器准备及组件规划

1.1 资源准备

操作系统:CentOS 7.8

服务器配置:CVM:2台, CPU:4c, Memory:8G, Disk:100G

IP分别为: 172.17.0.2,172.17.0.6

1.2 安装配置拓扑结构说明

|-------|------------|-----------------------------|
| 节点名称 | IP | 目录 |
| gtm主 | 172.17.0.2 | /data/opentenbase/data/gtm |
| gtm备 | 172.17.0.6 | /data/opentenbase/data/gtm |
| cn01主 | 172.17.0.2 | /data/opentenbase/data/cn01 |
| cn02备 | 172.17.0.6 | /data/opentenbase/data/cn02 |
| dn01主 | 172.17.0.2 | /data/opentenbase/data/dn01 |
| dn01备 | 172.17.0.6 | /data/opentenbase/data/dn01 |
| dn02主 | 172.17.0.6 | /data/opentenbase/data/dn02 |
| dn02备 | 172.17.0.2 | /data/opentenbase/data/dn02 |

2.设置

2.1 设置主机名

2.1.1 在OpenTenBase01节点上设置主机名为OpenTenBase01

复制代码
hostnamectl set-hostname OpenTenBase01

2.1.2 在OpenTenBase02节点上设置主机名为OpenTenBase02

复制代码
hostnamectl set-hostname OpenTenBase02

2.2 创建用户

2.2.1 在OpenTenBase01节点上创建用户为opentenbase

复制代码
[root@opentenbase01 ~]# useradd -d /data/opentenbase -s /bin/bash -m opentenbase

2.2.2 在OpenTenBase02节点上创建用户为opentenbase

复制代码
[root@opentenbase02 ~]# useradd -d /data/opentenbase -s /bin/bash -m opentenbase

2.3 设置密码

2.3.1 在OpenTenBase01节点上设置密码为opentenbase

复制代码
[root@opentenbase01 ~]# echo opentenbase | passwd --stdin opentenbase
Changing password for user opentenbase.

2.3.2 在OpenTenBase02节点上设置密码为opentenbase

复制代码
[root@opentenbase02 ~]# echo opentenbase | passwd --stdin opentenbase
Changing password for user opentenbase.

2.4 将用户添加到wheel组

2.4.1 在OpenTenBase01节点上将opentenbase用户添加到wheel组

复制代码
[root@opentenbase01 ~]# usermod -aG wheel opentenbase

2.4.2 在OpenTenBase02节点上将opentenbase用户添加到wheel组

复制代码
[root@opentenbase02 ~]# usermod -aG wheel opentenbase

2.5 为wheel组启用sudo权限(通过visudo)

2.5.1 在OpenTenBase01节点上为wheel组启用sudo权限

复制代码
[root@opentenbase01 ~]# visudo
Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

2.5.2 在OpenTenBase02节点上为wheel组启用sudo权限

复制代码
[root@opentenbase02 ~]# visudo
Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

3.安装OpenTenBase集群

3.1 在OpenTenBase01节点上,从root切到opentenbase

复制代码
[root@opentenbase01 ~]# su - opentenbase
[opentenbase@opentenbase01 ~]$

3.2 在OpenTenBase01节点上,下载opentenbase软件包

复制代码
[opentenbase@opentenbase01 ~]$  wget https://opentenbase-1302252972.cos.ap-nanjing.myqcloud.com/opentenbase-5.21.8-i.x86_64.tar.gz

3.3 在OpenTenBase01节点上,下载opentenbase部署工具包

复制代码
[opentenbase@opentenbase01 ~]$  wget https://opentenbase-1302252972.cos.ap-nanjing.myqcloud.com/opentenbase_ctl

3.4 在OpenTenBase01节点上,给opentenbase_ctl工具添加执行权限

复制代码
[opentenbase@opentenbase01 ~]$  chmod a+x opentenbase_ctl

3.5 在OpenTenBase01节点上,安装sshpass工具

复制代码
opentenbase@opentenbase01 ~]$ sudo yum install -y sshpass

3.6 在OpenTenBase01节点上,创建一个空的postgres.conf参数文件

复制代码
[opentenbase@opentenbase01 ~]$ mkdir config
[opentenbase@opentenbase01 ~]$ cd config
[opentenbase@opentenbase01 config]$ touch postgres.conf

3.7 在OpenTenBase01节点上,编辑config.ini配置文件

复制代码
[opentenbase@opentenbase01 config]$ cat >> /data/opentenbase/config/config.ini <<EOF
# 实例配置
[instance]
name=test_cluster01
type=distributed
package=/data/opentenbase/opentenbase-5.21.8-i.x86_64.tar.gz

# gtm节点
[gtm]
master=172.17.0.2
slave=172.17.0.6

# 协调节点
[coordinators]
master=172.17.0.2
slave= 172.17.0.6
nodes-per-server=1
conf=/data/opentenbase/config/postgres.conf

# 数据节点
[datanodes]
master=172.17.0.2,172.17.0.6
slave=172.17.0.6,172.17.0.2
nodes-per-server=1
conf=/data/opentenbase/config/postgres.conf

# 登录和部署账号
[server]
ssh-user=opentenbase
ssh-password=opentenbase
ssh-port=22

# 日志配置
[log]
level=DEBUG

EOF

3.8 查看opentenbase_ctl工具的帮助命令

复制代码
[opentenbase@opentenbase01 config]$ cd ..
[opentenbase@opentenbase01 ~]$ ./opentenbase_ctl -h
Opentenbase cluster management tool
Usage: opentenbase_ctl [OPTIONS] [SUBCOMMAND]

Options:
  -h,--help                   Print this help message and exit

Subcommands:
  install                     Install a new instance
  delete                      Delete an existing instance
  start                       Start a Instance
  stop                        Stop a instance
  status                      Show instance status
  scp                         scp files to cluster nodes
  shell                       Execute shell command
  sql                         Execute sql command
  guc                         Display or set GUC parameters

3.9 OpenTenBase实例初始化

复制代码
[opentenbase@opentenbase01 ~]$ ./opentenbase_ctl install  -c config/config.ini

 ====== Start to Install Instance test_cluster01  ====== 

step 1: Make *.tar.gz pkg ...
    Make opentenbase-5.21.8-i.x86_64.tar.gz successfully.

step 2: Transfer and extract pkg to servers ...
    Package_path: /data/opentenbase/opentenbase-5.21.8-i.x86_64.tar.gz
    Transfer and extract pkg to servers successfully.

step 3: Install gtm master node ...
    Install gtm0001(172.17.0.2) ...
    Install gtm0001(172.17.0.2) successfully
    Success to install  gtm master node. 

step 4: Install cn/dn master node ...
    Install dn0001(172.17.0.2) ...
    Install dn0002(172.17.0.6) ...
    Install cn0001(172.17.0.2) ...
    Install dn0002(172.17.0.6) successfully
    Install cn0001(172.17.0.2) successfully
    Install dn0001(172.17.0.2) successfully
    Success to install all cn/dn master nodes. 

step 5: Install slave nodes ...
    Install cn0001(172.17.0.6) ...
    Install dn0001(172.17.0.6) ...
    Install dn0002(172.17.0.2) ...
    Install gtm0002(172.17.0.6) ...
    Install gtm0002(172.17.0.6) successfully
    Install dn0002(172.17.0.2) successfully
    Install dn0001(172.17.0.6) successfully
    Install cn0001(172.17.0.6) successfully
    Success to install all slave nodes. 

step 6:Create node group ...
    Create node group successfully. 

 ====== Installation completed successfully  ====== 

3.10 OpenTenBase实例状态查看

复制代码
[opentenbase@opentenbase01 ~]$ ./opentenbase_ctl status

 ------------- Instance status -----------  
Instance name: test_cluster01
Version: v5.21.8

 -------------- Node status --------------  
Node gtm0001(172.17.0.2:11000) is Running 
Node cn0001(172.17.0.6:11003) is Running 
Node dn0002(172.17.0.6:11006) is Running 
Node gtm0002(172.17.0.6:11000) is Running 
Node dn0002(172.17.0.2:11009) is Running 
Node cn0001(172.17.0.2:11003) is Running 
Node dn0001(172.17.0.6:11009) is Running 
Node dn0001(172.17.0.2:11006) is Running 
[Result] Total: 8, Running: 8, Stopped: 0, Unknown: 0

 ------- Master CN Connection Info -------  
[1] cn0001(172.17.0.2)  
Environment variable: export LD_LIBRARY_PATH=/data/opentenbase/install/opentenbase/5.21.8/lib  && export PATH=/data/opentenbase/install/opentenbase/5.21.8/bin:${PATH}
PSQL connection: psql -h 172.17.0.2 -p 11003 -U opentenbase postgres

3.11 配置opentenbase用户环境变量

复制代码
[opentenbase@opentenbase01 ~]$ cat  >> ~/.bash_profile <<EOF
export LD_LIBRARY_PATH=/data/opentenbase/install/opentenbase/5.21.8/lib
export PATH=/data/opentenbase/install/opentenbase/5.21.8/bin:${PATH}
EOF

3.12 opentenbase用户环境变量生效

复制代码
[opentenbase@opentenbase01 ~]$ source ~/.bash_profile

3.13 拷贝opentenbase_ctl工具到bin目录下,并查看OpenTenBase实例状态

复制代码
[opentenbase@opentenbase01 ~]$ mv opentenbase_ctl /data/opentenbase/install/opentenbase/5.21.8/bin
[opentenbase@opentenbase01 ~]$ opentenbase_ctl status

4.OpenTenBase基础使用

4.1 登录OpenTenBase数据库

复制代码
[opentenbase@opentenbase01 ~]$ psql -h 172.17.0.2 -p 11003 -U opentenbase postgres
psql (PostgreSQL 10.0 @ OpenTenBase_v5.0 (commit: ac54d240f) 2025-11-05 11:57:13)
Type "help" for help.
postgres=#

4.2 创建数据库为yunbeedb

复制代码
postgres=# create database yunbeedb;
CREATE DATABASE

4.3 创建用户为YUNBEE

复制代码
postgres=# \c yunbeedb opentenbase
You are now connected to database "yunbeedb" as user "opentenbase".


yunbeedb=# create user YUNBEE with password 'yunbee' superuser;
CREATE ROLE

4.4 新用户yunbee登录

复制代码
yunbeedb=# \q
[opentenbase@opentenbase01 ~]$  psql -h 172.17.0.2 -p 11003 -U yunbee yunbeedb
psql (PostgreSQL 10.0 @ OpenTenBase_v5.0 (commit: ac54d240f) 2025-11-05 11:57:13)
Type "help" for help.
yunbeedb=#

4.5 创建模式为YUNBEE

复制代码
yunbeedb=# create schema AUTHORIZATION YUNBEE;
yunbeedb=# create schema AUTHORIZATION YUNBEE;
CREATE SCHEMA
yunbeedb-# \dn
        List of schemas
      Name       |    Owner    
-----------------+-------------
 dbms_random     | opentenbase
 opentenbase_ora | opentenbase
 public          | opentenbase
 yunbee          | yunbee
(4 rows)


yunbeedb=# show search_path;
   search_path   
-----------------
"$user", public
(1 row)

4.6 分布式表

4.6.1 查看组

复制代码
yunbeedb=# select * from pgxc_group;
  group_name   | default_group | group_members 
---------------+---------------+---------------
 default_group |             1 | 16384 16385
(1 row)

4.6.2 查看节点

复制代码
yunbeedb=# select oid,node_name,node_type,node_port,node_host,nodeis_primary,nodeis_preferred,node_id,node_plane_name from pgxc_node;
  oid  | node_name | node_type | node_port | node_host  | nodeis_primary | nodeis_preferred |   node_id   |   node_plane_name   
-------+-----------+-----------+-----------+------------+----------------+------------------+-------------+---------------------
 13554 | gtm0001   | G         |     11000 | 172.17.0.2 | t              | f                | -1729643325 | opentenbase_cluster
 13553 | cn0001    | C         |     11003 | 172.17.0.2 | f              | f                |   828637238 | opentenbase_cluster
 16384 | dn0001    | D         |     11006 | 172.17.0.2 | f              | f                |   277862793 | opentenbase_cluster
 16385 | dn0002    | D         |     11006 | 172.17.0.6 | f              | f                |  -815738300 | opentenbase_cluster
(4 rows)

4.6.3 切换到yunbee模式

复制代码
yunbeedb=# set search_path=yunbee;
SET

4.6.4 创建分布式表

复制代码
yunbeedb=# create table  yunbee.employee(empno int not null,name varchar(20),deptno int,primary key(empno)) distribute by shard(empno) to group default_group;
CREATE TABLE

4.6.5 创建索引

复制代码
yunbeedb=# create index idx_name on yunbee.employee(name);
CREATE INDEX

4.6.6 插入数据

复制代码
yunbeedb=# insert into yunbee.employee values(1,'zhangsan',1),(2,'lishi',2),(3,'wangwu',3),(4,'zhaoliu',4);
COPY 4

4.6.7 查看表数据

复制代码
yunbeedb=# select * from employee;
yunbeedb=# execute direct on (dn0001) 'select * from employee';
yunbeedb=# execute direct on (dn0002) 'select * from employee';

4.7 复制表

4.7.1 创建复制表

复制代码
yunbeedb=# create table yunbee.department(deptno int not null,dept_name varchar(20),primary key(deptno)) distribute by replication to group default_group;
CREATE TABLE

4.7.2 插入数据

复制代码
yunbeedb=# insert into yunbee.department values(1,'sales'),(2,'Operations'),(3,'Marketing'),(4,'Technology');
COPY 4

4.7.3 查看数据

复制代码
yunbeedb=# select * from yunbee.department;
yunbeedb=# execute direct on (dn0001) 'select * from yunbee.department';
yunbeedb=# execute direct on (dn0002) 'select * from yunbee.department';

4.8 多表连接

复制代码
yunbeedb=# select e.empno,e.name,d.dept_name from employee e,department d where e.deptno=d.deptno;
 empno |   name   | dept_name  
-------+----------+------------
     1 | zhangsan | sales
     2 | lishi    | Operations
     3 | wangwu   | Marketing
     4 | xiaogang | tech
(4 rows)

4.9 查看执行计划

复制代码
yunbeedb=# explain select e.empno,e.name,d.dept_name from employee e,department d where e.deptno=d.deptno;
                                    QUERY PLAN                                    
----------------------------------------------------------------------------------
 Remote Fast Query Execution
   Node/s: dn0001, dn0002
   ->  Hash Join  (cost=25.98..44.70 rows=690 width=120)
         Hash Cond: (e.deptno = d.deptno)
         ->  Seq Scan on employee e  (cost=0.00..16.90 rows=690 width=66)
         ->  Hash  (cost=17.10..17.10 rows=710 width=62)
               ->  Seq Scan on department d  (cost=0.00..17.10 rows=710 width=62)
(7 rows)

4.10 自定义函数

4.10.1 创建函数

复制代码
yunbeedb=# create or replace function add_num(a int default 1,b int default 1)
yunbeedb-# returns integer as $$
yunbeedb$# declare
yunbeedb$#   res integer;
yunbeedb$# begin
yunbeedb$#    res = a+b;
yunbeedb$#    return res;
yunbeedb$#    raise notice '%d + %d = %d',a,b,res;
yunbeedb$# end;
yunbeedb$# $$ language plpgsql;
CREATE FUNCTION

4.10.2 调用函数

复制代码
yunbeedb=# select add_num(2);
 add_num 
---------
       3
(1 row)


yunbeedb=# select add_num(2,4);
 add_num 
---------
       6
(1 row)

4.10.3 查看函数

复制代码
yunbeedb=# select prosrc from pg_proc where proname='add_num';
                 prosrc                  
-----------------------------------------
                                        +
 declare                                +
   res integer;                         +
 begin                                  +
    res = a+b;                          +
    return res;                         +
    raise notice '%d + %d = %d',a,b,res;+
 end;                                   +
 
(1 row)

4.11 存储过程

4.11.1 创建表

复制代码
yunbeedb=# create table t_proc(id int);
CREATE TABLE

4.11.2 创建存储过程

复制代码
yunbeedb=# yunbeedb=# create or replace procedure p_test()
yunbeedb-# language plpgsql
yunbeedb-# as $$
yunbeedb$# begin
yunbeedb$#     for i in 0..10 loop
yunbeedb$#       insert into t_proc(id) values (i);
yunbeedb$#       if i % 2 = 0 then
yunbeedb$#        commit;
yunbeedb$#       else
yunbeedb$#        rollback;
yunbeedb$#       end if;
yunbeedb$#     end loop;
yunbeedb$# end
yunbeedb$# $$;
CREATE PROCEDURE

4.11.3 执行存储过程

复制代码
yunbeedb=# call p_test();
CALL

4.11.4 查看表数据

复制代码
yunbeedb=# select * from t_proc;
 id 
----
  2
  6
  8
  0
  4
 10
(6 rows)

4.11.5 查看存储过程

复制代码
yunbeedb=# select prosrc from pg_proc where proname='p_test';
                  prosrc                  
------------------------------------------
                                         +
 begin                                   +
     for i in 0..10 loop                 +
       insert into t_proc(id) values (i);+
       if i % 2 = 0 then                 +
        commit;                          +
       else                              +
        rollback;                        +
       end if;                           +
     end loop;                           +
 end                                     +

(1 row)
相关推荐
Bioinfo Guy3 小时前
高分Panel复现系列|转录因子网络太乱?用模块框把重点圈出来
数据库·生物信息学·生信可视化
ltl4 小时前
Disaggregated DB 合集:Socrates、PolarDB、Taurus 的共同模式
数据库
Blossom i7 小时前
大数据预处理与采集实验一:使用Python操作MySQL数据库
数据库·mysql
雾时之林7 小时前
Linux--软件管理、源码包安装
linux·服务器·数据库
老纪的技术唠嗑局9 小时前
超级干货分享:中小企业使用 OceanBase 实践经验汇总
数据库
CLOUD ACE9 小时前
谷歌云代理|零售商Target 如何利用 Spanner Graph 提升零售发现体验并将数据库维护成本降低 50%
数据库·零售
AI大模型-小雄9 小时前
Codex写分页接口为什么越翻越慢?用Cursor Pagination解决重复与漏数据
大数据·数据库·elasticsearch·搜索引擎·chatgpt·后端开发·codex
少晓年10 小时前
从 MySQL 迁移到人大金仓 KingbaseES:完整指南与实践
数据库·mysql
SelectDB11 小时前
Apache Doris AI RAG 实战:从基础 RAG 到知识图谱增强的技术能力与选型
数据库
SelectDB11 小时前
电商企业 PostgreSQL 迁移 Apache Doris:80TB 分析数据统一平台技术能力与实践
数据库