Rabu, 24 Juli 2024

POSTGRES-promote

 

Peralihan Replikasi PostgreSQL: Panduan Langkah demi Langkah

https://medium.com/@umairhassan27/postgresql-replication-switchover-a-step-by-step-guide-d42107d860
Umair Hasan
3 menit membaca

Blog Terkait: Menyiapkan Replikasi PostgreSQL di Server Budak: Panduan Langkah demi Langkah

Server Langsung Saat Ini: 192.168.10.10 (Utama)
Server Cadangan Saat Ini: 192.168.10.11 (Siaga)

Perkenalan:

Replikasi PostgreSQL memainkan peran penting dalam memastikan ketersediaan tinggi dan redundansi data untuk database Anda. Dalam skenario ketika server utama tidak tersedia, failover ke server siaga dapat membantu menjaga akses tanpa gangguan ke data Anda. Panduan ini menguraikan proses langkah demi langkah dalam melakukan peralihan manual di PostgreSQL. Dengan mengikuti panduan ini, Anda akan diperlengkapi untuk melakukan transisi dengan lancar dari server utama ke server siaga sambil memperbarui konfigurasi IP.

Langkah 1: Verifikasi Sinkronisasi Siaga

Sebelum memulai peralihan, pastikan server siaga sinkron dengan server utama. Jalankan perintah SQL berikut untuk memeriksa status sinkronisasi:

PILIH  KASUS 
KETIKA pg_last_wal_receive_lsn() = pg_last_wal_replay_lsn() LALU 0 EKSTRAK
LAINNYA (EPOCH FROM now() - pg_last_xact_replay_timestamp()) AKHIR SEBAGAI log_delay;

Kueri ini membandingkan LSN (Nomor Urutan Log) dari data WAL (Write-Ahead Log) yang diterima dan diputar ulang, yang menunjukkan status sinkronisasi.

Langkah 2: Izinkan IP Langsung Saat Ini di Cadangan Saat Ini

Untuk mengizinkan IP aktif saat ini mengakses cadangan saat ini (siaga), ubah file pg_hba.conf:

cd /var/lib/postgresql/12/main 
echo "replikasi replikasi host 192.168.10.10/32 md5" >> pg_hba.conf

Langkah 3: Matikan Utama

Hentikan instance PostgreSQL utama:

/usr/lib/postgresql/12/bin/ 
./pg_ctl -D /var/lib/postgresql/12/stop utama

Periksa log apakah instance telah dihentikan sepenuhnya. Setelah selesai maka lanjutkan ke langkah berikutnya.

Langkah 4: Promosikan Siaga ke Baca-Tulis

Promosikan server siaga menjadi server utama baru dengan menjalankan perintah berikut:

psql -c "PILIH pg_promote();" 
#Perintah ini mempromosikan standby ke primer baca-tulis.

Langkah 5: Buat standby.signaldi Pratama Lama

Buat standby.signalfile di primer lama untuk memastikan file dimulai sebagai file siaga ketika dibawa kembali online:

sentuh /var/lib/postgresql/12/main/standby.signal

Langkah 6: Edit postgresql.auto.confdi Pratama Lama

#Perbarui postgres. file .conf otomatis dengan  DETAIL MASTER SERVER BARU
vi /var/ lib /postgresql/ 12 /main/postgresql. auto .conf

#Modifikasi parameter primary_conninfo untuk mencerminkan IP siaga baru

: primary_conninfo = 'user=replicator host=192.168.10.11 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

Langkah 7: Mulai Pratama Lama sebagai Siaga

Mulai primer lama sebagai siaga menggunakan perintah berikut:

/usr/lib/postgresql/12/bin/pg_ctl -D /var/lib/postgresql/12/mulai utama

Langkah 8: Pantau Log

Awasi log untuk memantau status database. Gunakan perintah berikut untuk melihat log:
Log akan memiliki sesuatu seperti “Mulai sebagai standby”

tail -100f /var/lib/postgresql/12/main/log/postgresql-Sat. catatan

Langkah 9: Verifikasi peralihan

Setelah konfigurasi selesai, konfigurasi tersebut diimpor untuk memverifikasi berbagai hal. Kami akan menggunakan beberapa metode untuk memverifikasi proses peralihan.

  1. Verifikasi peralihan menggunakan tampilan yang tersedia.
    Pertama kita akan memeriksa apakah server menerima wals atau tidak menjalankan kueri di bawah ini pada budak baru:
    select * from pg_stat_wal_receiver;
    select pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn(), pg_last_xact_replay_timestamp();

2. Verifikasi dengan mencocokkan tabel di kedua
Log DB ke dalam database langsung (Utama) yang baru dan membuat skema pengujian, tabel, dan memasukkan beberapa catatan untuk verifikasi.

BUAT  TABEL test_schema.test_table ( 
id serial PRIMARY KEY,
nama varchar ( 100 ),
age int
);

INSERT INTO test_schema.test_table (nama, umur) VALUES
( 'Alice' , 28 ),
( 'Bob' , 32 ),
( 'Carol' , 24 );

Sekarang masuk ke server Slave baru dan verifikasi catatan yang dimasukkan, catatan tersebut akan terlihat.

3. Periksa budak baru apakah Read-only atau tidak (Harusnya read-only)

PILIH pg_is_in_recovery(); 
Kueri ini akan mengembalikan nilai boolean tunggal : true jika server dalam keadaan siaga dan false jika server utama.

Kesimpulan

Dengan mengikuti langkah-langkah ini, Anda berhasil melakukan peralihan di PostgreSQL, mengubah alamat IP yang terlibat dan memastikan transisi yang mulus dari alamat utama lama ke alamat siaga baru.

Ingatlah bahwa lingkungan PostgreSQL yang dikelola dengan baik memerlukan pemantauan, pemeliharaan, dan pencadangan rutin. Dengan panduan ini, Anda kini diperlengkapi untuk membangun penyiapan PostgreSQL yang kuat dan memiliki ketersediaan tinggi yang dapat menangani data penting organisasi Anda dengan percaya diri.

Untuk artikel lebih mendalam tentang PostgreSQL dan manajemen basis data, ikuti Umair Hassan di LinkedIn dan Medium .


===========================================

1.Diserver primary

postgres@BY-PSQL-DB1:~$ . primary_stop.sh  
waiting for server to shut down.... done
server stopped
postgres@BY-PSQL-DB1:~$

2.Diserver replikasi

postgres@BY-PSQL-DB2:~$ psql -p 5401
psql (16.3 (Ubuntu 16.3-1.pgdg24.04+1))
Type "help" for help.
postgres=# select pg_promote();
pg_promote  
------------
t
(1 row)

postgres=# \q

postgres@BY-PSQL-DB2:~$ cd replica_db
postgres@BY-PSQL-DB2:~/replica_db$ ls
backup_label.old  base    pg_commit_ts  pg_hba.conf    pg_logical    pg_notify    pg_serial     pg_stat      pg_subtrans  pg_twophase  pg_wal   postgresql.auto.conf  postmaster.opts
backup_manifest   global  pg_dynshmem   pg_ident.conf  pg_multixact  pg_replslot  pg_snapshots  pg_stat_tmp  pg_tblspc    PG_VERSION   pg_xact  postgresql.conf       postmaster.pid
postgres@BY-PSQL-DB2:~/replica_db$ vi postgresql.conf

                                # (change requires restart)

# - Primary Server -

# These settings are ignored on a standby server.

synchronous_standby_names = '*' # standby servers that provide sync rep
                               # method to choose sync standbys, number of sync standbys,
                               # and comma-separated list of application_name
                               # from standby(s); '*' = all

# - Standby Servers -

# These settings are ignored on a primary server.
#primary_conninfo = 'user=replica host=172.16.30.245 password=password port=5401 application_name=psql1-byond'  

#primary_conninfo = ''                  # connection string to sending server
#primary_slot_name = ''                 # replication slot on sending server
#hot_standby = on           

3.Diserver primary

postgres@BY-PSQL-DB1:~/primary_db$ touch standby.signal                             

postgres@BY-PSQL-DB1:~/primary_db$ ls
base    pg_commit_ts  pg_hba.conf    pg_logical    pg_notify    pg_serial     pg_stat      pg_subtrans  pg_twophase  pg_wal   postgresql.auto.conf  postmaster.opts
global  pg_dynshmem   pg_ident.conf  pg_multixact  pg_replslot  pg_snapshots  pg_stat_tmp  pg_tblspc    PG_VERSION   pg_xact  postgresql.conf       standby.signal
postgres@BY-PSQL-DB1:~/primary_db$ vi postgresql.auto.conf

# - Primary Server -

# These settings are ignored on a standby server.

synchronous_standby_names = '*' # standby servers that provide sync rep
                               # method to choose sync standbys, number of sync standbys,
                               # and comma-separated list of application_name
                               # from standby(s); '*' = all

# - Standby Servers -

# These settings are ignored on a primary server.

#primary_conninfo = ''                  # connection string to sending server
primary_conninfo = 'user=replica host=172.16.30.246 password=password port=5401 application_name=psql2-byond'
#primary_slot_name = ''                 # replication slot on sending server
hot_standby = on                        # "off" disallows queries during recovery
                                       # (change requires restart)
#max_standby_archive_delay = 30s        # max delay before canceling queries
                                 

postgres@BY-PSQL-DB1:~$ . primary_start.sh  
waiting for server to start.... done
server started
postgres@BY-PSQL-DB1:~$ psql -p 5401
psql (16.3 (Ubuntu 16.3-1.pgdg24.04+1))
Type "help" for help.

postgres=# \l

 

Tidak ada komentar:

Posting Komentar