Cara membuat siap sedia dengan PostgreSQL

Cara membuat siap sedia dengan PostgreSQL

Objektif

Objektif kami adalah untuk membuat salinan pangkalan data PostgreSQL yang sentiasa menyegerakkan dengan yang asal dan menerima pertanyaan baca sahaja.

Sistem operasi dan versi perisian

  • Sistem Operasi: Red Hat Enterprise Linux 7.5
  • Perisian: Server PostgreSQL 9.2

Keperluan

Akses istimewa ke sistem tuan dan hamba

Konvensyen

  • # - Memerlukan arahan Linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
  • $ - Memandangkan perintah Linux dilaksanakan sebagai pengguna yang tidak berkadar biasa

Pengenalan

PostgreSQL adalah sumber terbuka RDBMS (Sistem Pengurusan Pangkalan Data Relasi), dan dengan mana -mana pangkalan data, keperluan mungkin timbul untuk skala dan menyediakan HA (ketersediaan tinggi). Sistem tunggal yang menyediakan perkhidmatan selalu menjadi titik kegagalan tunggal yang mungkin - dan walaupun dengan sistem maya, mungkin ada masa apabila anda tidak dapat menambahkan lebih banyak sumber ke mesin tunggal untuk mengatasi beban yang semakin meningkat. Terdapat juga keperluan untuk satu lagi salinan kandungan pangkalan data yang boleh dipersoalkan untuk analisis jangka panjang, yang tidak sesuai untuk dijalankan pada pangkalan data pengeluaran yang sangat berurusniaga. Salinan ini boleh menjadi pemulihan mudah dari sandaran terbaru pada mesin lain, tetapi data akan ketinggalan zaman sebaik sahaja ia dipulihkan.

Dengan membuat salinan pangkalan data yang sentiasa mereplikasi kandungannya dengan yang asal (dipanggil tuan atau primer), tetapi ketika berbuat demikian menerima dan mengembalikan hasil kepada pertanyaan baca sahaja, kita boleh membuat a Bersedia panas yang mempunyai kandungan yang sama.

Sekiranya kegagalan Master, pangkalan data siap sedia (atau hamba) boleh mengambil alih peranan utama, hentikan penyegerakan, dan terima permintaan membaca dan menulis, jadi operasi dapat diteruskan, dan tuan yang gagal dapat dikembalikan ke kehidupan (mungkin Sebagai siap sedia dengan menukar cara penyegerakan). Apabila kedua -dua primer dan siap sedia berjalan, pertanyaan yang tidak cuba mengubah suai kandungan pangkalan data boleh dilepaskan ke siap sedia, jadi sistem keseluruhan akan dapat mengendalikan beban yang lebih besar. Perhatikan bagaimanapun, akan ada kelewatan - siap sedia akan berada di belakang tuan, dengan jumlah masa yang diperlukan untuk menyegerakkan perubahan. Kelewatan ini mungkin berhati -hati bergantung pada persediaan.

Terdapat banyak cara untuk membina penyegerakan master-hamba (atau bahkan master-master) dengan PostgreSQL, tetapi dalam tutorial ini, kami akan menyiapkan replikasi streaming, menggunakan pelayan PostgreSQL terkini yang terdapat di Red Hat Repositories. Proses yang sama umumnya digunakan untuk pengagihan lain dan versi RDMBS, tetapi mungkin terdapat perbezaan mengenai laluan sistem fail, pakej dan pengurus perkhidmatan dan sebagainya.



Memasang perisian yang diperlukan

Mari pasang PostgreSQL dengan yum kepada kedua -dua sistem:

YUM Pasang postgresql-server

Selepas pemasangan yang berjaya, kita perlu memulakan kedua -dua kluster pangkalan data:

# PostgreSQL-Setup Initdb Inisialisasi Pangkalan Data .. . okey 
Salinan

Untuk menyediakan permulaan automatik untuk pangkalan data pada boot, kami dapat mengaktifkan perkhidmatan di sistemd:

SystemCTL Dayakan PostgreSQL

Kami akan menggunakan 10.10.10.100 sebagai yang utama, dan 10.10.10.101 Sebagai alamat IP mesin siap sedia.

Persediaan tuan

Secara amnya adalah idea yang baik untuk membuat sandaran sebarang fail konfigurasi sebelum membuat perubahan. Mereka tidak mengambil ruang yang patut disebut, dan jika ada yang salah, sandaran fail konfigurasi kerja boleh menjadi penyelamat.

Kita perlu mengedit pg_hba.Conf dengan editor fail teks seperti vi atau Nano. Kita perlu menambah peraturan yang akan membolehkan pengguna pangkalan data dari siap sedia untuk mengakses utama. Ini adalah tetapan sampingan pelayan, pengguna belum wujud dalam pangkalan data. Anda boleh menemui contoh di akhir fail yang dikomentari yang berkaitan dengan replikasi pangkalan data:

# Benarkan sambungan replikasi dari localhost, oleh pengguna dengan keistimewaan replikasi #. #LOCAL Replikasi Postgres Peer #Host Replikasi Postgres 127.0.0.1/32 ident #host replikasi postgres :: 1/128 ident 

Mari tambahkan baris lain ke hujung fail, dan tandakannya dengan komen supaya dapat dilihat dengan mudah apa yang berubah dari lalai:

## myconf: replikasi replikasi replikasi replikasi 10.10.10.101/32 MD5 

Pada perisa Red Hat, fail itu terletak secara lalai di bawah /var/lib/pgsql/data/ direktori.

Kami juga perlu membuat perubahan pada fail konfigurasi utama pelayan pangkalan data, PostgreSQL.Conf, yang terletak di direktori yang sama kami menjumpai pg_hba.Conf.

Cari tetapan yang terdapat dalam jadual di bawah, dan ubah suai mereka seperti berikut:



Seksyen Tetapan asal Tetapan yang diubahsuai
Sambungan dan pengesahan #listen_addresses = 'localhost' mendengar_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 bahawa tetapan di atas dikomentari secara lalai; anda perlu uncomment dan Tukar nilai mereka.

Awak boleh grep nilai yang diubahsuai untuk pengesahan. Anda harus mendapat sesuatu seperti berikut:

Mengesahkan perubahan dengan grep

Sekarang bahawa tetapannya baik -baik saja, mari kita mulakan pelayan utama:

# Systemctl Mula PostgreSQL

Dan gunakan PSQL Untuk membuat pengguna pangkalan data yang akan mengendalikan replikasi:

# Su -Postgres -Bash -4.2 $ PSQL PSQL (9.2.23) Taipkan "bantuan" untuk mendapatkan bantuan. Postgres =# Buat Pengguna Pengguna Replikasi Log masuk Kata Laluan Disulitkan 'Secretpassword' Limit -1; Buat peranan 

Perhatikan kata laluan yang anda berikan kepada repuser, Kami akan memerlukannya di sisi siap sedia.

Persediaan hamba

Kami meninggalkan siaga dengan initdb langkah. Kami akan bekerja sebagai Postgres pengguna, yang menjadi superus dalam konteks pangkalan data. Kami memerlukan salinan awal pangkalan data utama, dan kami akan mendapatnya pg_baseBackup perintah. Mula -mula kita menghapus direktori data pada siap sedia (buat salinan terlebih dahulu jika anda mahu, tetapi hanya pangkalan data kosong):

$ rm -rf/var/lib/pgsql/data/*

Sekarang kita sudah bersedia untuk membuat salinan yang konsisten untuk bersedia:

$ pg_basebackup -h 10.10.10.100 -U repuser -d/var/lib/pgsql/data/kata laluan: notis: pg_stop_backup lengkap, semua segmen wal yang diperlukan telah diarkibkan 
Salinan

Kita perlu menentukan alamat IP tuan selepas -H, dan pengguna yang kami buat untuk replikasi, dalam kes ini repuser. Sebagai yang utama kosong selain pengguna ini yang kami buat, pg_baseBackup harus disiapkan dalam beberapa saat (bergantung pada jalur lebar rangkaian). Sekiranya ada yang salah, periksa peraturan HBA di peringkat utama, ketepatan alamat IP yang diberikan kepada pg_baseBackup perintah, dan port 5432 pada primer dapat dicapai dari siap sedia (contohnya, dengan telnet).

Apabila sandaran selesai, anda akan melihat bahawa direktori data dihuni pada hamba, termasuk fail konfigurasi (ingat, kami memadamkan segala -galanya dari direktori ini):

# ls/var/lib/pgsql/data/backup_label.pg_clog lama pg_log pg_subtrans pg_version postmaster.OPTS BASE PG_HBA.conf pg_multixact pg_snapshots pg_tblspc pg_xlog postmaster.PID Global pg_ident.conf pg_notify pg_stat_tmp pg_twophase postgresql.pemulihan conf.Conf 
Salinan

Sekarang kita perlu membuat beberapa penyesuaian pada konfigurasi siap sedia. Alamat IP diaktifkan untuk repuser untuk menyambung dari keperluan untuk menjadi alamat pelayan induk di pg_hba.Conf:

# ekor -n2/var/lib/pgsql/data/pg_hba.conf ## myconf: replikasi replikasi replikasi replikasi 10.10.10.100/32 MD5 
Salinan

Perubahan dalam PostgreSQL.Conf sama seperti tuan, ketika kami menyalin fail itu dengan sandaran juga. Dengan cara ini kedua -dua sistem boleh mengambil peranan tuan atau siap sedia mengenai fail konfigurasi ini.

Dalam direktori yang sama, kita perlu membuat fail teks yang dipanggil pemulihan.Conf, dan tambahkan tetapan berikut:

# kucing/var/lib/pgsql/data/pemulihan.conf standby_mode = 'on' primary_conninfo = 'host = 10.10.10.100 port = 5432 user = kata laluan repuser = secretpassword 'trigger_file ='/var/lib/pgsql/trigger_file ' 
Salinan

Perhatikan bahawa untuk primary_conninfo menetapkan kami menggunakan alamat IP utama dan kata laluan yang kami berikan kepada repuser dalam pangkalan data induk. Fail pencetus hampir boleh dibaca oleh mana -mana sahaja Postgres Pengguna sistem operasi, dengan nama fail yang sah - sekiranya berlaku kemalangan utama fail boleh dibuat (dengan sentuh Sebagai contoh) yang akan mencetuskan failover pada siaga, yang bermaksud pangkalan data mula menerima operasi menulis juga.

Jika fail ini pemulihan.Conf hadir, pelayan akan memasukkan mod pemulihan pada permulaan. Kami mempunyai segala -galanya, jadi kami boleh memulakan siaga, dan melihat jika semua berfungsi seperti yang sepatutnya:

# Systemctl Mula PostgreSQL

Ia harus mengambil sedikit masa daripada biasa untuk mendapatkan kembali cepat. Sebabnya ialah pangkalan data melakukan pemulihan ke keadaan yang konsisten di latar belakang. Anda dapat melihat kemajuan dalam logfile utama pangkalan data (nama fail anda akan berbeza bergantung pada hari minggu):

$ tailf/var/lib/pgsql/data/pg_log/postgresql-thu.Log Log: Memasuki Mod Siap sedia Log: Replikasi Streaming Berjaya Berhubung ke Log Utama: Redo Bermula pada 0/3000020 Log: Keadaan pemulihan yang konsisten dicapai pada 0/30000e0 Log: Sistem pangkalan data siap untuk menerima Baca Sahaja Sambungan sahaja 
Salinan

Mengesahkan persediaan

Sekarang bahawa kedua -dua pangkalan data sedang berjalan dan berjalan, mari kita menguji persediaan dengan membuat beberapa objek di sekolah rendah. Sekiranya semuanya berjalan lancar, objek tersebut akhirnya akan muncul.

Kita boleh membuat beberapa objek mudah di primer (yang kelihatan saya biasa) dengan PSQL. Kita boleh membuat skrip SQL mudah di bawah yang dipanggil Contoh.SQL:

-- Buat urutan yang akan berfungsi sebagai PK jadual pekerja membuat urutan Pekerja_SEQ START dengan 1 kenaikan dengan 1 NO MaxValue minvalue 1 cache 1; - Buat jadual pekerja membuat pekerja meja (emp_id angka utama utama lalai nextval ('porker_seq' :: regclass), teks first_name tidak null, teks last_name tidak null, numeric_year angka tidak null, kelahiran_month angka tidak null, kelahiran_dayofmonth angka tidak null) ; - Masukkan beberapa data ke dalam jadual memasukkan ke dalam pekerja (first_name, last_name, BIDNYAK_YEAR, BIRTH_MONTH, BIDNYAY_DAYOFMONTH) ('Emily', 'James', 1983,03,20); masukkan ke dalam pekerja (first_name, last_name, BITTE_YEAR, BIRTH_MONTH, BIRTH_DAYOFMONTH) Nilai ('John', 'Smith', 1990,08,12); 
Salinan

Ini adalah amalan yang baik untuk memastikan pengubahsuaian struktur pangkalan data dalam skrip (secara pilihan ditolak ke repositori kod) juga, untuk rujukan kemudian. Membayar apabila anda perlu tahu apa yang anda ubah, dan bila. Kita kini boleh memuat skrip ke dalam pangkalan data:

$ 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 
Salinan

Dan kita boleh menanyakan jadual yang kami buat, dengan kedua -dua rekod dimasukkan:

postgres =# pilih * dari pekerja; emp_id | First_name | last_name | BIRTH_YEAR | BIRTH_MONTH | BIRTH_DAYOFMONTH --------+------------+-----------+------------+-- -----------+------------------ 1 | Emily | James | 1983 | 3 | 20 2 | John | Smith | 1990 | 8 | 12 (2 baris) 
Salinan

Mari kita tanya siaga data yang kita harapkan sama dengan yang utama. Pada bersedia kita boleh menjalankan pertanyaan di atas:

postgres =# pilih * dari pekerja; emp_id | First_name | last_name | BIRTH_YEAR | BIRTH_MONTH | BIRTH_DAYOFMONTH --------+------------+-----------+------------+-- -----------+------------------ 1 | Emily | James | 1983 | 3 | 20 2 | John | Smith | 1990 | 8 | 12 (2 baris) 
Salinan

Dan dengan itu kami selesai, kami mempunyai konfigurasi siap sedia panas dengan satu pelayan utama dan satu siap sedia, menyegerakkan dari tuan ke hamba, sementara pertanyaan baca sahaja dibenarkan di hamba.

Kesimpulan

Terdapat banyak cara untuk membuat replikasi dengan PostgreSQL, dan terdapat banyak lagu mengenai replikasi streaming yang kami buat juga untuk menjadikan konfigurasi lebih mantap, gagal, atau bahkan mempunyai lebih banyak ahli. Tutorial ini tidak terpakai bagi sistem pengeluaran - ini dimaksudkan untuk menunjukkan beberapa garis panduan umum mengenai apa yang terlibat dalam persediaan sedemikian.

Perlu diingat bahawa alat itu pg_baseBackup hanya boleh didapati dari versi PostgreSQL 9.1+. Anda juga boleh mempertimbangkan untuk menambah pengarsipan Wal yang sah ke konfigurasi, tetapi demi kesederhanaan, kami melangkauinya dalam tutorial ini untuk memastikan perkara -perkara yang minimum ketika mencapai pasangan sistem penyegerakan kerja. Dan akhirnya satu perkara lagi yang perlu diperhatikan: siap sedia tidak sandaran. Mempunyai sandaran yang sah sepanjang masa.

Tutorial Linux Berkaitan:

  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Ubuntu 20.04 Pemasangan PostgreSQL
  • Ubuntu 22.04 Pemasangan PostgreSQL
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Fail Konfigurasi Linux: 30 teratas yang paling penting
  • Muat turun linux
  • Bolehkah linux mendapat virus? Meneroka kelemahan Linux ..
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Perkara yang perlu dipasang di Ubuntu 22.04