Bir tane Master, bu masterdan beslenen bir replika ve bu replikadan stream olarak beslenen bir replica daha kurulumunu ve konfigürasyonunu yapacağız. Postgresql 12.4 major sürümü üzerinde bu işlemleri gerçekleştireceğiz;
ROLE | IP | |
Master | 192.168.182.121 | |
Replica-1 | 192.168.182.152 | |
Cascade Replica | 192.168.182.153 |
Postgresql Cascade replika kurulumu için aşağıdaki adımları her üç sunucu için de yapıyoruz.
# yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
--Major version indirdiğimiz için tüm komponentlerin sonuna major versiyonunu belirtiyoruz belirtmezsek en güncel olanını alacaktir.
# yum install postgresql12-12.4 postgresql12-server-12.4 postgresql12-contrib-12.4 -y
--Postgresql custom directory istiyorsak aşağıdaki şekilde yapılandırma yapmalıyız.
# systemctl edit postgresql-12.service
[Service]
Environment=PGDATA=/postgres/pgsql/12/data
--custom directory yapılandırmayı kontrol edelim
# cat /etc/systemd/system/postgresql-12.service.d/override.conf
[Service]
Environment=PGDATA=/postgres/pgsql/12/data
--postgres user bash_profile dosyamızı düzenleyelim
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
[ -f /etc/profile ] && source /etc/profile
[ -f /var/lib/pgsql/.pgsql_profile ] && source /var/lib/pgsql/.pgsql_profile
#PostgreSQL Server Environment Variable Settings.
export LD_LIBRARY_PATH=/usr/pgsql-12/bin
export PATH=/usr/pgsql-12/bin:$PATH
export PGDATA=/postgres/pgsql/12/data
--yapılandırmayı aktifleştirelim
# systemctl daemon-reload
--Veritabanımızı initial hale getirelim;
# /usr/pgsql-12/bin/postgresql-12-setup initdb
--Postgres servislerini enable yaparak sonrasında çalıştıralım
# systemctl enable postgresql-12
# systemctl start postgresql-12
--Postgres userına geçerek psql komut satırından gelen istekleri dinlemesi için aşağıdaki komutu çalıştıralım;
# su - postgres
$ psql
postgres=# ALTER SYSTEM SET listen_addresses TO '*';
Replika veritabanlarındaki postgresql servisleri durdurup master tarafındaki konfigürasyonu yapalım;
--psql komut satrırından replica yapacak schemayı oluşturalım;
postgres=# create user replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'replicator';
CREATE ROLE
--rolü kontrol edelim
postgres=# \du
List of roles
Role name | Attributes | Member of
------------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
replicator | Replication | {}
pg_hba dosyasından erişim izinleriminizi verelim;
$ pwd
/postgres/pgsql/12/data
$ vi pg_hba.conf
--dosyaya aşağıdaki satırlar eklenir.
host all all 0.0.0.0/0 trust
host replication replicator 192.168.182.152/32 trust
$ vş postgresql.conf
wal_level = logical
wal_log_hints = on
max_wal_senders = 8
max_wal_size = 1GB
hot_standby = on
--Bu ayarların geçerli olabilmesi için
postgres=# SELECT pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
--veya
systemctl reload postgresql-12
Master kısmı test ortamı için hazırlandı arzu eilirse içerisine bir kaç schema , tablespace vs oluşturulabilir,
CREATE ROLE frkdb WITH
LOGIN
SUPERUSER
INHERIT
CREATEDB
CREATEROLE
NOREPLICATION
ENCRYPTED PASSWORD 'Welcome1';
*********
CREATE TABLESPACE tbs_frkdb
OWNER frkdb
LOCATION '/postgres/pgsql/12/data/pg_tblspc/tbs_frkdb';
********
--Normalde data dizinin içerisine tablespace oluşturulmaz ancak olduğu durumlarda ne oluyor diye biz --bu şekilde bir yapılandırma yapıyoruz.
CREATE TABLESPACE tbs_frkdb
OWNER frkdb
LOCATION '/postgres/pgsql/12/data/pg_tblspc/tbs_frkdb';
******
CREATE DATABASE frkdb
WITH
OWNER = frkdb
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.UTF-8'
LC_CTYPE = 'en_US.UTF-8'
TABLESPACE = tbs_frkdb
CONNECTION LIMIT = -1;
Şimdi replica kısımlarını yapılandıralım, replica veritabanlarını kurmuştuk zaten, postgresql servisleri çalışıyorsa durduralım.
# systemctl stop postgresql-12
data sizinleriin altı tamamen silinir, pg_basebackup kızmasın diye. data altında oluşturulmuş bir tablespace varsa (normalde olmaması beklenir) bunun için farklı bir yola dizin oluşturup tablespace maping yapılacaktır.
# pwd
/postgres/pgsql/12/data
# rm -rf *
# su - postgres
--mapping yapılacak tablespace dizini olşuturulur owner postgresql ve izin 700 olmalıdır.
$ mkdir tbs_frkdb
$ chmod 700 tbs_frkdb/
$ ll
total 0
drwx------ 2 postgres postgres 6 Nov 3 10:22 data
drwx------ 2 postgres postgres 6 Nov 3 10:24 tbs_frkdb
pg_basebackup -h 192.168.182.121 -U replicator -p 5432 --tablespace-mapping=/postgres/pgsql/12/data/pg_tblspc/tbs_frkdb=/postgres/pgsql/12/tbs_frkdb -D $PGDATA -Fp -Xs -P -R
WARNING: could not read symbolic link "pg_tblspc/tbs_frkdb": Invalid argument
33518/33518 kB (100%), 2/2 tablespaces
--postgresql.auto.conf içeriğini kontrol et
$ pwd
/postgres/pgsql/12/data
$ cat postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
listen_addresses = '*'
primary_conninfo = 'user=replicator passfile=''/var/lib/pgsql/.pgpass'' host=192.168.182.121 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
--standby.signal dosyası oluşmuş mu? kontrol et
$ ls standby.signal
standby.signal
--Postgresql Servisleri başlatılır
# systemctl start postgresql-12
İlk replica kurulumu tamamlandı, şimdi bu replicadan beslenen bir replica daha oluşturacağız. Bunun için farklı bir konfigürasyon gerekmiyor, 192.168.182.152 sunucumuz master gibi davrancak bunun replicası ise 192.168.182.153 olacak.
192.168.182.152 makinesinde ilgili izinleri verelim;
--pg_hba.conf dosyasına aşağıdakileri ekleyelim.
host all all 0.0.0.0/0 trust
host replication replicator 0.0.0.0/32 trust
host replication replicator 192.168.182.153/32 trust
postgres=# SELECT pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
Cascade Replica Sunucusu için konfigürasyonu yapalım; ( 192.168.182.153 )
--Custom dizinimiz ayarlayalım;
# systemctl edit postgresql-12.service
[Service]
Environment=PGDATA=/postgres/pgsql/12/data
# systemctl daemon-reload
--postgres user için bash_profile
f [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
[ -f /etc/profile ] && source /etc/profile
[ -f /var/lib/pgsql/.pgsql_profile ] && source /var/lib/pgsql/.pgsql_profile
#PostgreSQL Server Environment Variable Settings.
export LD_LIBRARY_PATH=/usr/pgsql-12/bin
export PATH=/usr/pgsql-12/bin:$PATH
export PGDATA=/postgres/pgsql/12/data
--data diznini temzileyelim;
$ cd $PGDATA
$ pwd
/postgres/pgsql/12/data
$ rm -rf *
--tablespace dizinini oluşturalım;
$ mkdir tbs_frkdb
$ chmod 700 tbs_frkdb/
$ pg_basebackup -h 192.168.182.152 -U replicator -p 5432 -D $PGDATA -Fp -Xs -P -R
WARNING: could not read symbolic link "pg_tblspc/tbs_frkdb": Invalid argument
33521/33521 kB (100%), 2/2 tablespaces
$ cd /postgres/pgsql/12/data/
$ vi postgresql.auto.conf
--Koyu olan kısmı siliyoruz..
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
listen_addresses = '*'
primary_conninfo = 'user=replicator passfile=''/var/lib/pgsql/.pgpass'' host=192.168.182.121 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
primary_conninfo = 'user=replicator passfile=''/var/lib/pgsql/.pgpass'' host=192.168.182.152 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
--ardından postgres servislerini çalıştıryoruz...
# systemctl start postgresql-12
Testlerimizi gerçekleştirelim.
--Masterdan
postgres=# select * from pg_stat_replication;
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag
| replay_lag | sync_priority | sync_state | reply_time
-------+----------+------------+------------------+-----------------+-----------------+-------------+-------------------------------+--------------+-----------+-----------+-----------+-----------+------------+-----------+-----------
+------------+---------------+------------+-------------------------------
13105 | 16384 | replicator | walreceiver | 192.168.182.152 | | 58758 | 2021-11-03 11:45:53.240321+03 | | streaming | 0/3000148 | 0/3000148 | 0/3000148 | 0/3000148 | |
| | 0 | async | 2021-11-03 12:30:46.879242+03
(1 row)
--1.Replicadan
postgres=# select * from pg_stat_replication;
pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag
| replay_lag | sync_priority | sync_state | reply_time
-------+----------+------------+------------------+-----------------+-----------------+-------------+-------------------------------+--------------+-----------+-----------+-----------+-----------+------------+-----------+-----------
+------------+---------------+------------+-------------------------------
14053 | 16384 | replicator | walreceiver | 192.168.182.153 | | 34206 | 2021-11-03 12:30:00.877699+03 | | streaming | 0/3000148 | 0/3000148 | 0/3000148 | 0/3000148 | |
| | 0 | async | 2021-11-03 12:32:10.278451+03
(1 row)
Bir yanıt yazın