【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)
相关推荐
阿贵---2 小时前
定时任务专家:Python Schedule库使用指南
jvm·数据库·python
TsukasaNZ2 小时前
如何为开源Python项目做贡献?
jvm·数据库·python
尽兴-2 小时前
构建坚如磐石的 Redis 服务:数据安全性与高可用架构全解析
数据库·redis·架构·主从·aof·哨兵·rdb
老刘学达梦2 小时前
达梦数据库表统计信息收集时间分析
数据库
范纹杉想快点毕业2 小时前
C语言综合项目实战练手:基于C语言的简单数据库系统实现
服务器·c语言·数据库
2401_831920742 小时前
Python生成器(Generator)与Yield关键字:惰性求值之美
jvm·数据库·python
lifewange2 小时前
Hive数据库
数据库·hive·hadoop
运维 小白2 小时前
3. 部署redis服务并监控redis
数据库·redis·缓存
2401_842623652 小时前
使用Seaborn绘制统计图形:更美更简单
jvm·数据库·python