پرو ہوسٹر > بلاگ > انتظامیہ > Patroni، etcd، HAProxy کا استعمال کرتے ہوئے ایک انتہائی دستیاب PostgreSQL کلسٹر بنانا
Patroni، etcd، HAProxy کا استعمال کرتے ہوئے ایک انتہائی دستیاب PostgreSQL کلسٹر بنانا
بس ایسا ہی ہوا کہ جس وقت یہ مسئلہ پیش آیا، میرے پاس اتنا تجربہ نہیں تھا کہ میں اکیلے اس حل کو تیار کر سکوں۔ اور پھر میں نے گوگلنگ شروع کی۔
میں نہیں جانتا کہ کیچ کیا ہے، لیکن مجھے اس حقیقت کا سامنا کرنا پڑا ہے کہ اگر میں ٹیوٹوریل کی طرح قدم بہ قدم سب کچھ کرتا ہوں، مصنف جیسا ماحول تیار کرتا ہوں، تب بھی کچھ کام نہیں ہوتا۔ مجھے نہیں معلوم کہ معاملہ کیا ہے، لیکن جب مجھے دوبارہ اس کا سامنا ہوا، تو میں نے فیصلہ کیا کہ جب سب کچھ ٹھیک ہو جائے گا تو میں اپنا ٹیوٹوریل لکھوں گا۔ ایک جو یقینی طور پر کام کرے گا۔
انٹرنیٹ پر گائیڈز
ایسا ہوتا ہے کہ انٹرنیٹ مختلف گائیڈز، ٹیوٹوریلز، قدم بہ قدم اور اس طرح کی کمی کا شکار نہیں ہوتا ہے۔ ایسا ہی ہوا کہ مجھے فیل اوور پوسٹگری ایس کیو ایل کلسٹر کو آسانی سے ترتیب دینے اور بنانے کے لیے ایک حل تیار کرنے کا کام سونپا گیا، جس کے لیے بنیادی تقاضے ماسٹر سرور سے تمام نقلوں تک نقل تیار کرنا اور ماسٹر سرور کی صورت میں ریزرو کی خودکار فراہمی تھی۔ ناکامی
اس مرحلے پر، استعمال شدہ ٹیکنالوجیز کے اسٹیک کا تعین کیا گیا تھا:
ڈیٹا بیس کا استعمال کرتے ہوئے ایپلی کیشنز کے لیے ایک ہی انٹری پوائنٹ کو منظم کرنے کے لیے HAproxy
تنصیب
آپ کی توجہ کے لیے - Patroni, etcd, HAProxy کا استعمال کرتے ہوئے ایک انتہائی دستیاب PostgreSQL کلسٹر بنانا۔
تمام کارروائیاں ورچوئل مشینوں پر انجام دی گئیں جن میں ڈیبیان 10 OS نصب تھا۔
وغیرہ
میں ایک ہی مشینوں پر etcd انسٹال کرنے کی سفارش نہیں کرتا ہوں جہاں پیٹرونی اور پوسٹگریس کی ایل واقع ہوں گے، کیونکہ ڈسک لوڈ etcd کے لیے بہت اہم ہے۔ لیکن تعلیمی مقاصد کے لیے، ہم ایسا ہی کریں گے۔
چلو وغیرہ انسٹال کرتے ہیں۔
#!/bin/bash
apt-get update
apt-get install etcd
/etc/default/etcd فائل میں مواد شامل کریں۔
[رکن]
ETCD_NAME=datanode1 # آپ کی مشین کا میزبان نام
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
تمام آئی پی ایڈریسز درست ہونے چاہئیں۔ لسٹر پیر، کلائنٹ وغیرہ کو میزبان کے آئی پی ایڈریس پر سیٹ کیا جانا چاہیے
سب سے پہلے آپ کو تین ورچوئل مشینیں ترتیب دینے کی ضرورت ہے تاکہ ان پر ضروری سافٹ ویئر انسٹال کریں۔ مشینیں انسٹال کرنے کے بعد، اگر آپ میرے ٹیوٹوریل پر عمل کرتے ہیں، تو آپ اس سادہ اسکرپٹ کو چلا سکتے ہیں جو (تقریباً) آپ کے لیے سب کچھ کر دے گی۔ جڑ کے طور پر چلتا ہے۔
براہ کرم نوٹ کریں کہ اسکرپٹ PostgreSQL ورژن 9.6 کا استعمال کرتا ہے، یہ ہماری کمپنی کی اندرونی ضروریات کی وجہ سے ہے۔ پوسٹگری ایس کیو ایل کے دوسرے ورژن پر حل کا تجربہ نہیں کیا گیا ہے۔
اس کے بعد، آپ کی ابھی بنائی گئی /etc/patroni.yml فائل میں، آپ کو مندرجہ ذیل مواد رکھنے کی ضرورت ہے، یقیناً تمام جگہوں کے IP پتوں کو ان پتوں پر تبدیل کرنا ہے جو آپ استعمال کرتے ہیں۔
اس یامل کے تبصروں پر توجہ دیں۔ کلسٹر میں ہر مشین پر پتے کو اپنی مرضی سے تبدیل کریں۔
/etc/patroni.yml
scope: pgsql # должно быть одинаковым на всех нодах
namespace: /cluster/ # должно быть одинаковым на всех нодах
name: postgres1 # должно быть разным на всех нодах
restapi:
listen: 192.168.0.143:8008 # адрес той ноды, в которой находится этот файл
connect_address: 192.168.0.143:8008 # адрес той ноды, в которой находится этот файл
etcd:
hosts: 192.168.0.143:2379,192.168.0.144:2379,192.168.0.145:2379 # перечислите здесь все ваши ноды, в случае если вы устанавливаете etcd на них же
# this section (bootstrap) will be written into Etcd:/<namespace>/<scope>/config after initializing new cluster
# and all other cluster members will use it as a `global configuration`
bootstrap:
dcs:
ttl: 100
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
postgresql:
use_pg_rewind: true
use_slots: true
parameters:
wal_level: replica
hot_standby: "on"
wal_keep_segments: 5120
max_wal_senders: 5
max_replication_slots: 5
checkpoint_timeout: 30
initdb:
- encoding: UTF8
- data-checksums
- locale: en_US.UTF8
# init pg_hba.conf должен содержать адреса ВСЕХ машин, используемых в кластере
pg_hba:
- host replication postgres ::1/128 md5
- host replication postgres 127.0.0.1/8 md5
- host replication postgres 192.168.0.143/24 md5
- host replication postgres 192.168.0.144/24 md5
- host replication postgres 192.168.0.145/24 md5
- host all all 0.0.0.0/0 md5
users:
admin:
password: admin
options:
- createrole
- createdb
postgresql:
listen: 192.168.0.143:5432 # адрес той ноды, в которой находится этот файл
connect_address: 192.168.0.143:5432 # адрес той ноды, в которой находится этот файл
data_dir: /data/patroni # эту директорию создаст скрипт, описанный выше и установит нужные права
bin_dir: /usr/lib/postgresql/9.6/bin # укажите путь до вашей директории с postgresql
pgpass: /tmp/pgpass
authentication:
replication:
username: postgres
password: postgres
superuser:
username: postgres
password: postgres
create_replica_methods:
basebackup:
checkpoint: 'fast'
parameters:
unix_socket_directories: '.'
tags:
nofailover: false
noloadbalance: false
clonefrom: false
nosync: false
اسکرپٹ کو کلسٹر کی تینوں مشینوں پر چلایا جانا چاہیے، اور مندرجہ بالا کنفیگریشن کو تمام مشینوں پر /etc/patroni.yml فائل میں بھی رکھا جانا چاہیے۔
ایک بار جب آپ کلسٹر میں تمام مشینوں پر یہ آپریشن مکمل کر لیں تو ان میں سے کسی پر بھی درج ذیل کمانڈ چلائیں۔
تقریباً 30 سیکنڈ انتظار کریں، پھر اس کمانڈ کو کلسٹر میں باقی مشینوں پر چلائیں۔
HAproxy
ہم داخلے کا ایک نقطہ فراہم کرنے کے لیے شاندار HAproxy استعمال کرتے ہیں۔ ماسٹر سرور ہمیشہ اس مشین کے پتے پر دستیاب رہے گا جس پر HAproxy تعینات ہے۔
HAproxy والی مشین کو ناکامی کا واحد نقطہ نہ بنانے کے لیے، ہم اسے ایک Docker کنٹینر میں لانچ کریں گے؛ مستقبل میں اسے K8 کے کلسٹر میں لانچ کیا جا سکتا ہے اور ہمارے فیل اوور کلسٹر کو اور زیادہ قابل اعتماد بنایا جا سکتا ہے۔
ایک ڈائرکٹری بنائیں جہاں آپ دو فائلیں محفوظ کر سکیں - Dockerfile اور haproxy.cfg۔ اس کے پاس جاؤ۔
ڈاکر فائل
FROM ubuntu:latest
RUN apt-get update
&& apt-get install -y haproxy rsyslog
&& rm -rf /var/lib/apt/lists/*
RUN mkdir /run/haproxy
COPY haproxy.cfg /etc/haproxy/haproxy.cfg
CMD haproxy -f /etc/haproxy/haproxy.cfg && tail -F /var/log/haproxy.log
ہوشیار رہیں، haproxy.cfg فائل کی آخری تین لائنوں میں آپ کی مشینوں کے پتے درج ہونے چاہئیں۔ HAproxy Patroni سے رابطہ کرے گا، HTTP ہیڈر میں ماسٹر سرور ہمیشہ 200 واپس کرے گا، اور نقل ہمیشہ 503 لوٹائے گی۔
haproxy.cfg
global
maxconn 100
defaults
log global
mode tcp
retries 2
timeout client 30m
timeout connect 4s
timeout server 30m
timeout check 5s
listen stats
mode http
bind *:7000
stats enable
stats uri /
listen postgres
bind *:5000
option httpchk
http-check expect status 200
default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
server postgresql1 192.168.0.143:5432 maxconn 100 check port 8008
server postgresql2 192.168.0.144:5432 maxconn 100 check port 8008
server postgresql3 192.168.0.145:5432 maxconn 100 check port 8008
اس ڈائرکٹری میں ہونے کی وجہ سے جس میں ہماری دونوں فائلیں "جھوٹ بولتی ہیں"، آئیے کنٹینر کو پیک کرنے کے ساتھ ساتھ ضروری بندرگاہوں کو آگے بھیجنے کے ساتھ اسے شروع کرنے کے لیے ترتیب وار احکامات پر عمل درآمد کریں:
اب، براؤزر میں HAproxy کے ساتھ اپنی مشین کا پتہ کھول کر اور پورٹ 7000 بتانے سے، آپ کو اپنے کلسٹر پر اعداد و شمار نظر آئیں گے۔
سرور جو ماسٹر ہے وہ یوپی ریاست میں ہوگا، اور نقلیں نیچے کی حالت میں ہوں گی۔ یہ عام بات ہے، درحقیقت وہ کام کرتے ہیں، لیکن وہ اس طرح ظاہر ہوتے ہیں کیونکہ وہ HAproxy سے درخواستوں کے لیے 503 واپس کرتے ہیں۔ یہ ہمیں ہمیشہ یہ جاننے کی اجازت دیتا ہے کہ تین سرورز میں سے کون سا موجودہ ماسٹر ہے۔
حاصل يہ ہوا
آپ بہت خوبصورت ہیں! صرف 30 منٹ میں آپ نے سٹریمنگ کی نقل اور خودکار فال بیک کے ساتھ ایک بہترین غلطی برداشت کرنے والا اور اعلیٰ کارکردگی والا ڈیٹا بیس کلسٹر تعینات کر دیا ہے۔ اگر آپ اس حل کو استعمال کرنے کی منصوبہ بندی کر رہے ہیں، تو چیک کریں۔ سرکاری پیٹرونی دستاویزات کے ساتھاور خاص طور پر patronictl افادیت سے متعلق اس کے حصے کے ساتھ، جو آپ کے کلسٹر کو منظم کرنے کے لیے آسان رسائی فراہم کرتا ہے۔