āĻāĻāĻž āĻ āĻŋāĻ āϤāĻžāĻ āĻāĻā§āĻā§ āϝ⧠āϏāĻŽāϝāĻŧā§ āϏāĻŽāϏā§āϝāĻžāĻāĻŋ āĻāϤā§āĻĨāĻžāĻĒāĻŋāϤ āĻšāϝāĻŧā§āĻāĻŋāϞ, āĻāĻŽāĻžāϰ āĻāĻāĻž āĻāĻ āϏāĻŽāĻžāϧāĻžāύāĻāĻŋ āĻŦāĻŋāĻāĻžāĻļ āĻāĻŦāĻ āĻāĻžāϞ⧠āĻāϰāĻžāϰ āĻāύā§āϝ āϝāĻĨā§āώā§āĻ āĻ āĻāĻŋāĻā§āĻāϤāĻž āĻāĻŋāϞ āύāĻžāĨ¤ āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ āĻāĻŽāĻŋ āĻā§āĻāϞāĻŋāĻ āĻļā§āϰ⧠āĻāϰāĻŋāĨ¤
āĻāĻŽāĻŋ āĻāĻžāύāĻŋ āύāĻž āĻā§āϝāĻžāĻāĻāĻŋ āĻā§, āϤāĻŦā§ āĻāĻŽāĻŋ āĻāĻ āϏāϤā§āϝā§āϰ āĻŽā§āĻā§āĻŽā§āĻāĻŋ āĻšāϝāĻŧā§āĻāĻŋ āϝ⧠āĻāĻŽāĻŋ āϝāĻĻāĻŋ āĻāĻŋāĻāĻā§āϰāĻŋāϝāĻŧāĻžāϞā§āϰ āĻŽāϤ⧠āϧāĻžāĻĒā§ āϧāĻžāĻĒā§ āϏāĻŦāĻāĻŋāĻā§ āĻāϰāĻŋ, āϞā§āĻāĻā§āϰ āĻŽāϤ⧠āĻāĻāĻ āĻĒāϰāĻŋāĻŦā§āĻļ āϤā§āϰāĻŋ āĻāϰāĻŋ, āϤāĻŦā§ āĻāĻŋāĻā§āĻ āĻāĻāύāĻ āĻāĻžāĻ āĻāϰ⧠āύāĻžāĨ¤ āĻāĻŽāĻžāϰ āĻā§āύ āϧāĻžāϰāĻŖāĻž āύā§āĻ āĻŦā§āϝāĻžāĻĒāĻžāϰāĻāĻž āĻāĻŋ, āĻāĻŋāύā§āϤ⧠āϝāĻāύ āĻāĻŽāĻŋ āĻāĻŦāĻžāϰ āĻāϰ āϏāĻŽā§āĻŽā§āĻā§āύ āĻšāϞāĻžāĻŽ, āϤāĻāύ āĻāĻŽāĻŋ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āύāĻŋāϞāĻžāĻŽ āϝ⧠āϏāĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻ āĻšāϝāĻŧā§ āĻā§āϞ⧠āĻāĻŽāĻŋ āĻāĻŽāĻžāϰ āύāĻŋāĻā§āϰ āĻāĻŋāĻāĻā§āϰāĻŋāϝāĻŧāĻžāϞ āϞāĻŋāĻāĻŦāĨ¤ āĻāĻ āϝ⧠āĻ āĻŦāĻļā§āϝāĻ āĻāĻžāĻ āĻāϰāĻŦā§.
āĻāύā§āĻāĻžāϰāύā§āĻā§ āĻāĻžāĻāĻĄ
āĻāĻāĻŋ āĻ āĻŋāĻ āϤāĻžāĻ āĻāĻā§ āϝ⧠āĻāύā§āĻāĻžāϰāύā§āĻ āĻŦāĻŋāĻāĻŋāύā§āύ āĻāĻžāĻāĻĄ, āĻāĻŋāĻāĻā§āϰāĻŋāϝāĻŧāĻžāϞ, āϧāĻžāĻĒā§ āϧāĻžāĻĒā§ āĻāĻŦāĻ āĻāϰ āĻŽāϤ⧠āĻ āĻāĻžāĻŦā§āϰ āĻāĻžāϰāĻŖā§ āĻā§āĻā§ āύāĻžāĨ¤ āĻāĻāĻŋ āĻ āĻŋāĻ āϤāĻžāĻ āĻāĻā§āĻā§ āϝ⧠āĻāĻŽāĻžāĻā§ āĻāĻāĻāĻŋ āĻŦā§āϝāϰā§āĻĨāϤāĻž āĻĒā§āϏā§āĻāĻā§āϰā§āĻāϏāĻāĻŋāĻāĻāϞ āĻā§āϞāĻžāϏā§āĻāĻžāϰāĻā§ āϏā§āĻŦāĻŋāϧāĻžāĻāύāĻāĻāĻžāĻŦā§ āϏāĻāĻāĻ āĻŋāϤ āĻāĻŦāĻ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϏāĻŽāĻžāϧāĻžāύ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻĻāĻžāϝāĻŧāĻŋāϤā§āĻŦ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ, āϝāĻžāϰ āĻĒā§āϰāϧāĻžāύ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧāϤāĻžāĻā§āϞāĻŋ āĻāĻŋāϞ āĻŽāĻžāϏā§āĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰ āĻĨā§āĻā§ āϏāĻŽāϏā§āϤ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋāϤ⧠āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āϏā§āĻā§āϰāĻŋāĻŽāĻŋāĻ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻŽāĻžāϏā§āĻāĻžāϰ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻā§āώā§āϤā§āϰ⧠āĻāĻāĻāĻŋ āϰāĻŋāĻāĻžāϰā§āĻā§āϰ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻŦāĻŋāϧāĻžāύāĨ¤ āĻŦā§āϝāϰā§āĻĨāϤāĻž.
āĻāĻ āĻĒāϰā§āϝāĻžāϝāĻŧā§, āĻŦā§āϝāĻŦāĻšā§āϤ āĻĒā§āϰāϝā§āĻā§āϤāĻŋāϰ āϏā§āĻā§āϝāĻžāĻ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ:
- āĻāĻāĻāĻŋ DBMS āĻšāĻŋāϏāĻžāĻŦā§ PostgreSQL
- āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏā§āĻāĻžāϰāĻŋāĻ āϏāĻŽāĻžāϧāĻžāύ āĻšāĻŋāϏāĻžāĻŦā§
- Patroni āĻāύā§āϝ āĻŦāĻŋāϤāϰāĻŖ āϏā§āĻā§āϰā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ etcd
- āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻāĻāĻ āĻāύā§āĻā§āϰāĻŋ āĻĒāϝāĻŧā§āύā§āĻ āϏāĻāĻāĻ āĻŋāϤ āĻāϰāĻžāϰ āĻāύā§āϝ HAproxy
āĻŦāĻŋāύā§āϝāĻžāϏ
āĻāĻĒāύāĻžāϰ āĻŽāύā§āϝā§āĻā§āϰ āĻāύā§āϝ - Patroni, etcd, HAProxy āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻāĻŋ āĻāĻā§āĻ āĻāĻĒāϞāĻŦā§āϧ PostgreSQL āĻā§āϞāĻžāϏā§āĻāĻžāϰ āϤā§āϰāĻŋ āĻāϰāĻžāĨ¤
āϏāĻŽāϏā§āϤ āĻāĻžāϰā§āϝāĻā§āϰāĻŽ āĻ āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻāύāϏā§āĻāϞ āĻāϰāĻž āĻāĻžāϰā§āĻā§āϝāĻŧāĻžāϞ āĻŽā§āĻļāĻŋāύ⧠āϏāĻŽā§āĻĒāύā§āύ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞāĨ¤ Debian 10.
āĻāϤā§āϝāĻžāĻĻāĻŋ
āĻāĻŽāĻŋ āĻāĻāĻ āĻŽā§āĻļāĻŋāύ⧠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"
āϏāĻŽāϏā§āϤ āĻāĻāĻĒāĻŋ āĻ āĻŋāĻāĻžāύāĻž āĻŦā§āϧ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤāĨ¤ āϞāĻŋāϏā§āĻāĻžāϰ āĻĒāĻŋāϝāĻŧāĻžāϰ, āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻāϤā§āϝāĻžāĻĻāĻŋ āĻšā§āϏā§āĻā§āϰ āĻāĻāĻĒāĻŋ āĻ āĻŋāĻāĻžāύāĻžāϝāĻŧ āϏā§āĻ āĻāϰāĻž āĻāĻāĻŋāϤ
ETCD_LISTEN_PEER_URLS="āĻāĻĒāύāĻžāϰ āĻāĻžāĻĄāĻŧāĻŋāϰ # āĻ āĻŋāĻāĻžāύāĻž
ETCD_LISTEN_CLIENT_URLS="āĻāĻĒāύāĻžāϰ āĻāĻžāĻĄāĻŧāĻŋāϰ # āĻ āĻŋāĻāĻžāύāĻž
[āĻā§āĻā§āĻ]
ETCD_INITIAL_ADVERTISE_PEER_URLS="āĻāĻĒāύāĻžāϰ āĻāĻžāĻĄāĻŧāĻŋāϰ # āĻ āĻŋāĻāĻžāύāĻž
ETCD_INITIAL_CLUSTER=ÂģāĻĄā§āĻāĻžāύā§āĻĄ1=Âģ# etcd āĻā§āϞāĻžāϏā§āĻāĻžāϰ⧠āϏāĻŽāϏā§āϤ āĻŽā§āĻļāĻŋāύā§āϰ āĻ āĻŋāĻāĻžāύāĻž
ETCD_INITIAL_CLUSTER_STATE="āύāϤā§āύ"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1âŗ
ETCD_ADVERTISE_CLIENT_URLS="āĻāĻĒāύāĻžāϰ āĻāĻžāĻĄāĻŧāĻŋāϰ # āĻ āĻŋāĻāĻžāύāĻž
āĻāĻŽāĻžāύā§āĻĄ āĻāĻžāϞāĻžāύ
systemctl restart etcdPostgreSQL 9.6 + āĻĒā§āώā§āĻ āĻĒā§āώāĻ
āĻāĻĒāύāĻžāĻā§ āĻĒā§āϰāĻĨāĻŽā§ āϤāĻŋāύāĻāĻŋ āĻāĻžāϰā§āĻā§āϝāĻŧāĻžāϞ āĻŽā§āĻļāĻŋāύ āϏā§āĻ āĻāĻĒ āĻāϰāϤ⧠āĻšāĻŦā§ āϝāĻžāϤ⧠āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āϏāĻĢā§āĻāĻāϝāĻŧā§āϝāĻžāϰ āĻāύāϏā§āĻāϞ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤ āĻŽā§āĻļāĻŋāύāĻā§āϞāĻŋ āĻāύāϏā§āĻāϞ āĻāϰāĻžāϰ āĻĒāϰā§, āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻŽāĻžāϰ āĻāĻŋāĻāĻā§āϰāĻŋāϝāĻŧāĻžāϞāĻāĻŋ āĻ āύā§āϏāϰāĻŖ āĻāϰā§āύ, āĻāĻĒāύāĻŋ āĻāĻ āϏāĻšāĻ āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĻāĻŋ āĻāĻžāϞāĻžāϤ⧠āĻĒāĻžāϰā§āύ āϝāĻž (āĻĒā§āϰāĻžāϝāĻŧ) āĻāĻĒāύāĻžāϰ āĻāύā§āϝ āϏāĻŦāĻāĻŋāĻā§ āĻāϰāĻŦā§āĨ¤ āϰā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ āĻāϞā§āĨ¤
āĻĻāϝāĻŧāĻž āĻāϰ⧠āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ āϝ⧠āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĻāĻŋ 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 āϏāĻš āĻŽā§āĻļāĻŋāύāĻāĻŋāĻā§ āĻŦā§āϝāϰā§āĻĨāϤāĻžāϰ āĻāĻāĻ āĻĒāϝāĻŧā§āύā§āĻ āύāĻž āĻāϰāĻžāϰ āĻāύā§āϝ, āĻāĻŽāϰāĻž āĻāĻāĻŋāĻā§ āĻāĻāĻāĻŋ āĻĄāĻāĻžāϰ āĻāύā§āĻā§āĻāύāĻžāϰ⧠āĻāĻžāϞ⧠āĻāϰāĻŦ; āĻāĻŦāĻŋāώā§āϝāϤ⧠āĻāĻāĻŋ K8 āĻāϰ āĻā§āϞāĻžāϏā§āĻāĻžāϰ⧠āĻāĻžāϞ⧠āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āϰ āĻŦā§āϝāϰā§āĻĨāϤāĻž āĻā§āϞāĻžāϏā§āĻāĻžāϰāĻā§ āĻāϰāĻ āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ āĻāϰ⧠āϤā§āϞāĻŦā§ā§ˇ
āĻāĻāĻāĻŋ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϤā§āϰāĻŋ āĻāϰā§āύ āϝā§āĻāĻžāύ⧠āĻāĻĒāύāĻŋ āĻĻā§āĻāĻŋ āĻĢāĻžāĻāϞ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ - Dockerfile āĻāĻŦāĻ haproxy.cfgāĨ¤ āĻāĻāĻž āϝāĻžāύ.
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.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 āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§, āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ āĻā§āϞāĻžāϏā§āĻāĻžāϰ⧠āĻĒāϰāĻŋāϏāĻāĻā§āϝāĻžāύ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύāĨ¤
āϝ⧠āϏāĻžāϰā§āĻāĻžāϰāĻāĻŋ āĻŽāĻžāϏā§āĻāĻžāϰ āϤāĻž āĻšāĻŦā§ UP āϰāĻžāĻā§āϝā§, āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋāĻā§āϞāĻŋ āĻĄāĻžāĻāύ āĻ āĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻĨāĻžāĻāĻŦā§ā§ˇ āĻāĻāĻŋ āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ, āĻāϏāϞ⧠āϤāĻžāϰāĻž āĻāĻžāĻ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āϤāĻžāϰāĻž āĻāĻāĻāĻžāĻŦā§ āĻāĻĒāϏā§āĻĨāĻŋāϤ āĻšāϝāĻŧ āĻāĻžāϰāĻŖ āϤāĻžāϰāĻž HAproxy āĻĨā§āĻā§ āĻ āύā§āϰā§āϧā§āϰ āĻāύā§āϝ 503 āĻĢā§āϰāϤ āĻĻā§āϝāĻŧāĨ¤ āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āϰ āϏāϰā§āĻŦāĻĻāĻž āĻāĻžāύāϤ⧠āĻĻā§āϝāĻŧ āϝ⧠āϤāĻŋāύāĻāĻŋ āϏāĻžāϰā§āĻāĻžāϰā§āϰ āĻŽāϧā§āϝ⧠āĻā§āύāĻāĻŋ āĻŦāϰā§āϤāĻŽāĻžāύ āĻŽāĻžāϏā§āĻāĻžāϰāĨ¤
āĻāĻĒāϏāĻāĻšāĻžāϰ
āϤā§āĻŽāĻŋ āĻāĻŽā§āĻāĻžāϰ! āĻŽāĻžāϤā§āϰ 30 āĻŽāĻŋāύāĻŋāĻā§āϰ āĻŽāϧā§āϝ⧠āĻāĻĒāύāĻŋ āϏā§āĻā§āϰāĻŋāĻŽāĻŋāĻ āĻĒā§āϰāϤāĻŋāϞāĻŋāĻĒāĻŋ āĻāĻŦāĻ āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧ āĻĢāϞāĻŦā§āϝāĻžāĻ āϏāĻš āĻāĻāĻāĻŋ āĻāĻŽā§āĻāĻžāϰ āϤā§āϰā§āĻāĻŋ-āϏāĻšāύāĻļā§āϞ āĻāĻŦāĻ āĻāĻā§āĻ-āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āĻā§āύāĨ¤ āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ āϏāĻŽāĻžāϧāĻžāύāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻĒāϰāĻŋāĻāϞā§āĻĒāύāĻž āĻāϰāĻā§āύ āϤāĻŦā§ āĻā§āĻ āĻāĻāĻ āĻāϰā§āύ , āĻāĻŦāĻ āĻŦāĻŋāĻļā§āώ āĻāϰ⧠āĻĒā§āϝāĻžāĻā§āϰā§āύāĻŋāĻāĻāϞ āĻāĻāĻāĻŋāϞāĻŋāĻāĻŋ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻāϰ āĻ āĻāĻļā§āϰ āϏāĻžāĻĨā§, āϝāĻž āĻāĻĒāύāĻžāϰ āĻā§āϞāĻžāϏā§āĻāĻžāϰ āĻĒāϰāĻŋāĻāĻžāϞāύāĻžāϰ āĻāύā§āϝ āϏā§āĻŦāĻŋāϧāĻžāĻāύāĻ āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤
āĻ āĻāĻŋāύāύā§āĻĻāύ!
āĻāϤā§āϏ: www.habr.com
