āĻāĻāĻž āĻ āĻŋāĻ āĻ¤āĻžāĻ āĻāĻā§āĻā§ āĻ¯ā§ āĻ¸āĻŽāĻ¯āĻŧā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻāĻŋ āĻāĻ¤ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛, āĻāĻŽāĻžāĻ° āĻāĻāĻž āĻāĻ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĻāĻŋ āĻŦāĻŋāĻāĻžāĻļ āĻāĻŦāĻ āĻāĻžāĻ˛ā§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¯āĻĨā§āĻˇā§āĻ āĻ āĻāĻŋāĻā§āĻāĻ¤āĻž āĻāĻŋāĻ˛ āĻ¨āĻžāĨ¤ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻŋ āĻā§āĻāĻ˛āĻŋāĻ āĻļā§āĻ°ā§ āĻāĻ°āĻŋāĨ¤
āĻāĻŽāĻŋ āĻāĻžāĻ¨āĻŋ āĻ¨āĻž āĻā§āĻ¯āĻžāĻāĻāĻŋ āĻā§, āĻ¤āĻŦā§ āĻāĻŽāĻŋ āĻāĻ āĻ¸āĻ¤ā§āĻ¯ā§āĻ° āĻŽā§āĻā§āĻŽā§āĻāĻŋ āĻšāĻ¯āĻŧā§āĻāĻŋ āĻ¯ā§ āĻāĻŽāĻŋ āĻ¯āĻĻāĻŋ āĻāĻŋāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ā§āĻ° āĻŽāĻ¤ā§ āĻ§āĻžāĻĒā§ āĻ§āĻžāĻĒā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻ°āĻŋ, āĻ˛ā§āĻāĻā§āĻ° āĻŽāĻ¤ā§ āĻāĻāĻ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ, āĻ¤āĻŦā§ āĻāĻŋāĻā§āĻ āĻāĻāĻ¨āĻ āĻāĻžāĻ āĻāĻ°ā§ āĻ¨āĻžāĨ¤ āĻāĻŽāĻžāĻ° āĻā§āĻ¨ āĻ§āĻžāĻ°āĻŖāĻž āĻ¨ā§āĻ āĻŦā§āĻ¯āĻžāĻĒāĻžāĻ°āĻāĻž āĻāĻŋ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻāĻ¨ āĻāĻŽāĻŋ āĻāĻŦāĻžāĻ° āĻāĻ° āĻ¸āĻŽā§āĻŽā§āĻā§āĻ¨ āĻšāĻ˛āĻžāĻŽ, āĻ¤āĻāĻ¨ āĻāĻŽāĻŋ āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ˛āĻžāĻŽ āĻ¯ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻ āĻšāĻ¯āĻŧā§ āĻā§āĻ˛ā§ āĻāĻŽāĻŋ āĻāĻŽāĻžāĻ° āĻ¨āĻŋāĻā§āĻ° āĻāĻŋāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛ āĻ˛āĻŋāĻāĻŦāĨ¤ āĻāĻ āĻ¯ā§ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻžāĻ āĻāĻ°āĻŦā§.
āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻā§ āĻāĻžāĻāĻĄ
āĻāĻāĻŋ āĻ āĻŋāĻ āĻ¤āĻžāĻ āĻāĻā§ āĻ¯ā§ āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻžāĻāĻĄ, āĻāĻŋāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛, āĻ§āĻžāĻĒā§ āĻ§āĻžāĻĒā§ āĻāĻŦāĻ āĻāĻ° āĻŽāĻ¤ā§ āĻ āĻāĻžāĻŦā§āĻ° āĻāĻžāĻ°āĻŖā§ āĻā§āĻā§ āĻ¨āĻžāĨ¤ āĻāĻāĻŋ āĻ āĻŋāĻ āĻ¤āĻžāĻ āĻāĻā§āĻā§ āĻ¯ā§ āĻāĻŽāĻžāĻā§ āĻāĻāĻāĻŋ āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻž āĻĒā§āĻ¸ā§āĻāĻā§āĻ°ā§āĻāĻ¸āĻāĻŋāĻāĻāĻ˛ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°āĻā§ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻāĻāĻžāĻŦā§ āĻ¸āĻāĻāĻ āĻŋāĻ¤ āĻāĻŦāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛, āĻ¯āĻžāĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻžāĻā§āĻ˛āĻŋ āĻāĻŋāĻ˛ āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻĨā§āĻā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋāĻ¤ā§ āĻĒā§āĻ°āĻ¤āĻŋāĻ˛āĻŋāĻĒāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻŽāĻŋāĻ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻāĻāĻŋ āĻ°āĻŋāĻāĻžāĻ°ā§āĻā§āĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻŦāĻŋāĻ§āĻžāĻ¨āĨ¤ āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻž.
āĻāĻ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§, āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻĒā§āĻ°āĻ¯ā§āĻā§āĻ¤āĻŋāĻ° āĻ¸ā§āĻā§āĻ¯āĻžāĻ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛:
- āĻāĻāĻāĻŋ DBMS āĻšāĻŋāĻ¸āĻžāĻŦā§ PostgreSQL
āĻĒā§āĻˇā§āĻ āĻĒā§āĻˇāĻ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°āĻŋāĻ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§- Patroni āĻāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ¸ā§āĻā§āĻ°ā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ etcd
- āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻāĻ āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ¸āĻāĻāĻ āĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ HAproxy
āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸
āĻāĻĒāĻ¨āĻžāĻ° āĻŽāĻ¨ā§āĻ¯ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ - Patroni, etcd, HAProxy āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻā§āĻ āĻāĻĒāĻ˛āĻŦā§āĻ§ PostgreSQL āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĨ¤
āĻĄā§āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ 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_INITIAL_CLUSTER_STATE="āĻ¨āĻ¤ā§āĻ¨"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1âŗ
ETCD_ADVERTISE_CLIENT_URLS="
āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻāĻžāĻ˛āĻžāĻ¨
systemctl restart etcd
PostgreSQL 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