场景介绍
本章节演示一套全新6节点物理集群(无业务数据)划分为2套逻辑集群的操作。
前提条件
创建6个节点的集群。
划分逻辑集群
- 在集群管理页面,单击指定集群名称进入集群详情页面,左导航栏单击“逻辑集群管理”。
- 进入逻辑集群页面,单击右上角“添加逻辑集群”,从右侧勾选1个主机环(3个节点)到左侧列表中,并输入逻辑集群名称lc1,单击“确定”。
等待约2分钟,逻辑集群添加成功。
- 重复以上步骤,划分第二套逻辑集群lc2。
创建逻辑集群关联用户并跨逻辑集群查询数据
- 以系统管理员dbadmin连接数据库,执行以下SQL语句查看逻辑集群创建成功。
SELECT group_name FROM PGXC_GROUP;
- 创建两个用户u1和u2,分别关联逻辑集群lc1和逻辑集群lc2。
CREATE USER u1 NODE GROUP "lc1" password ' {password} ';
CREATE USER u2 NODE GROUP "lc2" password ' {password} ';
- 切换到用户u1,创建表t1,并插入数据。
SET ROLE u1 PASSWORD ' {password} ';
CREATE TABLE u1.t1 (id int);
INSERT INTO u1.t1 VALUES (1),(2);
- 切换到用户u2,创建表t2,并插入数据。
SET ROLE u2 PASSWORD ' {password} ';
CREATE TABLE u2.t2 (id int);
INSERT INTO u2.t2 VALUES (1),(2);
- 同时使用u2查询u1.t1表。返回结果提示没有权限。
SELECT * FROM u1.t1;
- 切换回系统管理员dbadmin,查询表u1.t1和u2.t2分别创建到了集群lc1和lc2中,分别对应企业的两块业务,实现了基于逻辑集群的数据隔离。
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';
- 将逻辑集群lc1的访问权限授予用户u2,同时将SCHEMA u1访问权限、表u1.t1访问权限授予用户u2。
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的错误信息。
- 再次切换到u2用户,查询u1.t1表,查询成功,逻辑集群既实现了数据隔离,又可以在用户授权后进行跨逻辑集群访问。
SET ROLE u2 PASSWORD ' {password} ';
SELECT * FROM u1.t1;