Ho ile ha etsahala hore nakong eo bothata bo neng bo hlahisoa, ke ne ke se na phihlelo e lekaneng ea ho hlahisa le ho qala tharollo ena feela. Eaba ke qala Google.
Ha ke tsebe hore na ho tšoasa ke eng, empa ka nako ea leshome le metso e 'meli ke tobane le taba ea hore le haeba ke etsa ntho e' ngoe le e 'ngoe mohato ka mohato joaloka thutong, ke lokisetsa tikoloho e tšoanang le ea mongoli, joale ha ho letho le kileng la sebetsa. Ha ke tsebe hore na bothata ke eng, empa ha ke kopana le sena hape, ke ile ka etsa qeto ea hore ke tla ngola thuto ea ka ha tsohle li sebetsa. E 'ngoe e tla sebetsa ka sebele.
Litataiso ho Marang-rang
Hoa etsahala hore Marang-rang ha a utloe bohloko ka lebaka la khaello ea litataiso tse fapaneng, lithupelo, mohato ka mohato le tse ling tse joalo. Ho ile ha etsahala hore ke be le mosebetsi oa ho hlahisa tharollo bakeng sa ho hlophisa le ho haha sehlopha sa failover PostgreSQL, litlhoko tse ka sehloohong tseo e neng e le ho pheta-pheta ho tloha ho seva sa Master ho ea ho likopi tsohle le ho fana ka sebaka sa polokelo ka mokhoa o itekanetseng ha ho ka ba le seva sa Master. ho hloleha.
Tabeng ena, palo ea lisebelisoa tsa thekenoloji e ile ea khethoa:
- PostgreSQL joalo ka DBMS
- e le tharollo ea lihlopha
- etcd joalo ka polokelo e abiloeng bakeng sa Patroni
- HAproxy bakeng sa ho hlophisa sebaka se le seng sa ho kena bakeng sa lits'ebetso tse sebelisang database
bophirima
Bakeng sa tlhokomelo ea hau - ho haha sehlopha sa PostgreSQL se fumanehang haholo u sebelisa Patroni, etcd, HAProxy.
Все операции выполнялись на виртуальных машинах с установленной ОС Debian 10.
jj
Ha ke khothaletse ho kenya etcd mechine e tšoanang moo patroni le postgresql li tla ba teng, kaha disk load e bohlokoa haholo bakeng sa joalo-joalo. Empa bakeng sa merero ea thuto, re tla etsa sona seo.
Ha re kenyeng etcd.
#!/bin/bash
apt-get update
apt-get install etcdKenya litaba ho file ea /etc/default/etcd
[setho]
ETCD_NAME=datanode1 # lebitso la moamoheli la mochini oa hau
ETCD_DATA_DIR=”/var/lib/etcd/default.etcd”
LIADDRESS TSOHLE tsa IP li TŠOANELE HO SEBELISA. LISTER PEER, CLIENT jj E LOKELA HO BEWA HO IP ADDRESS OF HOST
ETCD_LISTEN_PEER_URLS="» # aterese ea koloi ea hau
ETCD_LISTEN_CLIENT_URLS="» # aterese ea koloi ea hau
[sehlopha]
ETCD_INITIAL_ADVERTISE_PEER_URLS="» # aterese ea koloi ea hau
ETCD_INITIAL_CLUSTER=»datanode1=» # liaterese tsa mechini eohle sehlopheng sa etcd
ETCD_INITIAL_CLUSTER_STATE="ncha"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-1″
ETCD_ADVERTISE_CLIENT_URLS="» # aterese ea koloi ea hau
Matha taelo
systemctl restart etcdPostgreSQL 9.6 + patroni
Ntho ea pele eo u lokelang ho e etsa ke ho theha mechine e meraro ea sebele ho kenya software e hlokahalang ho eona. Ka mor'a ho kenya mechine, haeba u latela thuto ea ka, u ka tsamaisa script ena e bonolo e tla (hoo e ka bang) e tla u etsetsa ntho e 'ngoe le e' ngoe. E matha joalo ka motso.
Ka kopo hlokomela hore script e sebelisa PostgreSQL version 9.6, sena se bakoa ke litlhoko tsa ka hare tsa k'hamphani ea rona. Tharollo ha e so lekoe liphetolelong tse ling tsa 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.ymlKa mor'a moo, faeleng ea /etc/patroni.yml eo u sa tsoa e etsa, u lokela ho beha litaba tse latelang, ho hlakile hore u fetola liaterese tsa IP libakeng tsohle ho ea ho liaterese tseo u li sebelisang.
Ela hloko maikutlo a ho yaml ena. Fetola liaterese hore e be tsa hau mochining o mong le o mong o sehlopheng.
/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: falseScript e tlameha ho tsamaisoa ho mechine eohle e meraro ea sehlopha, 'me tlhophiso e ka holimo e tlameha ho kenngoa faeleng ea /etc/patroni.yml mechineng eohle.
Ha u se u qetile ts'ebetso ena ho mechini eohle e sehlopheng, tsamaisa taelo e latelang ho e 'ngoe ea tsona
systemctl start patroni
systemctl start postgresqlEma metsotsoana e ka bang 30, ebe u tsamaisa taelo ena ho mechini e setseng sehlopheng.
HA proxy
Re sebelisa HAproxy e babatsehang ho fana ka ntlha e le 'ngoe ea ho kena. Seva e kholo e tla lula e le teng atereseng ea mochini oo HAproxy e sebelisoang ho oona.
E le hore re seke ra etsa mochini o nang le HAproxy ntlha e le 'ngoe ea ho hloleha, re tla o tsebisa ka sejaneng sa Docker; nakong e tlang e ka kenngoa sehlopheng sa K8 mme ea etsa hore sehlopha sa rona sa failover se tšepahale le ho feta.
Theha bukana moo u ka bolokang lifaele tse peli - Dockerfile le haproxy.cfg. E-ea ho eona.
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.logHlokomela, mela e meraro ea ho qetela ea faele ea haproxy.cfg e lokela ho thathamisa liaterese tsa mochini oa hau. HAproxy e tla ikopanya le Patroni, lihloohong tsa HTTP seva se seholo se tla lula se khutlisa 200, 'me replica e tla lula e khutlela 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
Ha re le bukeng eo lifaele tsa rona ka bobeli li "letsang," a re phetheng ka tatellano litaelo tsa ho paka setshelo, hammoho le ho e qala ka ho fetisetsa likou tse hlokahalang:
docker build -t my-haproxy .
docker run -d -p5000:5000 -p7000:7000 my-haproxy Joale, ka ho bula aterese ea mochini oa hau ka HAproxy ho sebatli le ho totobatsa port 7000, u tla bona lipalo-palo ho sehlopha sa hau.
Seva eo e leng eona master e tla ba maemong a UP, 'me likopi li tla ba maemong a TLASE. Sena se tloaelehile, ha e le hantle ba sebetsa, empa ba hlaha ka tsela ena hobane ba khutlisetsa 503 bakeng sa likōpo tse tsoang HAproxy. Sena se re fa monyetla oa ho tseba hantle hore na ho li-server tse tharo ke mang ea teng hona joale.
fihlela qeto e
O motle! Ka metsotso e 30 feela, u kentse sehlopha sa polokelo ea litaba se sebetsang hantle haholo se mamellang liphoso le se sebetsang hantle se nang le phetisetso ea ho phallela le ho khutlela morao. Haeba u rera ho sebelisa tharollo ena, hlahloba , mme haholo-holo ka karolo ea eona mabapi le ts'ebeliso ea patronictl, e fanang ka phihlello e bonolo ea ho laola sehlopha sa hau.
Kea u babatsa!
Source: www.habr.com
