更新时间:2024-12-11 GMT+08:00

教程:新物理集群划分为逻辑集群

场景介绍

本章节演示一套全新6节点物理集群(无业务数据)划分为2套逻辑集群的操作。如果物理集群已有业务数据,请参见教程:已有数据的物理集群转换逻辑集群操作。

前提条件

参见创建GaussDB(DWS)存算一体集群章节创建6个节点的集群。

划分逻辑集群

  1. 在集群管理页面,单击指定集群名称进入集群详情页面,左导航栏单击“逻辑集群管理”。
  2. 进入逻辑集群页面,单击右上角“添加逻辑集群”,从右侧勾选1个主机环(3个节点)到左侧列表中,并输入逻辑集群名称lc1,单击“确定”。

    等待约2分钟,逻辑集群添加成功。

  3. 重复以上步骤,划分第二套逻辑集群lc2。

创建逻辑集群关联用户并跨逻辑集群查询数据

  1. 以系统管理员dbadmin连接数据库,执行以下SQL语句查看逻辑集群创建成功。

    1
    SELECT group_name FROM PGXC_GROUP;
    

  2. 创建两个用户u1和u2,分别关联逻辑集群lc1和逻辑集群lc2。

    1
    2
    CREATE USER u1  NODE GROUP "lc1" password '{password}';
    CREATE USER u2  NODE GROUP "lc2" password '{password}';
    

  3. 切换到用户u1,创建表t1,并插入数据。

    1
    2
    3
    SET ROLE u1 PASSWORD '{password}';
    CREATE TABLE u1.t1 (id int);
    INSERT INTO u1.t1 VALUES (1),(2);
    

  4. 切换到用户u2,创建表t2,并插入数据。

    1
    2
    3
    SET ROLE u2 PASSWORD '{password}';
    CREATE TABLE u2.t2 (id int);
    INSERT INTO u2.t2 VALUES (1),(2);
    

  5. 同时使用u2查询u1.t1表。返回结果提示没有权限。

    1
    SELECT * FROM u1.t1;
    

  6. 切换回系统管理员dbadmin,查询表u1.t1和u2.t2分别创建到了集群lc1和lc2中,分别对应企业的两块业务,实现了基于逻辑集群的数据隔离。

    1
    2
    3
    SET ROLE dbadmin PASSWORD '{password}';
    SELECT p.oid,relname,pgroup,nodeoids FROM pg_class p LEFT JOIN pgxc_class pg ON p.oid = pg.pcrelid WHERE p.relname = 't1';
    SELECT p.oid,relname,pgroup,nodeoids FROM pg_class p LEFT JOIN pgxc_class pg ON p.oid = pg.pcrelid WHERE p.relname = 't2';
    

  7. 将逻辑集群lc1的访问权限授予用户u2,同时将SCHEMA u1访问权限、表u1.t1访问权限授予用户u2。

    1
    2
    3
    GRANT usage ON NODE GROUP lc1 TO u2;
    GRANT usage ON SCHEMA u1 TO u2;
    GRANT select ON TABLE u1.t1 TO u2;
    

    划分逻辑集群后,相当于在原来物理集群的基础上,再增加一层逻辑集群(NODE GROUP)的权限隔离。所以跨逻辑集群访问数据,首先要授权用户有逻辑集群(NODE GROUP层)权限,其次是SCHEMA权限,最后是单张表TABLE权限。如果没有授予逻辑集群的权限,会提示类似permission denied for node group xx的错误信息。

  8. 再次切换到u2用户,查询u1.t1表,查询成功,逻辑集群既实现了数据隔离,又可以在用户授权后进行跨逻辑集群访问。

    1
    2
    SET ROLE u2 PASSWORD '{password}';
    SELECT * FROM u1.t1;