рд╣реЗ рдЕрд╕реЗ рдШрдбрд▓реЗ рдХреА рдЬреНрдпрд╛ рд╡реЗрд│реА рд╕рдорд╕реНрдпрд╛ рд╕рдореЛрд░ рдЖрд▓реА, рддреЗрд╡реНрд╣рд╛ рдорд▓рд╛ рдПрдХрдЯреНрдпрд╛рдиреЗ рд╣реЗ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдЖрдгрд┐ рд▓реЙрдиреНрдЪ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреБрд░реЗрд╕рд╛ рдЕрдиреБрднрд╡ рдирд╡реНрд╣рддрд╛. рдЖрдгрд┐ рдордЧ рдореА рдЧреБрдЧрд▓рд┐рдВрдЧ рд╕реБрд░реВ рдХреЗрд▓реЗ.
рдорд▓рд╛ рдХрд│рдд рдирд╛рд╣реА рдХреА рдХреЕрдЪ рдХрд╛рдп рдЖрд╣реЗ, рдкрд░рдВрддреБ рдорд▓рд╛ рдпрд╛ рдЧреЛрд╖реНрдЯреАрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрд▓рд╛ рдЖрд╣реЗ рдХреА рдореА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкреНрд░рдорд╛рдгреЗ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЪрд░рдг-рджрд░-рдЪрд░рдг рдХреЗрд▓реЗ рддрд░реАрд╣реА, рд▓реЗрдЦрдХрд╛рдкреНрд░рдорд╛рдгреЗрдЪ рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдХреЗрд▓реЗ, рддрд░ рдХрд╛рд╣реАрд╣реА рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА. рдорд▓рд╛ рдХрд╛рд╣реА рдХрд│рдд рдирд╛рд╣реА рдХреА рдХрд╛рдп рдкреНрд░рдХрд░рдг рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ рдорд▓рд╛ рд╣реЗ рдкреБрдиреНрд╣рд╛ рд╕рдореЛрд░ рдЖрд▓реЗ рддреЗрд╡реНрд╣рд╛ рдореА рдард░рд╡рд▓реЗ рдХреА рд╕рд░реНрд╡ рдХрд╛рд╣реА рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рд╡рд░ рдореА рдорд╛рдЭреЗ рд╕реНрд╡рддрдГрдЪреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓рд┐рд╣реАрди. рдПрдХ рдЬреЗ рдирдХреНрдХреАрдЪ рдХрд╛рдо рдХрд░реЗрд▓.
рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ
рдЕрд╕реЗ рдШрдбрддреЗ рдХреА рдЗрдВрдЯрд░рдиреЗрдЯ рд╡рд┐рд╡рд┐рдз рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЖрдгрд┐ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдЕрднрд╛рд╡рд╛рдиреЗ рдЧреНрд░рд╕реНрдд рдирд╛рд╣реА. рд╣реЗ рдЕрд╕реЗрдЪ рдШрдбрд▓реЗ рдХреА рдорд▓рд╛ рдПрдХ рдлреЗрд▓рдУрд╡реНрд╣рд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЙрдкрд╛рдп рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рдо рджреЗрдгреНрдпрд╛рдд рдЖрд▓реЗ рд╣реЛрддреЗ, рдЬреНрдпрд╛рд╕рд╛рдареА рдореБрдЦреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реВрди рд╕рд░реНрд╡ рдкреНрд░рддрд┐рдХреГрддреАрдВрдордзреНрдпреЗ рдкреНрд░рддрд┐рдХреГрддреА рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рдШрдЯрдиреЗрдд рд░рд┐рдЭрд░реНрд╡реНрд╣рдЪреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рддрд░рддреВрдж рдХрд░рдгреЗ рдпрд╛ рд╣реЛрддреНрдпрд╛. рдЕрдкрдпрд╢
рдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░, рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪрд╛ рд╕реНрдЯреЕрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛:
- DBMS рдореНрд╣рдгреВрди PostgreSQL
рд╕рдВрд░рдХреНрд╖рдХ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдЙрдкрд╛рдп рдореНрд╣рдгреВрди- Patroni рд╕рд╛рдареА рд╡рд┐рддрд░рд┐рдд рд╕реНрдЯреЛрд░реЗрдЬ рдореНрд╣рдгреВрди etcd
- рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд╛рдкрд░реВрди рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрд╕рд╛рдареА рдПрдХрд▓ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреВ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА HAproxy
рд╕реЗрдЯрд┐рдВрдЧ
рддреБрдордЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рд╕рд╛рдареА - Patroni, etcd, HAProxy рд╡рд╛рдкрд░реВрди рдПрдХ рдЕрддреНрдпрдВрдд рдЙрдкрд▓рдмреНрдз PostgreSQL рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреЗ.
рд╕рд░реНрд╡ рдСрдкрд░реЗрд╢рдиреНрд╕ рдбреЗрдмрд┐рдпрди 10 OS рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрднрд╛рд╕реА рдорд╢реАрдирд╡рд░ рдХреЗрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛.
рдЗ
рдореА рддреНрдпрд╛рдЪ рдорд╢реАрдирд╡рд░ etcd рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рдд рдирд╛рд╣реА рдЬреЗрдереЗ Patroni рдЖрдгрд┐ postgresql рдЕрд╕реЗрд▓, рдХрд╛рд░рдг рдбрд┐рд╕реНрдХ рд▓реЛрдб etcd рд╕рд╛рдареА рдЦреВрдк рдорд╣рддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ. рдкрдг рд╢реИрдХреНрд╖рдгрд┐рдХ рд╣реЗрддреВрдВрд╕рд╛рдареА рдЖрдореНрд╣реА рддреЗрдЪ рдХрд░реВ.
рдЪрд▓рд╛ рдЗрддреНрдпрд╛рджрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрдпрд╛.
#!/bin/bash
apt-get update
apt-get install etcd
/etc/default/etcd рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбрд╛
[рд╕рджрд╕реНрдп]
рддреБрдордЪреНрдпрд╛ рдорд╢реАрдирдЪреЗ ETCD_NAME=datanode1 # рд╣реЛрд╕реНрдЯрдирд╛рд╡
ETCD_DATA_DIR=тАЭ/var/lib/etcd/default.etcdтАЭ
рд╕рд░реНрд╡ рдЖрдпрдкреА рдкрддреНрддреЗ рд╡реИрдз рдЕрд╕рд╛рд╡реЗрдд. рд▓рд┐рд╕реНрдЯрд░ рдкреАрдЕрд░, рдХреНрд▓рд╛рдпрдВрдЯ рдЗ. рд╣реЛрд╕реНрдЯрдЪреНрдпрд╛ рдЖрдпрдкреА рдкрддреНрддреНрдпрд╛рд╡рд░ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЬрд╛рд╡реЗ
ETCD_LISTEN_PEER_URLS="
ETCD_LISTEN_CLIENT_URLS="
[рдХреНрд▓рд╕реНрдЯрд░]
ETCD_INITIAL_ADVERTISE_PEER_URLS="
ETCD_INITIAL_CLUSTER=┬╗рдбреЗрдЯрд╛рдиреЛрдб1=
ETCD_INITIAL_CLUSTER_STATE="рдирд╡реАрди"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1тА│
ETCD_ADVERTISE_CLIENT_URLS="
рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рд╛
systemctl restart etcd
PostgreSQL 9.6 + patroni
рдкреНрд░рдердо рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреАрди рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдорд╢реАрдиреНрд╕ рдЗрдиреНрд╕реНрдЯреЙрд▓ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рддреБрдореНрд╣реА рдорд╛рдЭреНрдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓рдЪреЗ рдЕрдиреБрд╕рд░рдг рдХреЗрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рд╣реА рд╕реЛрдкреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛ рдЬреА рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА (рдЬрд╡рд│рдЬрд╡рд│) рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд░реЗрд▓. рд░реВрдЯ рдореНрд╣рдгреВрди рдЪрд╛рд▓рддреЗ.
рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ PostgreSQL рдЖрд╡реГрддреНрддреА 9.6 рд╡рд╛рдкрд░рддреЗ, рд╣реЗ рдЖрдордЪреНрдпрд╛ рдХрдВрдкрдиреАрдЪреНрдпрд╛ рдЕрдВрддрд░реНрдЧрдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдВрдореБрд│реЗ рдЖрд╣реЗ. 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.yml
рдкреБрдвреЗ, рддреБрдореНрд╣реА рдиреБрдХрддреНрдпрд╛рдЪ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ /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 рдлрд╛рдЗрд▓рдордзреНрдпреЗ рджреЗрдЦреАрд▓ рдареЗрд╡рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.
рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ рд╕рд░реНрд╡ рдорд╢реАрдиреНрд╕рд╡рд░ рддреБрдореНрд╣реА рд╣реА рдСрдкрд░реЗрд╢рдиреНрд╕ рдкреВрд░реНрдг рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рддреНрдпрд╛рдкреИрдХреА рдХреЛрдгрддреНрдпрд╛рд╣реА рдорд╢реАрдирд╡рд░ рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛
systemctl start patroni
systemctl start postgresql
рд╕реБрдорд╛рд░реЗ 30 рд╕реЗрдХрдВрдж рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛, рдирдВрддрд░ рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ рдЙрд░реНрд╡рд░рд┐рдд рдорд╢реАрдирд╡рд░ рд╣реА рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛.
HAproxy
рдкреНрд░рд╡реЗрд╢рд╛рдЪрд╛ рдПрдХрд▓ рдмрд┐рдВрджреВ рдкреНрд░рджрд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЕрджреНрднреБрдд HAproxy рд╡рд╛рдкрд░рддреЛ. рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡реНрд╣рд░ рдиреЗрд╣рдореА рдорд╢реАрдирдЪреНрдпрд╛ рдкрддреНрддреНрдпрд╛рд╡рд░ рдЙрдкрд▓рдмреНрдз рдЕрд╕реЗрд▓ рдЬреНрдпрд╛рд╡рд░ HAproxy рддреИрдирд╛рдд рдЖрд╣реЗ.
HAproxy рд╕рд╣ рдорд╢реАрдирд▓рд╛ рдЕрдкрдпрд╢рд╛рдЪрд╛ рдПрдХрдЪ рдмрд┐рдВрджреВ рдмрдирд╡реВ рдирдпреЗ рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА рддреЗ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рд▓реЙрдиреНрдЪ рдХрд░реВ; рднрд╡рд┐рд╖реНрдпрд╛рдд рддреЗ 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
рдЖрдордЪреНрдпрд╛ рджреЛрдиреНрд╣реА рдлрд╛рдИрд▓реНрд╕ рдЬреНрдпрд╛ рдбрд┐рд░реЗрдХреНрдЯреНрд░реАрдордзреНрдпреЗ "рдЦреЛрдЯреЗ" рдЖрд╣реЗрдд рддреНрдпрд╛ рдбрд┐рд░реЗрдХреНтАНрдЯрд░реАрдордзреНрдпреЗ рдЕрд╕рд▓реНтАНрдпрд╛рдиреЗ, рдХрдВрдЯреЗрдирд░ рдкреЕрдХ рдХрд░рдгреНтАНрдпрд╛рд╕рд╛рдареА, рддрд╕реЗрдЪ рдЖрд╡рд╢реНтАНрдпрдХ рдкреЛрд░реНрдЯреНрд╕ рдлреЙрд░рд╡рд░реНрдб рдХрд░реВрди рд▓рд╛рдБрдЪ рдХрд░рдгреНтАНрдпрд╛рд╕рд╛рдареА рдХреНрд░рдорд╡рд╛рд░ рдЖрдЬреНрдЮрд╛ рдХрд░реВрдпрд╛:
docker build -t my-haproxy .
docker run -d -p5000:5000 -p7000:7000 my-haproxy
рдЖрддрд╛, рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ HAproxy рд╕рд╣ рддреБрдордЪреНрдпрд╛ рдорд╢реАрдирдЪрд╛ рдкрддреНрддрд╛ рдЙрдШрдбреВрди рдЖрдгрд┐ рдкреЛрд░реНрдЯ 7000 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВрди, рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░рд╡рд░ рдЖрдХрдбреЗрд╡рд╛рд░реА рджрд┐рд╕реЗрд▓.
рдорд╛рд╕реНрдЯрд░ рдЕрд╕рд▓реЗрд▓рд╛ рд╕рд░реНрд╡реНрд╣рд░ рдпреВрдкреА рд░рд╛рдЬреНрдпрд╛рдд рдЕрд╕реЗрд▓ рдЖрдгрд┐ рдкреНрд░рддрд┐рдХреГрддреА рдЦрд╛рд▓реА рд╕реНрдерд┐рддреАрдд рдЕрд╕реЗрд▓. рд╣реЗ рд╕рд╛рдорд╛рдиреНрдп рдЖрд╣реЗ, рдЦрд░рдВ рддрд░ рддреЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд, рдкрд░рдВрддреБ рддреЗ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рджрд┐рд╕рддрд╛рдд рдХрд╛рд░рдг рддреЗ HAproxy рдХрдбреАрд▓ рд╡рд┐рдирдВрддреАрд╕рд╛рдареА 503 рдкрд░рдд рдХрд░рддрд╛рдд. рд╣реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдиреЗрд╣рдореА рдЬрд╛рдгреВрди рдШреЗрдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ рдХреА рддреАрди рд╕рд░реНрд╡реНрд╣рд░рдкреИрдХреА рдХреЛрдгрддрд╛ рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░ рдЖрд╣реЗ.
рдирд┐рд╖реНрдХрд░реНрд╖
рддреВ рд╕реБрдВрджрд░ рдЖрд╣реЗ! рдХреЗрд╡рд│ 30 рдорд┐рдирд┐рдЯрд╛рдВрдд рддреБрдореНрд╣реА рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдкреНрд░рддрд┐рдХреГрддреА рдЖрдгрд┐ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдлреЙрд▓рдмреЕрдХрд╕рд╣ рдЙрддреНрдХреГрд╖реНрдЯ рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ рдЖрдгрд┐ рдЙрдЪреНрдЪ-рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓рд╕реНрдЯрд░ рддреИрдирд╛рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. рдЬрд░ рддреБрдореНрд╣реА рд╣реЗ рдЙрдкрд╛рдп рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдЖрдЦрдд рдЕрд╕рд╛рд▓ рддрд░ рдкрд╣рд╛
рдЕрднрд┐рдирдВрджрди!
рд╕реНрддреНрд░реЛрдд: www.habr.com