Да использую, хорошо работает, даже очень.
Основное ограничения 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 выше задается, зависит от задач на сколько шардов бить еще таблицу.
|