PostgreSQL atau Postgres adalah sistem manajemen basis data relasional objek sumber terbuka (ORDBMS) dengan lebih dari 15 tahun pengembangan aktif. Ini adalah server database yang kuat yang dapat menangani beban kerja yang tinggi. PostgreSQL dapat digunakan di server Linux, Unix, BSD, dan Windows.
Replikasi database master/slave adalah proses penyalinan (syncing) data dari database di satu server (master) ke database di server lain (slave). Manfaat utama dari proses ini adalah untuk mendistribusikan database ke beberapa mesin, jadi ketika server master mengalami masalah, ada mesin cadangan dengan data yang sama yang tersedia untuk menangani permintaan tanpa gangguan.
PostgreSQL menyediakan beberapa cara untuk mereplikasi database. Hal ini dapat digunakan untuk tujuan backup dan untuk menyediakan server database ketersediaan tinggi. Dalam tutorial ini, kami akan menunjukkan cara menginstal dan mengkonfigurasi replikasi Master-Slave PostgreSQL 9.6 di server CentOS 7. Kami akan menggunakan mode siaga Panas, dan ini adalah titik awal yang sangat baik untuk mempelajari PostgreSQL secara mendalam.
Apa yang akan kami lakukan
- Instal PostgreSQL 9.6
- Mulai dan konfigurasikan PostgreSQL 9.6
- Konfigurasi Firewalld
- Konfigurasikan server Master
- Konfigurasi server Budak
- Pengujian
Prasyarat
- 1 server CentOS 7
- Guru - Izin Baca dan Tulis - IP:10.0.15.10
- 1 server CentOS 7
- Budak - Hanya Izin Baca- IP:10.0.15.11
- Keistimewaan Root
Langkah 1 - Instal PostgreSQL 9.6
Pada tutorial kali ini kita akan membahas cara install PostgreSQL versi 9.6 terbaru di server CentOS 7. Secara default, repositori resmi CentOS menawarkan versi yang lebih lama, jadi kita perlu menginstal PostgreSQL dari repositori resmi.
Tambahkan repositori PostgreSQL 9.6 baru ke sistem.
yum -y install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
Sekarang instal PostgreSQL 9.6 menggunakan perintah yum berikut.
yum -y install postgresql96-server postgresql96-contrib
Jadi dengan cara ini, Anda dapat menginstal PostgreSQL 9.6.
Langkah 2 - Mulai dan konfigurasikan PostgreSQL 9.6
Sebelum memulai layanan postgres, kita perlu menginisialisasi database. Untuk ini, buka '/usr/pgsql-9.6/bin ' dan inisialisasi database dengan pengaturan postgres 'postgresql96-setup '.
cd /usr/pgsql-9.6/bin
./postgresql96-setup initdb
Selanjutnya, mulai layanan postgres dan aktifkan untuk memulai secara otomatis saat boot sistem.
systemctl start postgresql-9.6
systemctl enable postgresql-9.6
Secara default, postgres berjalan pada port 5432. Jadi pastikan status port 5432 adalah 'LISTEN ' dengan menjalankan perintah netstat dengan cara berikut.
netstat -plntu
Jika Anda tidak memiliki perintah netstat, instal net-tools. Itu bagian dari alat-net.
yum -y install net-tools
Jadi PostgreSQL 9.6 telah dimulai. Tetapi kita masih perlu mengkonfigurasi kata sandi untuk pengguna postgres. Login sebagai pengguna 'postgres', lalu akses shell 'psql' postgres.
su - postgres
psql
Berikan 'postgres ' pengguna kata sandi baru dengan kueri di bawah ini.
\password postgres
Enter new password:
Jadi PostgreSQL 9.6 telah dimulai dan kata sandi baru untuk pengguna postgres telah dikonfigurasi.
Langkah 3 - Konfigurasi Firewalld
Firewalld adalah alat manajemen firewall default pada CentOS 7. Kami akan memulai layanan ini dan membuka port untuk koneksi PostgreSQL.
Mulai firewalld dan aktifkan untuk memulai secara otomatis saat boot sistem menggunakan perintah berikut:
systemctl start firewalld
systemctl enable firewalld
Selanjutnya, tambahkan layanan postgres baru ke firewalld dengan perintah berikut.
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
Sekarang periksa port layanan yang terbuka.
firewall-cmd --list-all
Dan Anda akan melihat layanan PostgreSQL telah ditambahkan ke firewalld.
CATATAN: Jalankan Langkah 1, Langkah 2 dan Langkah 3 pada semua Master dan Slave.
Langkah 4 - Konfigurasikan server Master
Pada langkah ini, kita akan mengkonfigurasi server master untuk replikasi. Ini adalah server utama, memungkinkan proses membaca dan menulis dari aplikasi yang berjalan di atasnya. PostgreSQL pada master hanya berjalan pada alamat IP '10.0.15.10', dan melakukan replikasi streaming ke server slave.
Buka direktori data pgsql '/var/lib/pgsql/9.6/data ' dan edit file konfigurasi 'postgresql.conf '.
cd /var/lib/pgsql/9.6/data
vim postgresql.conf
Batalkan komentar pada baris 'listen_addresses' dan ubah nilai alamat IP server menjadi '10.0.15.10'.
listen_addresses = '10.0.15.10'
Batalkan komentar pada baris 'wal_level' dan ubah nilainya menjadi 'hot_standby '.
wal_level = hot_standby
Untuk tingkat sinkronisasi, kami akan menggunakan sinkronisasi lokal. Batalkan komentar dan ubah baris nilai seperti di bawah ini.
synchronous_commit = local
Aktifkan mode pengarsipan dan berikan variabel archive_command perintah sebagai nilai.
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'
Untuk setelan 'Replikasi', batalkan komentar pada baris 'wal_sender' dan ubah nilainya menjadi 2 (dalam tutorial ini, kami hanya menggunakan 2 server master dan slave), dan untuk nilai 'wal_keep_segments' adalah 10.
max_wal_senders = 2
wal_keep_segments = 10
Untuk nama aplikasi, batalkan komentar pada baris 'synchronous_standby_names' dan ubah nilainya menjadi 'pgslave01 '.
synchronous_standby_names = 'pgslave01'
Itu dia. Simpan perubahan ini dan keluar dari editor.
Selanjutnya, di file postgresql.conf, mode arsip diaktifkan, jadi kita perlu membuat direktori baru untuk tujuan pengarsipan.
Buat direktori baru, ubah izinnya, dan ubah pemiliknya menjadi pengguna postgres.
mkdir -p /var/lib/pgsql/9.6/archive/
chmod 700 /var/lib/pgsql/9.6/archive/
chown -R postgres:postgres /var/lib/pgsql/9.6/archive/
Sekarang edit file pg_hba.conf.
vim pg_hba.conf
Tempelkan konfigurasi di bawah ini ke akhir baris.
# Localhost
host replication replica 127.0.0.1/32 md5
# PostgreSQL Master IP address
host replication replica 10.0.15.10/32 md5
# PostgreSQL SLave IP address
host replication replica 10.0.15.11/32 md5
Simpan dan keluar. Semua konfigurasi selesai. Sekarang, restart PostgreSQL 9.6 menggunakan perintah berikut.
systemctl restart postgresql-9.6
Selanjutnya, kita perlu membuat pengguna baru dengan hak replikasi. Kami akan membuat pengguna baru bernama 'replika '.
Masuk sebagai pengguna postgres, dan buat 'replika . baru ' pengguna dengan sandi '[email protected] '.
su - postgres
createuser --replication -P replica
Enter New Password:
Jadi dengan ini, konfigurasi Master PostgreSQL 9.6 telah selesai, dan pengguna untuk replikasi telah dibuat.
Langkah 5 - Konfigurasi server Slave
Pada langkah ini, kita akan mengkonfigurasi server Slave. Kami ingin mengganti direktori data postgres di server budak dengan data postgres dari server master, dan kemudian mengkonfigurasi server budak untuk berjalan di bawah alamat IP '10.0.15.11', dan akhirnya mengaktifkan hot_standby di atasnya untuk memungkinkan hanya membaca tanpa menulis.
Sebelum kita mulai mengkonfigurasi server budak, hentikan layanan postgres menggunakan perintah systemctl di bawah ini.
systemctl stop postgresql-9.6
Lalu pergi ke direktori postgres, dan backup direktori data.
cd /var/lib/pgsql/9.6/
mv data data-backup
Buat direktori data baru dan ubah izin kepemilikan direktori menjadi pengguna postgres.
mkdir -p data/
chmod 700 data/
chown -R postgres:postgres data/
Selanjutnya, login sebagai pengguna postgres dan salin semua direktori data dari 'Master ' server ke 'Budak ' server sebagai pengguna replika.
su - postgres
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/pgsql/9.6/data -P --xlog
Password:
Ketik kata sandi Anda dan tunggu transfer data dari master ke server slave.
Setelah transfer selesai, masuk ke direktori data postgres dan edit file postgresql.conf di server slave.
cd /var/lib/pgsql/9.6/data/
vim postgresql.conf
Ubah nilai 'listen_addresses' menjadi ip address server slave '10.0.15.11'.
listen_addresses = '10.0.15.11'
Aktifkan 'hot_standby ' di server budak dengan menghapus komentar pada baris berikut dan ubah nilainya menjadi 'on '.
hot_standby = on
Itu dia. Simpan perubahan dan keluar dari editor.
Kemudian buat 'recovery.conf . baru ' file dengan vim.
vim recovery.conf
Tempelkan konfigurasi berikut di dalamnya.
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica [email protected] application_name=pgslave01'
trigger_file = '/tmp/postgresql.trigger.5432'
Simpan perubahan dan keluar dari file.
Catatan: Di utama_conninfo , masukkan detail server Anda sendiri.
Ubah izin kepemilikan file recovery.conf menjadi milik pengguna 'postgres'.
chmod 600 recovery.conf
chown postgres:postgres recovery.conf
Dan mulai PostgreSQL 9.6 di server budak.
systemctl start postgresql-9.6
Konfigurasi server budak telah selesai.
Sekarang ketika Anda memeriksa server Slave, Anda akan melihat bahwa PostgreSQL 9.6 berjalan di server dengan alamat IP '10.0.15.11 '.
netstat -plntu
Langkah 6 - Pengujian
Instalasi dan konfigurasi untuk replikasi Master-Slave PostgreSQL 9.6 telah selesai. Untuk menguji penyiapan, periksa aliran status replikasi dan uji replikasi data dari Master ke Slave.
Masuk ke server Master dan beralih ke pengguna postgres.
su - postgres
Selanjutnya, periksa replikasi status streaming PostgreSQL dengan perintah berikut.
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"
Anda akan melihat nilai statusnya adalah 'streaming ', dan sync_state adalah 'sinkronisasi '.
Selanjutnya uji dengan memasukkan data dari master kemudian cek semua data pada server slave.
Masuk sebagai pengguna postgres dan akses shell PostgreSQL di 'MASTER ' server.
su - postgres
psql
Buat tabel baru 'replica_test ' dan masukkan beberapa data ke dalamnya dengan kueri penyisipan berikut.
CREATE TABLE replica_test (test varchar(100));
INSERT INTO replica_test VALUES ('howtoforge.com');
INSERT INTO replica_test VALUES ('This is from Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');
Dan sekarang login ke 'SLAVE ' server mirip dengan yang Anda lakukan pada master.
su - postgres
psql
Periksa semua data dari tabel 'replica_test' menggunakan kueri di bawah ini.
select * from replica_test;
Jadi, Anda akan melihat bahwa semua data direplikasi dari 'MASTER ' server ke 'BUDAK ' server.
Tes tambahan
Uji untuk melakukan tindakan 'MENULIS' dari server 'SLAVE'.
INSERT INTO replica_test VALUES ('this is SLAVE');
Dan hasilnya seharusnya 'Tidak dapat menjalankan INSERT '.
Maka instalasi dan konfigurasi PostgreSQL 9.6 Master-Slave Replication pada CentOS 7 berhasil.
Referensi
- https://www.postgresql.org/download/linux/redhat/
- https://www.server-world.info/en/note?os=CentOS_7