Waxaa dhacday in waqtiga dhibaatada la soo bandhigay, aanan haysan waayo-aragnimo ku filan oo aan ku horumariyo oo aan furo xalkan oo keliya. Ka dibna waxaan bilaabay Googling.
Ma aqaano waxa qabashadu tahay, laakiin markii ugu horeysay ee aan la kulmayo xaqiiqda ah in xitaa haddii aan sameeyo wax kasta oo tallaabo tallaabo ah sida casharrada, u diyaari jawi isku mid ah sida qoraaga, ka dibna waxba waligiis shaqeeya. Wax fikrad ah kama haysto waxa arrinku yahay, laakiin markii aan tan la kulmay mar kale, waxaan go'aansaday inaan qoro casharradayda marka wax walba ay shaqeeyaan. Mid hubaal shaqayn doona.
Tilmaamaha internetka
Waxay dhacdaa in internetka uusan la kulmin la'aanta hageyaal kala duwan, casharro, tallaabo-tallaabo iyo wixii la mid ah. Waxaa dhacday in la ii xilsaaray inaan soo saaro xal si ku habboon loo abaabulo oo loo dhiso koox fashilantay oo PostgreSQL ah, shuruudaha ugu muhiimsan ee ka soo qulqulaya server-ka Masterka dhammaan nuqullada iyo bixinta tooska ah ee kaydka haddii ay dhacdo server-ka Master-ka. guuldarro.
Marxaladdan, tignoolajiyada la isticmaalay ayaa la go'aamiyay:
- PostgreSQL sida DBMS
- sida xal kooxeed
- iwm sida kaydinta loo qaybiyey Patroni
- HAproxy ee habaynta hal meel laga soo galo ee codsiyada iyadoo la isticmaalayo xogta macluumaadka
Ku rakibida
Si aad u fiirsato - dhisida koox PostgreSQL oo aad loo heli karo adoo isticmaalaya Patroni, etcd, HAProxy.
Все операции выполнялись на виртуальных машинах с установленной ОС Debian 10.
iwm
Kuma talinayo in lagu rakibo etcd isla mashiinada meesha patroni iyo postgresql ay ku yaaliin, maadaama culeyska diskku aad muhiim ugu yahay iwm. Laakin ujeeddooyin waxbarasho, waxaan sameyn doonaa taas.
Aynu rakibno iwm.
#!/bin/bash
apt-get update
apt-get install etcdKu dar nuxurka faylka /etc/default/etcd
[xubin]
ETCD_NAME=datanode1 # magaca martida ee mashiinkaaga
ETCD_DATA_DIR=”/var/lib/etcd/default.etcd”
DHAMMAAN CINWAANKA IP-ga waa inay noqdaan kuwo sax ah. LISTTER PEER, MACMIILKA iwm waa in lagu dejiyaa ciwaanka IP-ga martigeliyaha
ETCD_LISTEN_PEER_URLS="» # ciwaanka gaarigaaga
ETCD_LISTEN_CLIENT_URLS="» # ciwaanka gaarigaaga
[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="» # ciwaanka gaarigaaga
ETCD_INITIAL_CLUSTER=»datanode1=» # ciwaannada dhammaan mishiinnada ku jira kooxda iwm
ETCD_INITIAL_CLUSTER_STATE="cusub"
ETCD_INITIAL_CLUSTER_TOKEN = "iwm-cluster-1"
ETCD_ADVERTISE_CLIENT_URLS="» # ciwaanka gaarigaaga
Orod amarka
systemctl restart etcdPostgreSQL 9.6 + patroni
Waxa ugu horreeya ee aad u baahan tahay inaad sameyso waa inaad dejiso saddex mashiinnada farsamada gacanta si aad ugu rakibto software-ka lagama maarmaanka ah iyaga. Kadib rakibidda mishiinnada, haddii aad raacdo casharradayda, waxaad socodsiin kartaa qoraalkan fudud kaas oo (ku dhawaad) kuu qaban doona wax walba. Wuxuu u shaqeeyaa sida xidid
Fadlan la soco in qoraalka uu isticmaalo nooca PostgreSQL ee 9.6, tani waxay sabab u tahay shuruudaha gudaha ee shirkadeena. Xalka laguma tijaabin noocyada kale ee PostgreSQL.
#!/bin/bash
apt-get install gnupg -y
echo "deb http://apt.postgresql.org/pub/repos/apt/ buster-pgdg main" >> /etc/apt/sources.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update
apt-get install postgresql-9.6 python3-pip python3-dev libpq-dev -y
systemctl stop postgresql
pip3 install --upgrade pip
pip install psycopg2
pip install patroni[etcd]
echo "
[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target
[Service]
Type=simple
User=postgres
Group=postgres
ExecStart=/usr/local/bin/patroni /etc/patroni.yml
KillMode=process
TimeoutSec=30
Restart=no
[Install]
WantedBy=multi-user.targ
" > /etc/systemd/system/patroni.service
mkdir -p /data/patroni
chown postgres:postgres /data/patroni
chmod 700 /data/patroniпо
touch /etc/patroni.ymlMarka xigta, faylka /etc/patroni.yml ee aad hadda abuurtay, waxaad u baahan tahay inaad dhigto waxyaabaha soo socda, dabcan beddelka ciwaannada IP-ga ee meel kasta oo aad isticmaasho.
U fiirso faallooyinka yamlkan. U beddel ciwaannada adiga oo iska leh mishiin kasta oo kutlada ku jira.
/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: falseQoraalku waa inuu ku shaqeeyaa dhammaan saddexda mashiin ee kutlada, qaabeynta kore waa in sidoo kale lagu dhejiyaa faylka /etc/patroni.yml dhammaan mishiinnada.
Marka aad dhammayso hawlahan dhammaan mishiinnada ku jira kooxda, ku wad amarka soo socda mid kasta oo ka mid ah
systemctl start patroni
systemctl start postgresqlSug ilaa 30 ilbiriqsi, ka dibna ku wad amarkan mishiinada haray ee kutlada.
HAproxy
Waxaan isticmaalnaa HAproxy-ga cajiibka ah si aan u bixinno hal dhibic oo laga soo galo. Server-ku wuxuu had iyo jeer diyaar ku ahaan doonaa ciwaanka mishiinka lagu rakibay HAproxy
Si aan mashiinka leh HAproxy looga dhigin hal dhibic oo guul darro ah, waxaan ku dhex daadin doonaa weel Docker ah; mustaqbalka waxaa lagu dhex daari karaa kooxda K8 oo ka dhigaysa kooxdeena guuldarraysa xitaa mid la isku halleyn karo.
Samee hage aad ku kaydin karto laba fayl - Dockerfile iyo haproxy.cfg. U tag.
Dockerfile
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.logKa digtoonow, saddexda sadar ee ugu dambeeya ee faylka haproxy.cfg waa inay taxdaa ciwaannada mishiinnadaada. HAproxy waxay la xiriiri doontaa Patroni, madax HTTP-yada sayidku wuxuu had iyo jeer soo celin doonaa 200, nuqulkuna wuxuu had iyo jeer soo celin doonaa 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
Inaga oo ku jira tusaha ay ku jiraan labadeena faylal "been", aynu si isdaba joog ah u fulino amarada ku xidhidhiyaha weelka, iyo sidoo kale bilawga gudbinta dekedaha lagama maarmaanka ah:
docker build -t my-haproxy .
docker run -d -p5000:5000 -p7000:7000 my-haproxy Hadda, adoo furaya ciwaanka mashiinkaaga HAproxy browserka oo aad ku qeexdo dekedda 7000, waxaad arki doontaa tirakoobyada kooxdaada.
Server-ka u ah sayidku wuxuu ahaan doonaa gobolka UP, nuqulkuna wuxuu ahaan doonaa gobolka DOWN. Tani waa caadi, dhab ahaantii way shaqeeyaan, laakiin waxay u muuqdaan sidan sababtoo ah waxay soo celiyaan 503 codsiyada HAproxy. Tani waxay noo ogolaanaysaa inaan mar walba ogaano midka saddexda server ah ee hadda jira.
gunaanad
Waad qurux badan tahay! 30 daqiiqo gudahood waxaad geysay koox xogeed aad u wanaagsan oo u dulqaadan karta qaladka iyo waxqabadka sare oo leh ku celcelinta qulqulka iyo dib u dhaca tooska ah. Haddii aad qorsheyneyso inaad isticmaasho xalkan, iska hubi , iyo gaar ahaan qaybteeda ku saabsan utility patronictl, kaas oo ku siinaya marin ku habboon maaraynta kooxdaada.
Hambalyo!
Source: www.habr.com
