The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Доступна распределённая СУБД CitusDB 7.3"
Отправлено raver, 08-Апр-18 11:54 
Да использую, хорошо работает, даже очень.
Основное ограничения Community Edition в том, что нельзя потом ребаланс данных сделать, елси добавляешь новые ноды.

На одном стартапе сделали так, чтобы обойти ограничение и не брать сразу 16 серверов:

Повесили по 4 IP адреса и создали по 4 ноды с данными на каждом физ. сервере из 4-х машин заранее. В дальнейшем при добавлении но, просто тушили ноду, снимали IP и копировали ее каталог с данными на другую машину, включали там со старым IP. Профит:

Пример настройки:

1 сервер. 4 ноды с данными + координатор (WAL репликация синхронная)
2 сервер. 4 ноды с данными + координатор slave (WAL репликация синхронная)
3 сервер. 4 ноды с данными
4 сервер. 4 ноды с данными

Итого 16 нод. Использовали встроенную Citus репликацию, а не WAL, так при отсутствии нод Citus продолжает работать. Между координаторами WAL синхронная для метаданных.

Базовая онфигурация 1-го и 2го сервера, WAL репликацию между координаторами тут не показываю. Для 3-го и 4-го сервера просто не выполнять связанные строки c coordintor.

Репликация Citus включается указанием:

citus.shard_replication_factor = 2 (Ниже есть sed по этому поводу)

#!/bin/bash

pg_dropcluster --stop 10 main

pg_createcluster --start --start-conf=auto --locale ru_RU.UTF-8 --lc-collate ru_RU.UTF-8 -p 5432 10 coordinator -- --auth trust --auth-local trust --auth-host trust
pg_createcluster --start --start-conf=auto --locale ru_RU.UTF-8 --lc-collate ru_RU.UTF-8 -p 5433 10 main1 -- --auth trust --auth-local trust --auth-host
trust
pg_createcluster --start --start-conf=auto --locale ru_RU.UTF-8 --lc-collate ru_RU.UTF-8 -p 5434 10 main2 -- --auth trust --auth-local trust --auth-host
trust
pg_createcluster --start --start-conf=auto --locale ru_RU.UTF-8 --lc-collate ru_RU.UTF-8 -p 5435 10 main3 -- --auth trust --auth-local trust --auth-host
trust
pg_createcluster --start --start-conf=auto --locale ru_RU.UTF-8 --lc-collate ru_RU.UTF-8 -p 5436 10 main4 -- --auth trust --auth-local trust --auth-host
trust

pg_conftool 10 coordinator set max_connections 2048
pg_conftool 10 main1 set max_connections 1024
pg_conftool 10 main2 set max_connections 1024
pg_conftool 10 main3 set max_connections 1024
pg_conftool 10 main4 set max_connections 1024

pg_conftool 10 coordinator set listen_addresses '*'
pg_conftool 10 main1 set listen_addresses '*'
pg_conftool 10 main2 set listen_addresses '*'
pg_conftool 10 main3 set listen_addresses '*'
pg_conftool 10 main4 set listen_addresses '*'

pg_conftool 10 coordinator set shared_preload_libraries citus
pg_conftool 10 main1 set shared_preload_libraries citus
pg_conftool 10 main2 set shared_preload_libraries citus
pg_conftool 10 main3 set shared_preload_libraries citus
pg_conftool 10 main4 set shared_preload_libraries citus

echo "host    all             all             172.21.1.0/24            trust" >> /etc/postgresql/10/coordinator/pg_hba.conf
echo "host    all             all             172.21.1.0/24            trust" >> /etc/postgresql/10/main1/pg_hba.conf
echo "host    all             all             172.21.1.0/24            trust" >> /etc/postgresql/10/main2/pg_hba.conf
echo "host    all             all             172.21.1.0/24            trust" >> /etc/postgresql/10/main3/pg_hba.conf
echo "host    all             all             172.21.1.0/24            trust" >> /etc/postgresql/10/main4/pg_hba.conf

sed -i -e "/shared_preload_libraries = citus/a citus.shard_replication_factor = 2" /etc/postgresql/10/coordinator/postgresql.conf
sed -i -e "/citus.shard_replication_factor = 2/a citus.shard_count = 128" /etc/postgresql/10/coordinator/postgresql.conf

sed -i -e "/shared_preload_libraries = citus/a citus.shard_replication_factor = 2" /etc/postgresql/10/main1/postgresql.conf
sed -i -e "/citus.shard_replication_factor = 2/a citus.shard_count = 128" /etc/postgresql/10/main1/postgresql.conf

sed -i -e "/shared_preload_libraries = citus/a citus.shard_replication_factor = 2" /etc/postgresql/10/main2/postgresql.conf
sed -i -e "/citus.shard_replication_factor = 2/a citus.shard_count = 128" /etc/postgresql/10/main2/postgresql.conf

sed -i -e "/shared_preload_libraries = citus/a citus.shard_replication_factor = 2" /etc/postgresql/10/main3/postgresql.conf
sed -i -e "/citus.shard_replication_factor = 2/a citus.shard_count = 128" /etc/postgresql/10/main3/postgresql.conf

sed -i -e "/shared_preload_libraries = citus/a citus.shard_replication_factor = 2" /etc/postgresql/10/main4/postgresql.conf
sed -i -e "/citus.shard_replication_factor = 2/a citus.shard_count = 128" /etc/postgresql/10/main4/postgresql.conf

systemctl disable postgresql

systemctl enable postgresql@10-coordinator
systemctl enable postgresql@10-main1
systemctl enable postgresql@10-main2
systemctl enable postgresql@10-main3
systemctl enable postgresql@10-main4

systemctl restart postgresql@10-coordinator
systemctl restart postgresql@10-main1
systemctl restart postgresql@10-main2
systemctl restart postgresql@10-main3
systemctl restart postgresql@10-main4

sleep 5

su postgres -c "psql -h 127.0.0.1 -p 5432 -c 'CREATE DATABASE cdr;'"
su postgres -c "psql -h 127.0.0.1 -p 5432 -d cdr -c 'CREATE EXTENSION citus;'"

su postgres -c "psql -h 127.0.0.1 -p 5433 -c 'CREATE DATABASE cdr;'"
su postgres -c "psql -h 127.0.0.1 -p 5433 -d cdr -c 'CREATE EXTENSION citus;'"

su postgres -c "psql -h 127.0.0.1 -p 5434 -c 'CREATE DATABASE cdr;'"
su postgres -c "psql -h 127.0.0.1 -p 5434 -d cdr -c 'CREATE EXTENSION citus;'"

su postgres -c "psql -h 127.0.0.1 -p 5435 -c 'CREATE DATABASE cdr;'"
su postgres -c "psql -h 127.0.0.1 -p 5435 -d cdr -c 'CREATE EXTENSION citus;'"

su postgres -c "psql -h 127.0.0.1 -p 5436 -c 'CREATE DATABASE cdr;'"
su postgres -c "psql -h 127.0.0.1 -p 5436 -d cdr -c 'CREATE EXTENSION citus;'"

Далее добавляете ноды через 1-ый координатор:
IP адреса: 51,52,53,54 = 1-ый сервер. И так далее для остальных серверов.

psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.51', 5433);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.61', 5433);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.71', 5433);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.81', 5433);"

psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.52', 5434);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.62', 5434);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.72', 5434);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.82', 5434);"

psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.53', 5435);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.63', 5435);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.73', 5435);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.83', 5435);"

psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.54', 5436);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.64', 5436);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.74', 5436);"
psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * from master_add_node('172.21.1.84', 5436);"

psql -U postgres -d cdr -h 127.0.0.1 -p 5432 -c "SELECT * FROM master_get_active_worker_nodes();"

Далее создаете таблицу в базе cdr как обычно в стандратном постгресе через 1-ый координатор и назначаете ее distributed:

SELECT create_distributed_table('pgbench_history', 'aid');

Всё, можно писать данные. Кол-во шардов 16-128 выше задается, зависит от задач на сколько шардов бить еще таблицу.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру