ProHoster > Блог > Isakoso > Ilé iṣupọ PostgreSQL ti o wa ga julọ nipa lilo Patroni, etcd, HAProxy
Ilé iṣupọ PostgreSQL ti o wa ga julọ nipa lilo Patroni, etcd, HAProxy
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:
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.
Gbogbo awọn iṣẹ ṣiṣe ni a ṣe lori awọn ẹrọ foju pẹlu Debian 10 OS ti fi sori ẹrọ.
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
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.
Nigbamii, 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: false
Awọ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
Duro 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:
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 pẹlu iwe aṣẹ Patroni, ati ni pataki pẹlu apakan rẹ nipa ohun elo patronictl, eyiti o pese iraye si irọrun si ṣiṣakoso iṣupọ rẹ.