O kan ṣẹlẹ pe ni akoko iṣoro naa, Emi ko ni iriri ti o to lati ṣe agbekalẹ ati ifilọlẹ ojutu yii nikan. Ati lẹhinna Mo bẹrẹ Googling.
Emi ko mọ kini apeja naa jẹ, ṣugbọn fun akoko umpteenth Mo dojuko pẹlu otitọ pe paapaa ti MO ba ṣe ohun gbogbo ni igbesẹ nipasẹ igbese bi ninu ikẹkọ, mura agbegbe kanna bi onkọwe, lẹhinna ko si nkankan ti o ṣiṣẹ. Emi ko ni imọran kini ọrọ naa, ṣugbọn nigbati Mo tun pade eyi lẹẹkansi, Mo pinnu pe Emi yoo kọ ikẹkọ ti ara mi nigbati ohun gbogbo ba ṣiṣẹ. Ọkan ti yoo pato ṣiṣẹ.
Awọn itọsọna lori Intanẹẹti
O kan ṣẹlẹ pe Intanẹẹti ko jiya lati aini ọpọlọpọ awọn itọsọna, awọn olukọni, ni igbese-nipasẹ-igbesẹ ati bii. O kan ṣẹlẹ pe Mo ni iṣẹ ṣiṣe pẹlu idagbasoke ojutu kan fun siseto irọrun ati kikọ iṣupọ PostgreSQL ikuna kan, awọn ibeere akọkọ fun eyiti o jẹ ṣiṣan ṣiṣanwọle lati ọdọ olupin Titunto si gbogbo awọn ẹda ati ipese aifọwọyi ti ifiṣura ni iṣẹlẹ ti olupin Titunto kan. ikuna.
Ni ipele yii, akopọ ti awọn imọ-ẹrọ ti a lo ti pinnu:
- PostgreSQL bi DBMS kan
- bi ojutu iṣupọ
- etcd bi ibi ipamọ pinpin fun Patroni
- HAproxy fun siseto aaye titẹsi ẹyọkan fun awọn ohun elo nipa lilo ibi ipamọ data
eto
Fun akiyesi rẹ - kikọ iṣupọ PostgreSQL ti o ga pupọ nipa lilo Patroni, ati bẹbẹ lọ, HAProxy.
Все операции выполнялись на виртуальных машинах с установленной ОС Debian 10.
abbl
Emi ko ṣeduro fifi sori ẹrọ etcd lori awọn ẹrọ kanna nibiti patroni ati postgresql yoo wa, nitori fifuye disiki ṣe pataki pupọ fun bbl. Ṣugbọn fun awọn idi ẹkọ, a yoo ṣe iyẹn.
Jẹ ki a fi sori ẹrọ etcd.
#!/bin/bash
apt-get update
apt-get install etcdṢafikun akoonu si faili /etc/default/etcd
[omo egbe]
ETCD_NAME=datanode1 # hostname ti ẹrọ rẹ
ETCD_DATA_DIR=”/var/lib/etcd/default.etcd”
GBOGBO IP adiresi yẹ ki o wa ni wulo. LISTER PEER, CLIENT etc O yẹ ki o ṣeto si IP ADDRESS OF HOST
ETCD_LISTEN_PEER_URLS = "» # adirẹsi ọkọ ayọkẹlẹ rẹ
ETCD_LISTEN_CLIENT_URLS = "» # adirẹsi ọkọ ayọkẹlẹ rẹ
[iṣupọ]
ETCD_INITIAL_ADVERTISE_PEER_URLS="» # adirẹsi ọkọ ayọkẹlẹ rẹ
ETCD_INITIAL_CLUSTER=»datanode1=»# awọn adirẹsi ti gbogbo awọn ero inu iṣupọ etcd
ETCD_INITIAL_CLUSTER_STATE = "tuntun"
ETCD_INITIAL_CLUSTER_TOKEN = "etcd-cluster-1"
ETCD_ADVERTISE_CLIENT_URLS = "» # adirẹsi ọkọ ayọkẹlẹ rẹ
Ṣiṣe aṣẹ naa
systemctl restart etcdPostgreSQL 9.6 + patroni
Ohun akọkọ ti o nilo lati ṣe ni ṣeto awọn ẹrọ foju mẹta lati fi sọfitiwia pataki sori wọn. Lẹhin fifi sori ẹrọ awọn ẹrọ, ti o ba tẹle ikẹkọ mi, o le ṣiṣe iwe afọwọkọ ti o rọrun yii ti yoo (fere) ṣe ohun gbogbo fun ọ. Nṣiṣẹ bi root.
Jọwọ ṣe akiyesi pe iwe afọwọkọ naa nlo ẹya PostgreSQL 9.6, eyi jẹ nitori awọn ibeere inu ti ile-iṣẹ wa. Ojutu naa ko ti ni idanwo lori awọn ẹya miiran ti 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.ymlNigbamii, ninu faili /etc/patroni.yml ti o ṣẹṣẹ ṣẹda, o nilo lati gbe awọn akoonu wọnyi, dajudaju iyipada awọn adirẹsi IP ni gbogbo awọn aaye si awọn adirẹsi ti o lo.
San ifojusi si awọn asọye ni yaml yii. Yi awọn adirẹsi pada si tirẹ lori ẹrọ kọọkan ninu iṣupọ.
/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: falseAwọn iwe afọwọkọ gbọdọ wa ni ṣiṣe lori gbogbo awọn mẹta ero ti iṣupọ, ati awọn loke iṣeto ni gbọdọ tun ti wa ni gbe sinu /etc/patroni.yml faili lori gbogbo awọn ero.
Ni kete ti o ba ti pari awọn iṣẹ wọnyi lori gbogbo awọn ero inu iṣupọ, ṣiṣe aṣẹ wọnyi lori eyikeyi ninu wọn
systemctl start patroni
systemctl start postgresqlDuro nipa awọn aaya 30, lẹhinna ṣiṣẹ aṣẹ yii lori awọn ẹrọ ti o ku ninu iṣupọ.
HAproxy
A lo HAproxy iyanu lati pese aaye titẹsi kan. Olupin oluwa yoo wa nigbagbogbo ni adirẹsi ẹrọ ti o ti gbe HAproxy lọ.
Ni ibere ki o maṣe jẹ ki ẹrọ pẹlu HAproxy jẹ aaye ikuna kan, a yoo ṣe ifilọlẹ sinu apoti Docker kan; ni ọjọ iwaju o le ṣe ifilọlẹ sinu iṣupọ K8 ati jẹ ki iṣupọ ikuna wa paapaa ni igbẹkẹle diẹ sii.
Ṣẹda itọsọna kan nibiti o le fipamọ awọn faili meji - Dockerfile ati haproxy.cfg. Lọ si o.
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Ṣọra, awọn laini mẹta ti o kẹhin ti faili haproxy.cfg yẹ ki o ṣe atokọ awọn adirẹsi ti awọn ẹrọ rẹ. HAproxy yoo kan si Patroni, ninu awọn akọle HTTP oluwa olupin yoo pada nigbagbogbo 200, ati pe ẹda naa yoo pada nigbagbogbo 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
Ti o wa ninu itọsọna eyiti awọn mejeeji ti awọn faili wa “parọ,” jẹ ki a ṣiṣẹ ni atẹlera awọn aṣẹ fun iṣakojọpọ eiyan naa, bakanna bi ifilọlẹ pẹlu fifiranṣẹ awọn ebute oko oju omi pataki:
docker build -t my-haproxy .
docker run -d -p5000:5000 -p7000:7000 my-haproxy Bayi, nipa ṣiṣi adirẹsi ẹrọ rẹ pẹlu HAproxy ninu ẹrọ aṣawakiri ati sisọ ibudo 7000, iwọ yoo rii awọn iṣiro lori iṣupọ rẹ.
Olupin ti o jẹ oluwa yoo wa ni ipo UP, ati awọn ẹda yoo wa ni ipo isalẹ. Eyi jẹ deede, ni otitọ wọn ṣiṣẹ, ṣugbọn wọn han ni ọna yii nitori wọn pada 503 fun awọn ibeere lati HAproxy. Eyi n gba wa laaye nigbagbogbo lati mọ pato eyi ti awọn olupin mẹta jẹ oluwa lọwọlọwọ.
ipari
Ti o ba wa alayeye! Ni awọn iṣẹju 30 o ti gbe ifarada-aṣiṣe ti o dara julọ ati iṣupọ data iṣẹ ṣiṣe giga pẹlu ẹda ṣiṣanwọle ati ipadasẹhin aifọwọyi. Ti o ba n gbero lati lo ojutu yii, ṣayẹwo , ati ni pataki pẹlu apakan rẹ nipa ohun elo patronictl, eyiti o pese iraye si irọrun si ṣiṣakoso iṣupọ rẹ.
Oriire!
orisun: www.habr.com
