Prática de interconexão de dados entre dois clusters do DWS baseados em GDS
Essa prática demonstra como migrar 15 milhões de linhas de dados entre dois clusters do armazém de dados em minutos com base na alta simultaneidade de importação e exportação de GDS.

- Esta função é suportada apenas por clusters da versão 8.1.2 ou posterior.
- O GDS é uma ferramenta de importação e exportação de alta concorrência desenvolvida pelo GaussDB(DWS). Para obter mais informações, visite Descrição de uso do GDS.
- Esta seção descreve apenas a prática de operação. Para obter detalhes sobre a interconexão do GDS e a descrição da sintaxe, consulte Interconexão entre clusters baseada em GDS.
Essa prática leva cerca de 90 minutos. Os recursos de serviço de nuvem usados nessa prática são Data Warehouse Service (DWS), Elastic Cloud Server (ECS) e Virtual Private Cloud (VPC). O processo básico é o seguinte:
- Preparativos
- Passo 1: criar dois clusters do DWS
- Passo 2: preparar dados de origem
- Passo 3: instalar e iniciai o servidor do GDS
- Passo 4: implementar interconexão de dados em clusters do DWS
Regiões suportadas
Tabela 1 descreve as regiões onde os dados do OBS foram carregados.
Região |
Bucket de OBS |
---|---|
CN North-Beijing1 |
dws-demo-cn-north-1 |
CN North-Beijing2 |
dws-demo-cn-north-2 |
CN North-Beijing4 |
dws-demo-cn-north-4 |
CN North-Ulanqab1 |
dws-demo-cn-north-9 |
CN East-Shanghai1 |
dws-demo-cn-east-3 |
CN East-Shanghai2 |
dws-demo-cn-east-2 |
CN South-Guangzhou |
dws-demo-cn-south-1 |
CN South-Guangzhou-InvitationOnly |
dws-demo-cn-south-4 |
CN-Hong Kong |
dws-demo-ap-southeast-1 |
AP-Singapore |
dws-demo-ap-southeast-3 |
AP-Bangkok |
dws-demo-ap-southeast-2 |
LA-Santiago |
dws-demo-la-south-2 |
AF-Johannesburg |
dws-demo-af-south-1 |
LA-Mexico City1 |
dws-demo-na-mexico-1 |
LA-Mexico City2 |
dws-demo-la-north-2 |
RU-Moscow2 |
dws-demo-ru-northwest-2 |
LA-Sao Paulo1 |
dws-demo-sa-brazil-1 |
Restrições
Nessa prática, dois conjuntos de serviços DWS e ECS são implantados na mesma região e VPC para garantir a conectividade de rede.
Preparativos
- Você obteve o AK e SK da conta.
- Você criou uma VPC e uma sub-rede. Para obter detalhes, consulte Criação de uma VPC.
Passo 1: criar dois clusters do DWS
Crie dois clusters do GaussDB(DWS) na região China-Hong Kong. Para obter detalhes, consulte Criação de um cluster. Os dois clusters são denominados dws-demo01 e dws-demo02.
Passo 2: preparar dados de origem
- Na página Cluster Management do console do GaussDB(DWS), clique em Login na coluna Operation do cluster de origem dws-demo01.
Esta prática usa a versão 8.1.3.x como exemplo. 8.1.2 e versões anteriores não suportam este modo de logon. Você pode usar o Data Studio para se conectar a um cluster. Para obter detalhes, consulte Uso do Data Studio para se conectar a um cluster.
- O nome de usuário de logon é dbadmin, o nome do banco de dados é gaussdb e a senha é a senha do usuário dbadmin definida durante a criação do cluster do armazém de dados. Selecione Remember Password, ative Collect Metadata Periodically e Show Executed SQL Statements e clique em Log In.
Figura 1 Fazer logon no GaussDB(DWS)
- Clique no nome do banco de dados gaussdb e clique em SQL Window no canto superior direito para acessar o editor SQL.
- Copie a seguinte instrução SQL para a janela SQL e clique em Execute SQL para criar a tabela TPC-H de teste ORDERS.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
CREATE TABLE ORDERS ( O_ORDERKEY BIGINT NOT NULL , O_CUSTKEY BIGINT NOT NULL , O_ORDERSTATUS CHAR(1) NOT NULL , O_TOTALPRICE DECIMAL(15,2) NOT NULL , O_ORDERDATE DATE NOT NULL , O_ORDERPRIORITY CHAR(15) NOT NULL , O_CLERK CHAR(15) NOT NULL , O_SHIPPRIORITY BIGINT NOT NULL , O_COMMENT VARCHAR(79) NOT NULL) with (orientation = column) distribute by hash(O_ORDERKEY) PARTITION BY RANGE(O_ORDERDATE) ( PARTITION O_ORDERDATE_1 VALUES LESS THAN('1993-01-01 00:00:00'), PARTITION O_ORDERDATE_2 VALUES LESS THAN('1994-01-01 00:00:00'), PARTITION O_ORDERDATE_3 VALUES LESS THAN('1995-01-01 00:00:00'), PARTITION O_ORDERDATE_4 VALUES LESS THAN('1996-01-01 00:00:00'), PARTITION O_ORDERDATE_5 VALUES LESS THAN('1997-01-01 00:00:00'), PARTITION O_ORDERDATE_6 VALUES LESS THAN('1998-01-01 00:00:00'), PARTITION O_ORDERDATE_7 VALUES LESS THAN('1999-01-01 00:00:00') );
- Execute a seguinte instrução SQL para criar uma tabela estrangeira do OBS:
Substitua AK e SK pelos AK e SK reais da conta. <obs_bucket_name> é obtido de Regiões suportadas.
// AK e SK codificados rigidamente ou em texto não criptografado são arriscados. Para fins de segurança, criptografe seu AK e SK e armazene-os no arquivo de configuração ou nas variáveis de ambiente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
CREATE FOREIGN TABLE ORDERS01 ( LIKE orders ) SERVER gsmpp_server OPTIONS ( ENCODING 'utf8', LOCATION obs://<obs_bucket_name>/tpch/orders.tbl', FORMAT 'text', DELIMITER '|', ACCESS_KEY 'access_key_value_to_be_replaced', SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced', CHUNKSIZE '64', IGNORE_EXTRA_DATA 'on' );
- Execute a seguinte instrução SQL para importar dados da tabela estrangeira do OBS para o cluster de armazém de dados de origem: A importação leva cerca de 2 minutos. Por favor, aguarde.
Se ocorrer um erro de importação, os valores de AK e SK da tabela estrangeira estão incorretos. Neste caso, execute o comando DROP FOREIGN TABLE order01; para excluir a tabela estrangeira, criar uma tabela estrangeira novamente e execute a seguinte instrução para importar dados novamente:
1
INSERT INTO orders SELECT * FROM orders01;
- Repita as etapas anteriores para efetuar logon no cluster de destino dws-demo02 e execute a seguinte instrução SQL para criar as ordens da tabela de destino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
CREATE TABLE ORDERS ( O_ORDERKEY BIGINT NOT NULL , O_CUSTKEY BIGINT NOT NULL , O_ORDERSTATUS CHAR(1) NOT NULL , O_TOTALPRICE DECIMAL(15,2) NOT NULL , O_ORDERDATE DATE NOT NULL , O_ORDERPRIORITY CHAR(15) NOT NULL , O_CLERK CHAR(15) NOT NULL , O_SHIPPRIORITY BIGINT NOT NULL , O_COMMENT VARCHAR(79) NOT NULL) with (orientation = column) distribute by hash(O_ORDERKEY) PARTITION BY RANGE(O_ORDERDATE) ( PARTITION O_ORDERDATE_1 VALUES LESS THAN('1993-01-01 00:00:00'), PARTITION O_ORDERDATE_2 VALUES LESS THAN('1994-01-01 00:00:00'), PARTITION O_ORDERDATE_3 VALUES LESS THAN('1995-01-01 00:00:00'), PARTITION O_ORDERDATE_4 VALUES LESS THAN('1996-01-01 00:00:00'), PARTITION O_ORDERDATE_5 VALUES LESS THAN('1997-01-01 00:00:00'), PARTITION O_ORDERDATE_6 VALUES LESS THAN('1998-01-01 00:00:00'), PARTITION O_ORDERDATE_7 VALUES LESS THAN('1999-01-01 00:00:00') );
Passo 3: instalar e iniciai o servidor do GDS
- Crie um ECS consultando Compra de um ECS. Observe que as instâncias do ECS e GaussDB(DWS) devem ser criadas na mesma região e VPC. Neste exemplo, a versão do CentOS 7.6 é selecionada como a imagem do ECS.
- Baixar o pacote do GDS
- Efetue logon no console do GaussDB(DWS).
- Na árvore de navegação à esquerda, clique em Connections.
- Selecione o cliente do GDS da versão correspondente na lista suspensa de CLI Client.
Selecione uma versão com base na versão do cluster e no SO em que o cliente está instalado.
- Clique em Download.
- Use a ferramenta SFTP para fazer upload do cliente baixado (por exemplo, dws_client_8.2.x_redhat_x64.zip) para o diretório /opt do ECS.
- Efetue logon no ECS como o usuário root e execute os seguintes comandos para ir para o diretório /opt e descompactar o pacote do cliente:
1 2
cd /opt unzip dws_client_8.2.x_redhat_x64.zip
- Crie um usuário do GDS e o grupo de usuários ao qual o usuário pertence. Este usuário é usado para iniciar o GDS e ler os dados de origem.
1 2
groupadd gdsgrp useradd -g gdsgrp gds_user
- Altere o proprietário do diretório do pacote do GDS e do diretório do arquivo de dados de origem para o usuário do GDS.
1 2
chown -R gds_user:gdsgrp /opt/gds/bin chown -R gds_user:gdsgrp /opt
- Alterne para o usuário gds.
1
su - gds_user
- Execute os seguintes comandos para ir para o diretório gds e executar variáveis de ambiente:
1 2
cd /opt/gds/bin source gds_env
- Execute o seguinte comando para iniciar o GDS. Você pode exibir o endereço IP interno do ECS no console do ECS.
1
/opt/gds/bin/gds -d /opt -p ECS Intranet IP:5000 -H 0.0.0.0/0 -l /opt/gds/bin/gds_log.txt -D -t 2
- Ative a porta de rede entre o ECS e o DWS.
O servidor do GDS (ECS neste experimento) precisa se comunicar com o DWS. O grupo de segurança padrão do ECS não permite tráfego de entrada da porta do GDS 5000 e da porta DWS 8000. Execute as seguintes etapas:
- Retorne ao console do ECS e clique no nome do ECS para acessar a página de detalhes do ECS.
- Alterne para a guia Security Groups e clique em Configure Rule.
- Selecione Inbound Rules, clique em Add Rule, defina Priority como 1, defina Protocol Port como 5000 e clique em OK.
- Repita as etapas anteriores para adicionar uma regra de entrada de 8000.
Passo 4: implementar interconexão de dados em clusters do DWS
- Crie um servidor.
- Obtenha o endereço IP privado do cluster de armazém de dados de origem: Alterne para o console do DWS, escolha Cluster Management à esquerda e clique no nome de cluster de origem dws-demo01.
- Vá para a página de detalhes do cluster e registre o endereço IP interno do DWS.
- Volte para o console do DWS e clique em Log In na coluna Operation do destino dws-demo02. A janela SQL é exibida,
Execute o seguinte comando para criar um servidor:
O endereço IP privado do cluster de armazém de dados de origem é obtido na etapa anterior. O endereço IP privado do servidor do ECS é obtido do console do ECS. A senha de logon do usuário dbadmin é definida quando o cluster do armazém de dados é criado.
1 2 3 4 5 6 7 8 9
CREATE SERVER server_remote FOREIGN DATA WRAPPER GC_FDW OPTIONS ( address'Private network IP address of the source DWS cluster :8000', dbname 'gaussdb', username 'dbadmin', password'Password of user dbadmin', syncsrv'gsfs://Internal IP address of the ECS server:5000' ) ;
- Crie uma tabela estrangeira para interconexão.
Na janela SQL do cluster de destino dws-demo02, execute o seguinte comando para criar uma tabela estrangeira para interconexão:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
CREATE FOREIGN TABLE ft_orders ( O_ORDERKEY BIGINT , O_CUSTKEY BIGINT , O_ORDERSTATUS CHAR(1) , O_TOTALPRICE DECIMAL(15,2) , O_ORDERDATE DATE , O_ORDERPRIORITY CHAR(15) , O_CLERK CHAR(15) , O_SHIPPRIORITY BIGINT , O_COMMENT VARCHAR(79) ) SERVER server_remote OPTIONS ( schema_name 'public', table_name 'orders', encoding 'SQL_ASCII' );
- Importe todos os dados da tabela.
Na janela SQL, execute a seguinte instrução SQL para importar dados completos da tabela estrangeira ft_orders: Aguarde cerca de 1 minuto.
1
INSERT INTO orders SELECT * FROM ft_orders;
Execute a seguinte instrução SQL. Constatou-se que 15 milhões de linhas de dados são importadas com sucesso.
1
SELECT count(*) FROM orders;
- Importe dados com base em critérios de filtro.
Execute as seguintes instruções SQL para importar dados com base nos critérios de filtro:
1
INSERT INTO orders SELECT * FROM ft_orders WHERE o_orderkey < '10000000';