Replikasi PostgreSQL menggunakan Bucardo 5.4.1

Dalam artikel ini, izinkan saya memandu Anda melalui langkah-langkah untuk memigrasikan data PostgreSQL Anda dari AWS RDS antar akun menggunakan Bucardo 5.4.1 dan akan menjelaskan kepada Anda mengapa kami akhirnya menggunakan Bucardo.
Nama saya Logesh Mohanasundaram dan saya adalah Pemimpin Tim di Mallow Technologies Private Limited
Bahasa Indonesia: Baru-baru ini, kami mencari alat PostgreSQL untuk mereplikasi data dari RDS dalam satu akun AWS ke RDS di akun AWS yang berbeda dan kami menemukan beberapa opsi seperti AWS DMS , Stitch dan Bucardo dan kami memeriksa untuk melihat mana di antara opsi yang disebutkan di atas yang sesuai bagi kami dan akhirnya kami memiliki Bucardo yang berfungsi bagi kami dan dengan alat lainnya, kami memiliki beberapa atau yang lainnya yang hilang bagi kami. Untuk memberi Anda contoh tentang apa yang kami katakan sebagai hilang, Dalam database kami, kami memiliki kolom dengan tipe data yang tidak didukung DMS sehingga kami tidak dapat menggunakan DMS dan dengan stitch, itu tidak mendukung replikasi rekaman yang melebihi 4MB dan kami memiliki beberapa rekaman yang melebihi 4MB. Jadi, akhirnya kami memiliki Bucardo yang sangat cocok bagi kami.
Kami menemukan beberapa tutorial tentang migrasi menggunakan Bucardo, tutorial itu tidak mutakhir dan kami merasa, kami dapat menambahkannya agar lebih bermanfaat dan ingin mengatasi area yang kami hadapi selama proses migrasi ini. Jadi, kami menulis tutorial ini dengan harapan ini akan membantu migrasi basis data dengan cepat.
Untuk mengurangi waktu sinkronisasi, kami tidak menyalin seluruh data menggunakan Bucardo. Kami menjalankan snapshot manual di RDS dan membagikannya di seluruh akun ( referensi ) dan kami menjalankan sinkronisasi hanya untuk data yang masuk setelah snapshot direkam. Jangan langsung mengambil snapshot database. Ikuti langkah-langkah di bawah ini yang akan memberi tahu Anda kapan snapshot harus diambil.
Pertama, buat instance EC2 baru di akun AWS Anda dan instal PostgreSQL. Kami menginstal PostgreSQL 9.6 dan dependensinya
Untuk menginstal PostgreSQL dan dependensi dalam instans EC2:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/`lsb_release -cs`-pgdg utama" >> /etc/apt/sources.list.d/pgdg.list'wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O — | sudo apt-key tambahkan -sudo apt-get perbaruisudo apt-get peningkatanapt-get instal libdbix-aman-perl libdbd-pg-perl libboolean-perl postgresql-plperl-9.6apt-get dist-upgrade postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6 postgresql-server-dev-9.6
Mengonfigurasi Bucardo:
1. Buat direktori yang diperlukan dan berikan izin:
PostgreSQL memerlukan direktori untuk menyimpan file yang akan digunakan. Jadi, kita akan membuat direktori di /var/log dan /var/run
mkdir -p /var/log/bucardo /var/run/bucardochown -R postgres:postgres /var/log/bucardo /var/run/bucardo
2. Instal Bucardo:
Kita dapat mengunduh Bucardo dari sumbernya dan mengekstrak file yang diunduh di beberapa lokasi /tmp dalam kasus kita. Karena kita tidak menginstal make, saya juga menginstal make di sini pada langkah ini
cd/tmpwget http://bucardo.org/downloads/Bucardo-5.4.1.tar.gztar xvfz Bucardo-5.4.1.tar.gzcd Bucardo-5.4.1perl Makefile.PLapt install buatmembuatmembuat instalasi
3. Perbarui Pengaturan Bucardo:
Pengaturan untuk PostgreSQL lokal akan dimuat dari berkas “.bucardoc” dan akan mencari berkas ini di direktori home. Jadi kita perlu membuat berkas ini dan menambahkan nilai ke berkas tersebut.
lihat $HOME/.bucardorcdbhost=127.0.0.1
nama db=bucardo
dbport=5432
dbuser=bucardo
4. Instal pemicu Bucardo:
Kita perlu terlebih dahulu mengatur variabel DB sumber yang akan kita gunakan pada langkah selanjutnya dan kemudian mengatur variabel DB tujuan.
ekspor SUMBER_HOST=<NILAI_HOST_DB_SUMBER>
ekspor SUMBER_PORT=<PORT_DB_SUMBER>
ekspor SUMBER_DATABASE=<NAMA_DB_SUMBER>
ekspor NAMA_PENGGUNA_SUMBER=<NAMA_PENGGUNA_DB_SUMBER>
ekspor SUMBER_PASSWORD=<SUMBER_DB_SUMBER>Kita perlu menyimpan informasi koneksi PostgreSQL untuk menghubungkan ke PostgreSQL lokal dan kita harus menyimpan pengaturan tersebut dalam file .pgpass dan mengamankannya.
echo "127.0.0.1:5432:bucardo:bucardo:<SET_PASSWORD_UNTUK_DB_LOKAL>" > $HOME/.pgpasschmod 0600 $HOME/.pgpass
Kita dapat menyimpan kredensial login secara lokal di file .pgpass. Variabel DB tujuan tidak ditetapkan sehingga kita dapat memperbaruinya ke file .pgpass secara manual nanti setelah ditetapkan.
kucing >> $HOME/.pgpass <<EOL
$DEST_HOST:$DEST_PORT:$DEST_DATABASE:$DEST_USERNAME:$DEST_PASSWORD
$SOURCE_HOST:$SOURCE_PORT:$SOURCE_DATABASE:$SOURCE_USERNAME:$SOURCE_PASSWORD
EOLKita perlu masuk ke konsol PostgreSQL dan membuat pengguna dengan ketentuan pengguna super dan membuat database dan ekstensi
sudo su - postgres -c "psql postgres"BUAT PENGGUNA bucardo DENGAN SANDI LOGIN SUPERUSER YANG TERENKRIPSI '<PASSWORD_SET_IN_LOCAL_DB>';BUAT DATABASE bucardo;BUAT EKSTENSI plperl;
Keluar dari konsol PostgreSQL dan jalankan
./bucardo install — tenangKita perlu mengekstrak skema dari DB Sumber menggunakan perintah pg_dump
pg_dump "host=$SOURCE_HOST port=$SOURCE_PORT dbname=$SOURCE_DATABASE user=$SOURCE_USERNAME" --schema-only | grep -v 'BUAT PEMICU' | grep -v '^--' | grep -v '^$' | grep -v '^SET' | grep -v 'PEMILIK KE' > skema.sqlKita perlu mengkonfigurasi Bucardo sekarang dan kita akan mulai dengan menambahkan DB sumber terlebih dahulu
bucardo tambahkan db source_db dbhost=$SOURCE_HOST dbport=$SOURCE_PORT nama db=$SOURCE_DATABASE dbuser=$SOURCE_USERNAME dbpass=$SOURCE_PASSWORDSaatnya untuk snapshot:
Ambil Snapshot DB sumber sekarang dari RDS dan bagikan ke akun lain dan pulihkan DB. Kemudian atur variabel db tujuan
ekspor DEST_HOST=<NILAI_DESTINATION_DB_HOST>
ekspor DEST_PORT=<PELABUHAN_DB_TUJUAN>
ekspor DEST_DATABASE=<NAMA_DB_TUJUAN>
ekspor DEST_USERNAME=<NAMA_DB_TUJUAN>
ekspor DEST_PASSWORD=<PASSWORD_DB_TUJUAN>Anda perlu memperbarui file .pgpass dengan nilai db tujuan. Anda dapat menghapus semua nilai dan menjalankannya lagi atau memperbarui nilai dalam file secara manual.
kucing >> $HOME/.pgpass <<EOL
$DEST_HOST:$DEST_PORT:$DEST_DATABASE:$DEST_USERNAME:$DEST_PASSWORD
$SOURCE_HOST:$SOURCE_PORT:$SOURCE_DATABASE:$SOURCE_USERNAME:$SOURCE_PASSWORD
EOLSekarang, kita perlu membuat database di database tujuan
psql "tuan rumah=$DEST_HOST port=$DEST_PORT pengguna=$DEST_USERNAME nama db=postgres"Dengan database yang dibuat, kita perlu memuat skema ke dalamnya
psql "tuan rumah=$DEST_HOST port=$DEST_PORT nama db=$DEST_DATABASE pengguna=$DEST_USERNAME" -f skema.sqlpg_dump "host=$DEST_HOST port=$DEST_PORT dbname=$DEST_DATABASE user=$DEST_USERNAME" --schema-only | grep -v 'BUAT PEMICU' | grep -v '^--' | grep -v '^$' | grep -v '^SET' | grep -v 'PEMILIK KE' > schema_dest.sql
Kita kemudian perlu menambahkan DB tujuan ke bucardo
bucardo tambahkan db dest_db dbhost=$DEST_HOST dbport=$DEST_PORT nama db=$DEST_DATABASE dbuser=$DEST_USERNAME dbpass=$DEST_PASSWORDUntuk mencantumkan sumber dan tujuan db
daftar dbs bucardoKita dapat menambahkan tabel yang ingin kita migrasikan dengan nama tabel yang dipisahkan dengan spasi atau jika kita perlu memigrasikan semua tabel, kita dapat melakukannya dengan menentukan semua tabel dan menambahkannya ke kawanan.
bucardo tambahkan semua tabel --herd=sampleherd (nama apa pun)Jika Anda ingin mengecualikan satu tabel atau beberapa tabel, kita dapat melakukannya dengan perintah remove table
bucardo hapus tabel public.table_locks --herd=sampleherd (kawanan yang dibuat pada langkah sebelumnya)Jika kita juga memerlukan urutan yang disinkronkan, kita dapat melakukannya
bucardo tambahkan semua urutan --herd=sampleherd (kawanan yang dibuat pada langkah sebelumnya)Kita dapat membuat daftar kawanan menggunakan perintah berikut dan kita akan melihat kawanan yang kita buat dan sekarang semuanya sudah siap. Kita juga dapat mengonfigurasi quick_delta_check dan log_level
daftar ternak bucardobucardo mengatur quick_delta_check=0bucardo tetapkan log_level=VERBOSE
Bangun sinkronisasi dengan perintah berikut dan daftarkan sinkronisasi untuk melihat apakah sudah diatur
bucardo menambahkan sinkronisasi samplesync herd=sampleherd dbs=source_db:source,dest_db:target onetimecopy=1sinkronisasi daftar bucardo
Sekarang jalankan perintah start untuk db untuk memulai sinkronisasi
bucardo mulaiKita dapat memeriksa log di file log.bucardo
ekor -f /var/log/bucardo/log.bucardoSekarang Anda dapat membuka konsol PostgreSQL di DB tujuan dan Anda dapat meminta db untuk melihat apakah entri di DB sumber disinkronkan. Dan saat data masuk ke DB sumber, pemicu akan dijalankan dan data akan disinkronkan ke DB tujuan. Meskipun ini proses yang panjang, artikel ini pasti akan membantu Anda menyiapkan dan menjalankan berbagai hal.