ProHoster > Блог > Nchịkwa > Iwulite ụyọkọ PostgreSQL dị nke ukwuu site na iji Patroni, wdgd, HAProxy
Iwulite ụyọkọ PostgreSQL dị nke ukwuu site na iji Patroni, wdgd, HAProxy
Ọ bụ ezie na n'oge nsogbu ahụ, enweghị m ahụmahụ zuru oke iji mepụta na ịmalite ngwọta a naanị. Ma maliteziri m Googling.
Amaghị m ihe nwude ahụ bụ, ma maka oge nke iri na ụma, m na-eche eziokwu ahụ ihu na ọ bụrụgodị na m na-eme ihe ọ bụla site na nzọụkwụ dị ka nkuzi, kwadebe otu gburugburu ebe obibi dị ka onye edemede, mgbe ahụ ọ dịghị ihe na-arụ ọrụ. Amaghị m ihe ọ bụ, mana mgbe m zutere nke a ọzọ, ekpebiri m na m ga-ede nkuzi nke m mgbe ihe niile na-arụ ọrụ. Otu nke ga-arụ ọrụ.
Ntuziaka na ịntanetị
Ọ bụ naanị na ịntanetị anaghị ata ahụhụ site na enweghị ntuziaka dị iche iche, nkuzi, nzọụkwụ-site-nzọụkwụ na ihe ndị yiri ya. Ọ dị otu a ka e nyere m ọrụ ịmepụta ihe ngwọta maka ịhazi nke ọma na iwulite ụyọkọ PostgreSQL na-adịghị mma, ihe bụ isi ihe achọrọ bụ nke na-ebugharị nsụgharị site na ihe nkesa Master na ihe niile na-emepụta ihe na-akpaghị aka na ihe omume nke ihe nkesa Master. ọdịda.
N'oge a, a na-ekpebi nchịkọta teknụzụ eji eme ihe:
HAproxy maka ịhazi otu ntinye ntinye maka ngwa site na iji nchekwa data
ọnọdụ
Maka nlebara anya gị - wulite ụyọkọ PostgreSQL dị nke ukwuu site na iji Patroni, wdgd, HAProxy.
Emere ọrụ niile na igwe mebere nke etinyere Debian 10 OS.
wdg
Anaghị m akwado ịwụnye etcd n'otu igwe ebe patroni na postgresql ga-adị, ebe ọ bụ na ibu diski dị ezigbo mkpa maka wdg. Mana maka ebumnuche nkuzi, anyị ga-eme nke ahụ.
Ka anyị tinye wdgd.
#!/bin/bash
apt-get update
apt-get install etcd
Tinye ọdịnaya na /etc/default/etcd faịlụ
[onye otu]
ETCD_NAME=datanode1 # aha nnabata nke igwe gị
ETCD_DATA_DIR=”/var/lib/etcd/default.etcd”
Adreesị IP niile kwesịrị ekwesị. E KWESỊRỊ EKWESỊRỊ NDỊ LISTER PEER, CLIENT etc na adreesị IP nke onye ọbịa
Ihe mbụ ị ga-eme bụ ịtọlite igwe mebere igwe atọ iji wụnye ngwanrọ dị mkpa na ha. Mgbe ị wụnyechara igwe, ọ bụrụ na ị na-agbaso nkuzi m, ị nwere ike ịgba ọsọ edemede a dị mfe nke ga-emere gị ihe niile. Na-agba ọsọ dị ka mgbọrọgwụ.
Biko mara na edemede ahụ na-eji ụdị PostgreSQL 9.6, nke a bụ n'ihi ihe dị n'ime ụlọ ọrụ anyị chọrọ. A nwalebeghị azịza ya na ụdị PostgreSQL ndị ọzọ.
Na-esote, na faịlụ /etc/patroni.yml nke ị mepụtara, ịkwesịrị idobe ọdịnaya ndị a, n'ezie na-agbanwe adreesị IP n'ebe niile gaa na adreesị ị na-eji.
Lezienụ anya na nkọwa ndị dị na yaml a. Gbanwee adrees gị ka ọ bụrụ nke gị na igwe ọ bụla dị na ụyọkọ ahụ.
/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
Edemede ga-agba ọsọ na igwe atọ niile nke ụyọkọ ahụ, a ga-etinyekwa nhazi nke dị n'elu na faịlụ /etc/patroni.yml na igwe niile.
Ozugbo ịmechara ọrụ ndị a na igwe niile dị na ụyọkọ ahụ, gbanye iwu a na nke ọ bụla n'ime ha
Chere ihe dị ka sekọnd 30, wee mee iwu a na igwe ndị fọdụrụ na ụyọkọ ahụ.
HAproxy
Anyị na-eji HAproxy mara mma nye otu ebe ntinye. Ihe nkesa nna ukwu ga-adị mgbe niile na adreesị igwe nke etinyere HAproxy.
Ka anyị wee ghara ime igwe nwere HAproxy ka ọ bụrụ otu ebe ọdịda, anyị ga-ebunye ya n'ime akpa Docker; n'ọdịnihu enwere ike ịmalite ya n'ime ụyọkọ K8 ma mee ka ụyọkọ ọdịda anyị bụrụ nke a pụrụ ịdabere na ya.
Mepụta ndekọ ebe ị nwere ike ịchekwa faịlụ abụọ - Dockerfile na haproxy.cfg. Gaa na ya.
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
Kpachara anya, ahịrị atọ ikpeazụ nke faịlụ haproxy.cfg kwesịrị ịdepụta adreesị nke igwe gị. HAproxy ga-akpọtụrụ Patroni, na HTTP nkụnye eji isi mee ihe nkesa nna ukwu ga-alaghachi 200 mgbe niile, na oyiri ga-alaghachi 503 mgbe niile.
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
N'ịbụ ndị nọ na ndekọ nke faịlụ anyị abụọ 'gha ụgha,' ka anyị mee iwu n'usoro maka ịkwakọ akpa ahụ, yana ịmalite ya na ibugharị ọdụ ụgbọ mmiri ndị dị mkpa:
Ugbu a, site na imepe adreesị igwe gị na HAproxy na ihe nchọgharị wee kọwaa ọdụ ụgbọ mmiri 7000, ị ga-ahụ ọnụ ọgụgụ na ụyọkọ gị.
Ihe nkesa nke bụ nna ukwu ga-adị na steeti UP, na oyiri ga-adị na ala ala. Nke a bụ ihe nkịtị, n'ezie ha na-arụ ọrụ, mana ha na-apụta n'ụzọ dị otú a n'ihi na ha na-eweghachi 503 maka arịrịọ HAproxy. Nke a na-enye anyị ohere ịmara mgbe niile nke sava atọ bụ nna ukwu ugbu a.
nkwubi
Ị mara mma! N'ime naanị nkeji iri atọ, ibunyela ụyọkọ nchekwa data na-anagide mmejọ yana arụmarụ dị elu nwere mmegharị nkwanye ugwu yana ndaghachi azụ akpaaka. Ọ bụrụ na ị na-eme atụmatụ iji ngwọta a, lelee ya na akwụkwọ ikike Patroni, na karịsịa na akụkụ ya gbasara akụrụngwa patronictl, nke na-enye ohere dị mma maka ijikwa ụyọkọ gị.