Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ GaussDB(DWS)/ Guía de gestión/ Gestión de clústeres lógicos/ Tutorial: División de un nuevo clúster físico en clústeres lógicos
Actualización más reciente 2024-06-12 GMT+08:00

Tutorial: División de un nuevo clúster físico en clústeres lógicos

Escenario

Esta sección describe cómo dividir un nuevo clúster físico de seis nodos (que no tiene datos de servicio) en dos clústeres lógicos. Si el clúster físico ya tiene datos de servicio, realice las operaciones haciendo referencia a Tutorial: Conversión de un clúster físico que contiene datos en un clúster lógico.

Prerrequisitos

Cree un clúster de seis nodos. Para obtener más información, véase Creación de un clúster de GaussDB(DWS) 2.0.

División de un clúster en clústeres lógicos

  1. En la página Cluster Management, haga clic en el nombre de un clúster para ir a la página de detalles del clúster. En el panel de navegación, elija Logical Clusters.
  2. Haga clic en Add Logical Cluster en la esquina superior derecha, seleccione un anillo de host (tres nodos) a la derecha, agréguelo a la lista de la izquierda, ingrese el nombre de clúster lógico lc1 y haga clic en OK.

    Después de aproximadamente 2 minutos, se añade el clúster lógico.

  3. Repita los pasos anteriores para crear el segundo lc2 de clúster lógico.

Creación de clústeres lógicos, asociación de los mismos con los usuarios y consulta de datos en clústeres lógicos

  1. Conéctese a la base de datos como administrador del sistema dbadmin y ejecute la siguiente sentencia SQL para comprobar si se ha creado el clúster lógico:

    1
    SELECT group_name FROM PGXC_GROUP;
    

  2. Cree usuarios u1 y u2 y asócielos con clústeres lógicos lc1 y lc2 respectivamente.

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

  3. Cambie a u1 de usuario, cree t1 de tabla e inserte datos en la tabla.

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

  4. Cambie a u2 de usuario, cree t2 de tabla e inserte datos en la tabla.

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

  5. Consulte la tabla u1.t1 como usuario u2. El resultado del comando indica que el usuario no tiene el permiso.

    1
    SELECT * FROM u1.t1;
    

  6. Vuelva al administrador del sistema dbadmin y consulte las tablas u1.t1 y u2.t2 que se crean en los clústeres lc1 y lc2 respectivamente, correspondientes a dos servicios. De esta manera, los datos se aíslan basándose en grupos lógicos.

    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. Conceda al usuario u2 los permisos para acceder al clúster lógico lc1, al esquema u1 y a la tabla u1.t1.

    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;
    

    Los clústeres lógicos implementan el aislamiento de permisos (por grupos de nodos) basado en clústeres físicos. Para permitir que un usuario acceda a los datos de los clústeres lógicos, debe conceder al clúster lógico (capa de grupo de nodos), permisos de esquema y permisos de tabla al usuario en secuencia. Si no se conceden permisos de clúster lógico, se mostrará el mensaje de error "permission denied for node group xx".

  8. Cambie a usuario u2 y consulte la tabla u1.t1. La consulta se realiza correctamente. El clúster lógico implementa el aislamiento de datos y permite el acceso entre clústeres lógicos después de la autorización del usuario.

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