Для швідкістного імпорту великого об’єму даних прилетіла таска налатувати кластер postgres-xl. Як і все opensource – налаштування кластеру, це танці з бубном, почну…
Для первинного налаштування, та перших тестів я нашатував три сервера:
- GTM master сервер – Global Transaction Manager, потрібен для надання ID глобальних транзакцій. = private.gtm-1.domain.com
- Coordinator – відповідає за розбиття, планування виконання запитів, консолідація результатів виконання запитів. = private.pgc-1.domain.com
- Datanode – сховище даних. = private.pgd-1.domain.com
Поперше потрібно встановити залежності на всіх серверах:
1 |
apt install mc vim make lsof gcc libreadline-dev zlib1g-dev libpam0g-dev libxml2-dev libxslt1-dev libsystemd-dev bison flex bind9 |
Далі додаємо юзера для роботи postgres:
1 |
useradd -s /bin/bash postgres |
Клонуємо репу з сорсами postgres-xl:
1 |
cd /usr/src/ && git clone https://git.postgresql.org/git/postgres-xl.git |
Запускаємо налаштування сорсів, збирання та встановлення postgres-xl:
1 2 3 |
./configure --prefix=/usr/local/pgsql --with-pam --with-systemd --with-libxml --with-libxslt make make install |
Встановлюємо pgxc_ctl:
1 |
/usr/src/postgres-xl/contrib/pgxc_ctl && make && make install |
Додаємо bin/ каталог з потрібним софтом у $PATH
1 2 |
cat /etc/environment PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/pgsql/bin" |
Також юзеру postgres у домашню директорію додаю у .bashrc
1 2 3 4 5 6 |
export dataDirRoot=$HOME/DATA/pgxl/nodes export PATH=$PATH:/usr/local/pgsql/bin export PGUSER=postgres export PGHOME=/usr/local/pgsql export PATH=$PATH:$PGHOME/bin export LD_LIBRARY_PATH=$PGHOME/lib |
Перезавантажую сервер….
На всіх серверах налаштував hostname щоб резолв був на internal IP та тепер можна почати налаштувааня.
Зі всіх серверів збираю id_rsa.pub та додаю у authorized_keys на GTM сервері
GTM:
Запускаю pgxc_ctl для створення первинних налаштувань
1 2 3 |
$ pgxc_ctl PGXC$ prepare config empty PGXC$ exit |
Додаю gtm master node:
1 |
add gtm master gtm privacy.gtm-1.domain.com 20001 $dataDirRoot/gtm |
Далі додаю coordinator node:
1 |
add coordinator master coord1 privacy.pgc-1.domain.com 30001 30011 $dataDirRoot/coord_master.1 none none |
Далі додаю datanode:
1 |
add datanode master dn1 privacy.pgd-1.domain.com 40001 40011 $dataDirRoot/dn_master.1 none none none |
На pgc та pgd прописую доступ у pg_hba.conf до баз для моєї мережі:
1 |
host all all 10.136.0.0/16 trust |
Прервіряю чи все ОК:
1 |
$ pgxc_ctl monitor all |
Далі потрібно прописати налаштування серверів у pgc да pgd, як на мене це дуже дивна штука – бо сетапили GTM та як на мене логічно було б зробити ці налаштування автоматичними, але у мене без цього не “пішло”:
На coordinator node:
1 2 3 4 5 6 7 8 9 |
# su -s /bin/bash postgres $ psql -p 30001 postgres=# delete from pgxc_node; postgres=# create node coord1 with (type=coordinator, host='privacy.pgc-1.domain.com', port=30001); postgres=# create node dn1 with (type=datanode, host='privacy.pgd-1.domain.com', port=40001); postgres=# SELECT pgxc_pool_reload(); postgres=# execute direct on (dn1) 'create node coord1 with (type=coordinator, host=''private.pgc-01.domain.com'', port=30001)'; postgres=# SELECT pgxc_pool_reload(); |
Перевіряємо чи все корректно працює, для цього створюємо тестову базу, юзера та даємо юзеру права на роботу з базою:
1 2 3 4 |
postgres=# create database import; postgres=# create user import with encrypted password 'password'; postgres=# grant all privileges on database import to import; postgres=#\l |
Якщо бачимо свою базу у списку баз, то все добре. Далі можна додати скрипти автоматичного запуску, зупинки сервесів кластера, для цього потрібно підналаштувати скрипт прикладу у
1 |
/usr/src/postgres-xl/contrib/start-scripts/linux |