Cara membuat siaga panas dengan postgresql
- 4697
- 1467
- Daryl Hermiston DVM
Objektif
Tujuan kami adalah untuk membuat salinan basis data PostgreSQL yang terus-menerus disinkronkan dengan yang asli dan menerima pertanyaan hanya baca.
Sistem Operasi dan Versi Perangkat Lunak
- Sistem Operasi: Red Hat Enterprise Linux 7.5
- Perangkat Lunak: Server PostgreSQL 9.2
Persyaratan
Akses istimewa ke sistem master dan slave
Konvensi
- # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan
sudo
memerintah - $ - Diberikan perintah linux untuk dieksekusi sebagai pengguna biasa
Perkenalan
PostgreSQL adalah RDBMS open source (Sistem Manajemen Database Relasional), dan dengan database apa pun, kebutuhan dapat muncul untuk skala dan menyediakan HA (ketersediaan tinggi). Sebuah sistem tunggal yang menyediakan layanan selalu merupakan titik kegagalan tunggal yang mungkin - dan bahkan dengan sistem virtual, mungkin ada waktu ketika Anda tidak dapat menambahkan lebih banyak sumber daya ke satu mesin untuk mengatasi beban yang terus meningkat. Mungkin juga ada kebutuhan untuk salinan lain dari konten database yang dapat ditanyakan untuk analitik yang sudah berjalan lama, yang tidak cocok untuk dijalankan pada database produksi yang sangat transaksi intensif. Salinan ini bisa menjadi pemulihan sederhana dari cadangan terbaru di mesin lain, tetapi data akan ketinggalan zaman segera setelah dipulihkan.
Dengan membuat salinan database yang terus-menerus mereplikasi kontennya dengan yang asli (disebut master atau primer), tetapi saat melakukan itu menerima dan mengembalikan hasil ke kueri baca saja, kita dapat membuat a siaga panas
yang memiliki konten yang sama.
Dalam hal kegagalan pada master, database siaga (atau budak) dapat mengambil alih peran primer, menghentikan sinkronisasi, dan menerima permintaan baca dan tulis, sehingga operasi dapat dilanjutkan, dan master yang gagal dapat dikembalikan ke kehidupan (mungkin mungkin sebagai siaga dengan mengganti cara sinkronisasi). Saat primer dan siaga berjalan, kueri yang tidak berusaha untuk memodifikasi konten basis data dapat dibongkar ke siaga, sehingga sistem secara keseluruhan akan dapat menangani beban yang lebih besar. Namun, perhatikan bahwa akan ada beberapa penundaan - siaga akan berada di belakang master, dengan jumlah waktu yang diperlukan untuk menyinkronkan perubahan. Penundaan ini mungkin waspada tergantung pada pengaturan.
Ada banyak cara untuk membangun sinkronisasi master-slave (atau bahkan master-master) dengan Postgresql, tetapi dalam tutorial ini kami akan mengatur replikasi streaming, menggunakan server postgresql terbaru yang tersedia di repositori Red Hat Red Hat. Proses yang sama umumnya berlaku untuk distribusi lain dan versi RDMBS, tetapi mungkin ada perbedaan mengenai jalur sistem file, paket dan manajer layanan dan semacamnya.
Menginstal perangkat lunak yang diperlukan
Mari kita menginstal postgresql dengan yum
ke kedua sistem:
yum menginstal postgresql-server
Setelah instalasi yang berhasil, kita perlu menginisialisasi kedua kelompok basis data:
# PostgreSQL-Setup InitDB Inisialisasi database… . OKE
Menyalin Untuk menyediakan startup otomatis untuk database saat boot, kami dapat mengaktifkan layanan di Systemd
:
Systemctl Aktifkan PostgreSQL
Kami akan menggunakannya 10.10.10.100
sebagai yang utama, dan 10.10.10.101
Sebagai alamat IP mesin siaga.
Siapkan master
Umumnya merupakan ide yang baik untuk mencadangkan file konfigurasi apa pun sebelum kami membuat perubahan. Mereka tidak mengambil ruang yang layak disebut, dan jika ada yang salah, cadangan file konfigurasi yang berfungsi bisa menjadi penyelamat.
Kita perlu mengedit PG_HBA.conf
dengan editor file teks seperti vi
atau nano
. Kita perlu menambahkan aturan yang akan memungkinkan pengguna database dari siaga untuk mengakses primer. Ini adalah pengaturan sisi server, pengguna belum ada dalam database. Anda dapat menemukan contoh di akhir file yang dikomentari yang terkait dengan replikasi
Database:
# Izinkan koneksi replikasi dari localhost, oleh pengguna dengan hak istimewa # replikasi. #local replikasi postgres peer #host replikasi postgres 127.0.0.1/32 Ident #Host Replication Postgres :: 1/128 Ident
Mari kita tambahkan baris lain ke akhir file, dan tandai dengan komentar sehingga dapat dengan mudah dilihat apa yang diubah dari default:
## myconf: replikasi replikasi host host 10.10.10.101/32 MD5
Pada rasa topi merah, file tersebut terletak secara default di bawah /var/lib/pgsql/data/
direktori.
Kami juga perlu membuat perubahan pada file konfigurasi utama server database, PostgreSQL.conf
, yang terletak di direktori yang sama kami menemukan PG_HBA.conf
.
Temukan pengaturan yang ditemukan di tabel di bawah ini, dan memodifikasinya sebagai berikut:
Bagian | Setingan awal | Pengaturan yang dimodifikasi |
---|---|---|
Koneksi dan otentikasi | #listen_addresses = 'localhost' | listen_addresses = '*' |
Tulis Log Depan | #WAL_LEVEL = minimal | wal_level = 'hot_standby' |
Tulis Log Depan | #archive_mode = off | archive_mode = on |
Tulis Log Depan | #archive_command = " | archive_command = 'true' |
Replikasi | #max_wal_senders = 0 | max_wal_senders = 3 |
Replikasi | #hot_standby = off | hot_standby = on |
Perhatikan bahwa pengaturan di atas dikomentari secara default; Anda perlu tidak berkomentar Dan mengubah nilai -nilai mereka.
Kamu bisa grep
nilai yang dimodifikasi untuk verifikasi. Anda harus mendapatkan sesuatu seperti berikut:
Sekarang pengaturannya baik -baik saja, mari kita mulai server utama:
# systemctl Mulai postgresql
Dan gunakan psql
Untuk membuat pengguna database yang akan menangani replikasi:
# su -postgres -bash -4.2 $ PSQL PSQL (9.2.23) Ketik "bantuan" untuk bantuan. Postgres =# Buat Pengguna Repuser Login Login Terenkripsi Kata Sandi 'SecretPassword' Batas Koneksi -1; Buat peran
Perhatikan kata sandi yang Anda berikan kepada repuser
, Kami akan membutuhkannya di sisi siaga.
Siapkan budak
Kami meninggalkan siaga dengan initdb
melangkah. Kami akan bekerja sebagai postgres
pengguna, yang superuser dalam konteks database. Kami membutuhkan salinan awal dari database utama, dan kami akan mendapatkannya pg_basebackup
memerintah. Pertama, kami menyeka direktori data pada siaga (buat salinan sebelumnya jika Anda mau, tetapi itu hanya database kosong):
$ rm -rf/var/lib/pgsql/data/*
Sekarang kami siap membuat salinan yang konsisten dari yang utama untuk siaga:
$ pg_basebackup -h 10.10.10.100 -u repuser -d/var/lib/pgsql/data/kata sandi: PEMBERITAHUAN: PG_STOP_BACKUP Lengkap, semua segmen WAL yang diperlukan telah diarsipkan
Menyalin Kami perlu menentukan alamat IP master setelah -h, dan pengguna yang kami buat untuk replikasi, dalam hal ini repuser
. Sebagai yang utama kosong selain pengguna ini yang kami buat, pg_basebackup
harus diselesaikan dalam hitungan detik (tergantung pada bandwidth jaringan). Jika terjadi kesalahan, periksa aturan HBA pada primer, kebenaran alamat IP yang diberikan kepada pg_basebackup
perintah, dan port 5432 pada primer dapat dicapai dari siaga (misalnya, dengan telnet
).
Ketika cadangan selesai, Anda akan melihat bahwa direktori data diisi pada budak, termasuk file konfigurasi (ingat, kami menghapus semuanya dari direktori ini):
# ls/var/lib/pgsql/data/backup_label.pg_clog pg_log pg_serial pg_versial postmaster pg_serial.OPTS BASE PG_HBA.conf pg_multixact pg_snapshots pg_tblspc pg_xlog poster.PID Global PG_IDENT.conf pg_notify pg_stat_tmp pg_twophase postgresql.pemulihan conf.conf
Menyalin Sekarang kita perlu melakukan beberapa penyesuaian pada konfigurasi siaga. Alamat IP yang diaktifkan untuk penolakan untuk terhubung dari yang perlu menjadi alamat server master di PG_HBA.conf
:
# tail -n2/var/lib/pgsql/data/pg_hba.conf ## myconf: replikasi replikasi host repuser 10.10.10.100/32 MD5
Menyalin Perubahan dalam PostgreSQL.conf
sama seperti pada master, seperti yang kami salin file itu dengan cadangan juga. Dengan cara ini kedua sistem dapat mengambil peran sebagai master atau siaga mengenai file konfigurasi ini.
Di direktori yang sama, kita perlu membuat file teks yang dipanggil pemulihan.conf
, dan tambahkan pengaturan berikut:
# cat/var/lib/pgsql/data/pemulihan.conf standby_mode = 'on' primer_conninfo = 'host = 10.10.10.100 port = 5432 pengguna = Kata sandi repuser = SecretPassword 'trigger_file ='/var/lib/pgsql/trigger_file '
Menyalin Perhatikan bahwa untuk primer_conninfo
Pengaturan Kami menggunakan alamat IP dari utama dan kata sandi yang kami berikan repuser
di database master. File pemicu hampir dapat dibaca oleh postgres
Pengguna Sistem Operasi, dengan nama file yang valid - jika terjadi crash utama file dapat dibuat (dengan menyentuh
misalnya) yang akan memicu failover pada siaga, yang berarti database mulai menerima operasi tulis juga.
Jika file ini pemulihan.conf
hadir, server akan memasuki mode pemulihan saat startup. Kami memiliki segalanya di tempatnya, sehingga kami dapat memulai siaga, dan melihat apakah semua berfungsi sebagaimana mestinya:
# systemctl Mulai postgresql
Harus membutuhkan waktu lebih banyak dari biasanya untuk mendapatkan prompt kembali. Alasannya adalah bahwa database melakukan pemulihan ke keadaan yang konsisten di latar belakang. Anda dapat melihat kemajuan di logfile utama database (nama file Anda akan berbeda tergantung pada hari dalam seminggu):
$ tailf/var/lib/pgsql/data/pg_log/postgresql-thu.Log Log: Memasuki Mode Standby Log: Streaming Replikasi berhasil terhubung ke log primer: RECOUT dimulai pada 0/3000020 Log: Status pemulihan yang konsisten dicapai pada 0/30000E0 Log: Sistem Basis Data siap menerima koneksi hanya baca hanya baca
Menyalin Memverifikasi pengaturan
Sekarang kedua database sedang berjalan dan berjalan, mari kita uji pengaturan dengan membuat beberapa objek di primer. Jika semuanya berjalan dengan baik, benda -benda itu pada akhirnya harus muncul dengan siaga.
Kami dapat membuat beberapa objek sederhana di primer (yang terlihat akrab dengan saya) psql
. Kita dapat membuat skrip SQL sederhana di bawah ini yang disebut Sampel.SQL
:
-- Buat urutan yang akan berfungsi sebagai PK dari tabel karyawan membuat urutan karyawan_seq mulai dengan 1 kenaikan dengan 1 tidak ada nilai maxvalue 1 cache 1; - Buat tabel karyawan membuat tabel karyawan (emp_id numerik kunci utama default nextval ('karyawan_seq' :: regclass), first_name text not null, last_name text not null, lahir_year numerik bukan nol, lahir_month numerik bukan nol, lahir_dayofmonth numerik bukan nol) ; - masukkan beberapa data ke dalam tabel memasukkan ke dalam karyawan (first_name, last_name, lahir_year, lahir_month, lahir_dayofmonth) nilai ('emily', 'James', 1983,03,20); masukkan ke karyawan (first_name, last_name, lahir_year, lahir_month, lahir_dayofmonth) nilai ('John', 'Smith', 1990,08,12);
Menyalin Ini adalah praktik yang baik untuk menjaga modifikasi struktur basis data dalam skrip (secara opsional didorong ke dalam repositori kode) juga, untuk referensi nanti. Terbayar saat Anda perlu tahu apa yang Anda modifikasi, dan kapan. Kami sekarang dapat memuat skrip ke dalam database:
$ psql < sample.sql CREATE SEQUENCE NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "employees_pkey" for table "employees" CREATE TABLE INSERT 0 1 INSERT 0 1
Menyalin Dan kami dapat meminta tabel yang kami buat, dengan dua catatan dimasukkan:
Postgres =# Pilih * dari karyawan; emp_id | first_name | last_name | Birth_year | Birth_month | lahir_dayofmonth --------+------------+-----------+------------+- -----------+------------------ 1 | Emily | James | 1983 | 3 | 20 2 | John | Smith | 1990 | 8 | 12 (2 baris)
Menyalin Mari kita minta siaga untuk data yang kami harapkan identik dengan yang utama. Berdaya kita dapat menjalankan kueri di atas:
Postgres =# Pilih * dari karyawan; emp_id | first_name | last_name | Birth_year | Birth_month | lahir_dayofmonth --------+------------+-----------+------------+- -----------+------------------ 1 | Emily | James | 1983 | 3 | 20 2 | John | Smith | 1990 | 8 | 12 (2 baris)
Menyalin Dan dengan itu kami selesai, kami memiliki konfigurasi siaga panas yang berjalan dengan satu server primer dan satu siaga, menyinkronkan dari master ke slave, sementara kueri baca saja diizinkan di Slave.
Kesimpulan
Ada banyak cara untuk membuat replikasi dengan postgresql, dan ada banyak tuneable mengenai replikasi streaming yang kami atur juga untuk membuat konfigurasi lebih kuat, gagal, atau bahkan memiliki lebih banyak anggota. Tutorial ini tidak berlaku untuk sistem produksi - ini dimaksudkan untuk menunjukkan beberapa pedoman umum tentang apa yang terlibat dalam pengaturan semacam itu.
Ingatlah bahwa alat tersebut pg_basebackup
hanya tersedia dari PostgreSQL versi 9.1+. Anda juga dapat mempertimbangkan untuk menambahkan pengarsipan Wal yang valid ke konfigurasi, tetapi demi kesederhanaan, kami melewatkannya dalam tutorial ini untuk menjaga hal -hal untuk melakukan minimal sambil mencapai sepasang sistem sinkronisasi yang berfungsi. Dan akhirnya satu hal lagi yang perlu diperhatikan: siaga bukan cadangan. Memiliki cadangan yang valid setiap saat.
Tutorial Linux Terkait:
- Hal -hal yang harus diinstal pada ubuntu 20.04
- Ubuntu 20.04 Instalasi PostgreSQL
- Ubuntu 22.04 Instalasi PostgreSQL
- Pengantar Otomatisasi Linux, Alat dan Teknik
- Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
- File Konfigurasi Linux: 30 Teratas Paling Penting
- Unduh Linux
- Can Linux mendapatkan virus? Menjelajahi kerentanan Linux…
- Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
- Hal -hal yang harus diinstal pada Ubuntu 22.04