Asynchronously replicating data from Yandex Managed Service for PostgreSQL to Yandex Managed Service for YDB
A Managed Service for YDB cluster can get data from PostgreSQL databases in real time. This data is automatically added to YDB tables with names of source schemas and tables.
To run data transfer:
If you no longer need these resources, delete them.
Before you begin
Prepare the data transfer infrastructure:
- Create a source Managed Service for PostgreSQL cluster in any applicable configuration with publicly available hosts.
- Create a Managed Service for YDB database in any suitable configuration.
- In the source cluster, create a user and assign to them the
mdb_replication
role.
-
If you don't have Terraform, install and configure it.
-
Download the file with provider settings. Place it in a separate working directory and specify the parameter values.
-
Download the data-transfer-mpg-ydb.tf configuration file to the same working directory.
This file describes:
- Network.
- Subnet.
- Security groups and the rule required to connect to a Managed Service for PostgreSQL cluster.
- Managed Service for PostgreSQL source cluster.
- PostgreSQL database.
- Managed Service for PostgreSQL user.
- Managed Service for YDB database.
- Source endpoint.
- Transfer.
-
In the
data-transfer-mpg-ydb.tf
file, specify the values of parameters:source_pg_version
: PostgreSQL version in the source cluster.source_db_name
: DB name in the source cluster.source_user_name
: Username for establishing a connection to the source cluster.source_user_password
: User password.target_db_name
: Managed Service for YDB database name.transfer_enabled
: Set0
to ensure that no transfer and source endpoint is created before you manually create a target endpoint.
-
Run the command
terraform init
in the directory with the configuration file. This command initializes the provider specified in the configuration files and enables you to use the provider resources and data sources. -
Make sure the Terraform configuration files are correct using the command:
terraform validate
If there are errors in the configuration files, Terraform will point to them.
-
Create the required infrastructure:
-
Run the command to view planned changes:
terraform plan
If the resource configuration descriptions are correct, the terminal will display a list of the resources to modify and their parameters. This is a test step. No resources are updated.
-
If you are happy with the planned changes, apply them:
-
Run the command:
terraform apply
-
Confirm the update of resources.
-
Wait for the operation to complete.
-
All the required resources will be created in the specified folder. You can check resource availability and their settings in the management console.
-
Prepare the source cluster
-
Connect to the database of the source cluster on behalf of the new user.
-
Add test data to the database. In this example, a simple table with information from car sensors is used.
Create a table:
CREATE TABLE public.sensors ( "device_id" text PRIMARY KEY NOT NULL, "datetime" timestamp NOT NULL, "latitude" real NOT NULL, "longitude" real NOT NULL, "altitude" real NOT NULL, "speed" real NOT NULL, "battery_voltage" real, "cabin_temperature" real NOT NULL, "fuel_level" real );
Populate the table with data:
INSERT INTO public.sensors VALUES ('iv9a94th6rztooxh5ur2', '2020-06-05 17:27:00', 55.70329032, 37.65472196, 427.5, 0, 23.5, 17, NULL), ('rhibbh3y08qmz3sdbrbu', '2020-06-06 09:49:54', 55.71294467, 37.66542005, 429.13, 55.5, NULL, 18, 32), ('iv9a94th678tooxh5ur2', '2020-06-07 15:00:10', 55.70985913, 37.62141918, 417.0, 15.7, 10.3, 17, NULL);
Prepare and activate the transfer
-
-
Database type:
YDB
. -
Endpoint parameters:
- Connection settings:
- Database: Select a Managed Service for YDB database from the list.
- Service account ID: Select or create a service account with the
ydb.editor
role.
- Connection settings:
-
-
Create a source endpoint and transfer:
ManuallyUsing Terraform-
Create an endpoint for the previously created PostgreSQL source with the following settings:
- DB type:
PostgreSQL
. - Endpoint parameters:
- Connection settings:
MDB cluster
. - MDB cluster: Managed Service for PostgreSQL cluster that you created.
- Database name: Name of the database created in the Managed Service for PostgreSQL cluster.
- Username: Name of the user created in the Managed Service for PostgreSQL cluster.
- Password: Password of the user.
- List of included tables:
<DB name>.sensors
.
- Connection settings:
- DB type:
-
Create a transfer of the Snapshot and increment type that will use the created endpoints.
-
Enable the transfer.
-
In the
data-transfer-mpg-ydb.tf
file, specify the values of parameters:target_endpoint_id
: ID of the target endpoint.transfer_enabled
: For creating a source endpoint and a transfer, the value is1
.
-
Make sure the Terraform configuration files are correct using the command:
terraform validate
If there are errors in the configuration files, Terraform will point to them.
-
Create the required infrastructure:
-
Run the command to view planned changes:
terraform plan
If the resource configuration descriptions are correct, the terminal will display a list of the resources to modify and their parameters. This is a test step. No resources are updated.
-
If you are happy with the planned changes, apply them:
-
Run the command:
terraform apply
-
Confirm the update of resources.
-
Wait for the operation to complete.
-
Once created, a transfer is activated automatically.
-
-
Test the transfer
-
Wait for the transfer status to change to Replicating.
-
Make sure that the data from the source Managed Service for PostgreSQL cluster has been moved to the Managed Service for YDB database:
Management consoleYDB CLI- In the management console, select the folder with the desired DB.
- In the list of services, select Managed Service for YDB.
- Select the database from the list.
- Go to the Navigation tab.
- Check that the Managed Service for YDB database contains the
public_sensors
table with the test data.
-
Check that the database contains the
public_sensors
table with the test data:ydb table query execute \ --query "SELECT * \ FROM public_sensors"
-
Connect to the Managed Service for PostgreSQL source cluster and add data to the
measurements
table:INSERT INTO public.sensors VALUES ('iv7b74th678tooxh5ur2', '2020-06-08 17:45:00', 53.70987913, 36.62549834, 378.0, 20.5, 5.3, 20, NULL);
-
Check that the Managed Service for YDB database shows information about the row added:
Management consoleYDB CLI- In the management console, select the folder with the desired DB.
- In the list of services, select Managed Service for YDB.
- Select the database from the list.
- Go to the Navigation tab.
- Check that new data has been added to the
public_sensors
table.
-
Check that new data has been added to the
public_sensors
table:ydb table query execute \ --query "SELECT * \ FROM public_sensors"
Delete the resources you created
If you no longer need these resources, delete them:
- Deactivate and delete the transfer.
- Delete endpoints for the source and target.
- If you created the service account along with the target endpoint, delete it.
- Delete the Managed Service for YDB database.
- Delete the Managed Service for PostgreSQL cluster.
-
In the terminal, go to the working directory that includes the
data-transfer-mpg-ydb.tf
configuration file. -
Delete resources using the command:
terraform destroy
-
Type the word
yes
, then press Enter.All the resources described in the
data-transfer-mpg-ydb.tf
configuration file will be deleted.