PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menjalankan Beberapa Instance PostgreSQL pada Satu Host

Kami baru-baru ini mengumumkan rilis ClusterControl 1.7.3 yang mencakup berbagai peningkatan dan fitur baru yang ditambahkan. Salah satu fitur baru ini adalah penambahan dukungan di ClusterControl untuk memungkinkan pengguna mengatur dan mengelola beberapa instance PostgreSQL di host yang sama. Fitur baru ini adalah apa yang akan kita diskusikan di blog kita di bawah ini, termasuk alasan mengapa jenis pengaturan ini dapat membantu Anda menghemat sumber daya serta memberikan petunjuk langkah demi langkah tentang cara mencapai jenis instalasi ini di ClusterControl.

Mengapa Anda Membutuhkan Instalasi Multiple-PostgreSQL pada Satu Host?

Dengan perkembangan pesat dan peningkatan teknologi saat ini dari perangkat keras ke perangkat lunak, ruang lingkup persyaratan menjadi lebih mudah beradaptasi, fleksibel, dan terukur. Beberapa organisasi bahkan lebih suka memanfaatkan tumpukan teknologi karena penskalaannya lebih mudah. Selain itu, ada situasi di mana Anda mungkin ingin menggunakan server database pada server canggih dan kuat yang berisi CPU besar, banyak memori, dan perangkat penyimpanan yang cepat, kuat, dan tidak mudah menguap seperti SSD/Fusion IO /NVMe. Namun, ini terkadang dapat membuang-buang sumber daya jika Anda ingin menjalankan sumber daya bersama dari server database (seperti menggunakannya sebagai budak, mesin pencadangan panas, atau bahkan sebagai server verifikasi cadangan). Dalam penyiapan tertentu, Anda mungkin ingin menggunakan sumber daya yang tersedia di server canggih Anda sebagai server pengembangan dan QA untuk menghindari biaya perangkat keras yang tidak diinginkan (daripada membeli mesin khusus atau memunculkan instance komputasi baru di cloud).

Cara Menyiapkan Instalasi Multi-PostgreSQL

Untuk contoh ini, kita akan membuat cluster dengan instalasi multi-PostgreSQL bersama dengan instance yang menjalankan multi-PostgreSQL dalam satu host menggunakan ClusterControl.

Catatan:pada versi saat ini (yaitu ClusterControl 1.7.3), ClusterControl tidak mengizinkan Anda membuat cluster atau menginisialisasi cluster jika Anda menentukan informasi master dan slave dengan PostgreSQL yang diinstal multi-versi atau dengan multi -contoh PostgreSQL yang berjalan dalam satu host. Namun, Anda dapat mengimpor node dengan multi-versi yang diinstal atau multi-instance PostgreSQL yang berjalan di satu host.

Detail dan Informasi Server

Karena saat ini kami tidak dapat memulai atau membuat cluster ketika ada beberapa versi PostgreSQL yang diinstal, kami akan mengimpor instance PostgreSQL yang sudah ada atau sedang berjalan. Di bawah ini adalah informasi server.

IP: 192.168.30.10
Pengguna OS: gelandangan
Jenis dan versi OS: Ubuntu 16.04.6 LTS (xenial)

dan beberapa informasi dari /etc/postgresql/9.6/multi_pg/postgresql.conf saya,

data_directory = '/data/pgsql/master/data'
hba_file = '/etc/postgresql/9.6/multi_pg/pg_hba.conf'   
ident_file = '/etc/postgresql/9.6/multi_pg/pg_ident.conf'
external_pid_file = '/var/run/postgresql/9.6-main.pid'  
listen_addresses = '*'  
port = 7654
max_connections = 100   
shared_buffers = 511995kB
work_mem = 10239kB
maintenance_work_mem = 127998kB 
dynamic_shared_memory_type = posix
wal_level = hot_standby 
full_page_writes = on   
wal_log_hints = on
checkpoint_completion_target = 0.9
max_wal_senders = 16
wal_keep_segments = 32  
hot_standby = on
effective_cache_size = 1535985kB
logging_collector = on  
log_timezone = 'Etc/UTC'
cluster_name = '9.6/multi_pg'   
stats_temp_directory = '/var/run/postgresql/9.6-main.pg_stat_tmp'
datestyle = 'iso, mdy'
timezone = 'Etc/UTC'
lc_messages = 'en_US.UTF-8'
lc_monetary = 'en_US.UTF-8'
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8' 
default_text_search_config = 'pg_catalog.english'

Dimana versi yang sudah ada telah diinstal:

[email protected]:/home/vagrant# dpkg -l | grep 'object-relational'
ii  postgresql-11                     11.4-1.pgdg16.04+1                         amd64        object-relational SQL database, version 11 server
ii  postgresql-9.2                    9.2.24-1.pgdg16.04+1                       amd64        object-relational SQL database, version 9.2 server
ii  postgresql-9.6                    9.6.14-1.pgdg16.04+1                       amd64        object-relational SQL database, version 9.6 server

Selain itu, untuk penyiapan ini, ada instance tambahan yang sedang berjalan...

[email protected]:/data/pgsql/master# ps axufwww | grep 'postgre[s]'
postgres  1243  0.0  0.8 186064 17916 ?        S    15:59   0:00 /usr/lib/postgresql/9.2/bin/postgres -D /var/lib/postgresql/9.2/main -c config_file=/etc/postgresql/9.2/main/postgresql.conf
postgres  1285  0.0  0.1 186064  3860 ?        Ss   15:59   0:00  \_ postgres: checkpointer process   
postgres  1286  0.0  0.2 186064  4620 ?        Ss   15:59   0:00  \_ postgres: writer process   
postgres  1287  0.0  0.1 186064  3860 ?        Ss   15:59   0:00  \_ postgres: wal writer process   
postgres  1288  0.0  0.2 186808  6008 ?        Ss   15:59   0:00  \_ postgres: autovacuum launcher process   
postgres  1289  0.0  0.1 145808  3736 ?        Ss   15:59   0:00  \_ postgres: stats collector process   
postgres  1246  0.0  1.2 309600 25884 ?        S    15:59   0:00 /usr/lib/postgresql/11/bin/postgres -D /var/lib/postgresql/11/main -c config_file=/etc/postgresql/11/main/postgresql.conf
postgres  1279  0.0  0.1 309600  4028 ?        Ss   15:59   0:00  \_ postgres: 11/main: checkpointer   
postgres  1280  0.0  0.1 309600  4028 ?        Ss   15:59   0:00  \_ postgres: 11/main: background writer   
postgres  1281  0.0  0.4 309600  9072 ?        Ss   15:59   0:00  \_ postgres: 11/main: walwriter   
postgres  1282  0.0  0.3 310012  6496 ?        Ss   15:59   0:00  \_ postgres: 11/main: autovacuum launcher   
postgres  1283  0.0  0.1 164516  3528 ?        Ss   15:59   0:00  \_ postgres: 11/main: stats collector   
postgres  1284  0.0  0.3 309892  6596 ?        Ss   15:59   0:00  \_ postgres: 11/main: logical replication launcher  

Untuk contoh ini, kita akan menggunakan PostgreSQL 9.6.

Membangun Cluster PostgreSQL Master-Slave

Untuk membuat cluster, kita perlu mengatur instance PostgreSQL secara manual dan kemudian mengimpor instance itu ke ClusterControl nanti. Atau, kita dapat membuat cluster hanya dengan satu node master dan membiarkan ClusterControl menanganinya, tetapi untuk melakukan ini, kita perlu mematikan semua node lain yang sedang berjalan. Ini tidak akan ideal jika Anda beroperasi pada server database PostgreSQL yang sibuk.

Sekarang, mari lakukan penyiapan manual... 

[email protected]:/etc/postgresql/9.6/multi_pg# sudo -iu postgres /usr/lib/postgresql/9.6/bin/pg_ctl -D /data/pgsql/master/data initdb
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

creating directory /data/pgsql/master/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default timezone ... Etc/UTC
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    /usr/lib/postgresql/9.6/bin/pg_ctl -D /data/pgsql/master/data -l logfile start

Kemudian mulai database dengan menjalankan perintah di bawah ini,

[email protected]:/etc/postgresql/9.6/multi_pg# sudo -iu postgres /usr/lib/postgresql/9.6/bin/pg_ctl -D /data/pgsql/master/data  -o "-c config_file=/etc/postgresql/9.6/multi_pg/postgresql.conf" -l /var/log/postgresql/postgresql-9.6-master.log start  
server starting

Sekarang, mari kita verifikasi apakah instance berjalan dan menggunakan port yang diinginkan yang kita gunakan:

[email protected]:/etc/postgresql/9.6/multi_pg# netstat -ntlvp46|grep postgres
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      1246/postgres
tcp        0      0 127.0.0.1:5433          0.0.0.0:*               LISTEN      1243/postgres
tcp        0      0 0.0.0.0:7654            0.0.0.0:*               LISTEN      18403/postgres
tcp6       0      0 :::7654                 :::*           

Sekarang, itu terlihat benar. Pid 18403 menunjukkan bahwa kami dapat menjalankannya dan membuka IPv4 dan IPv6.

Sekarang, mari impor ini ke ClusterControl. Buka Terapkan → Impor Server/Database yang Ada , untuk mengimpor node master yang diinginkan, kita baru saja menyiapkan.

Setelah Anda menekan tombol Import, Anda akan dapat memiliki cluster dengan satu master node seperti di bawah ini:

Sekarang, mari kita buat budak di dalam host yang sama (yaitu dengan IP 192.168.30.10).

Dan jangan khawatir, ClusterControl akan menanganinya untuk Anda seperti contoh log aktivitas pekerjaan yang ditampilkan di bawah ini.

Anda dapat melihat bahwa itu berhasil diatur dan diinstal. Secara teknis, ClusterControl akan membuat direktori di bawah /etc/postgresql//p untuk sistem berbasis Debian/Ubuntu dan menghasilkan file konfigurasi yang diperlukan. Sedangkan untuk sistem berbasis RHEL/Centos/Fedora, itu akan menghasilkan di bawah data_dir jalan.

Sekarang mari konfirmasi dengan pg_lsclusters dan lihat apakah instance multi-PostgreSQL berjalan secara paralel di sebuah host. Lihat di bawah:

[email protected]:/var/log/postgresql# pg_lsclusters 
Ver Cluster  Port Status          Owner    Data directory               Log file
9.2 main     5433 online          postgres /var/lib/postgresql/9.2/main /var/log/postgresql/postgresql-9.2-main.log
9.6 multi_pg 7654 online          postgres /data/pgsql/master/data      /var/log/postgresql/postgresql-9.6-master.log
9.6 pg_7653  7653 online,recovery postgres /data/pgsql/slave/data       pg_log/postgresql-%Y-%m-%d_%H%M%S.log
11  main     5432 online          postgres /var/lib/postgresql/11/main  /var/log/postgresql/postgresql-11-main.log

Selain itu, metrik untuk cluster Replikasi Logis dapat dilihat di bawah ini:

Mempromosikan Slave di Instance Menjalankan Multi-PostgreSQL dalam Satu Host

Promosi budak mudah dilakukan untuk instance yang menjalankan multi-PostgreSQL dalam satu host. Seperti yang Anda lihat di bawah, jenis lingkungan ini bekerja dengan sempurna saat ditangani oleh ClusterControl.

Sekarang, mari kita lihat apa yang terjadi di latar belakang saat ClusterControl mempromosikan slave. Lihat spesifikasi dan detail pekerjaan selengkapnya

[09:01:02]:Successfully promoted a new master.
[09:01:02]:<em style='color: #1abc9c;'>192.168.30.10</em>:7653: promote finished (this is the new master).
[09:01:02]:Servers after promote:
<em style='color: #1abc9c;'>192.168.30.10</em>:7653:
&bull; Role: master (slaves: 1)
&bull; Status: CmonHostOnline (NODE_CONNECTED)
&bull; Receive/replay: 0/30020C0; 0/30020C0

<em style='color: #1abc9c;'>192.168.30.10</em>:7654:
&bull; Role: slave (slaves: 0)
&bull; Status: CmonHostOnline (NODE_CONNECTED)
&bull; Receive/replay: 0/30020C0; 0/30020C0
&bull; Master: 192.168.30.10:7653


[09:01:02]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Restarted with new master.
[09:01:02]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Started PostgreSQL.
[09:00:53]:<em style='color: #1abc9c;'>192.168.30.10</em>: done
server started
[09:00:53]:<em style='color: #1abc9c;'>192.168.30.10</em>: waiting for server to start....
[09:00:52]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Executing: su - postgres -c '/usr/lib/postgresql/9.6/bin/pg_ctl start -w -o "-p 7654" --pgdata=/etc/postgresql/9.6/multi_pg/ --log /var/log/postgresql/postgresql-11-main.log'
[09:00:51]:192.168.30.10:7654: Start postgreSQL node.
[09:00:51]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Starting PostgreSQL.
[09:00:51]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Successfully created '<em style='color: #109602;'>/data/pgsql/master/data/recovery.conf</em>'.
[09:00:50]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Creating '<em style='color: #109602;'>/data/pgsql/master/data/recovery.conf</em>': Setting <em style='color: #1abc9c;'>192.168.30.10</em>:7653 as master.
[09:00:50]:<em style='color: #1abc9c;'>192.168.30.10</em>: servers diverged at WAL position 0/3001890 on timeline 1
no rewind required
[09:00:49]:Running /usr/lib/postgresql/9.6/bin/pg_rewind --target-pgdata=/data/pgsql/master/data --source-server="host=192.168.30.10 port=7653 user=dbapgadmin password=***** dbname=postgres"
[09:00:47]:<em style='color: #1abc9c;'>192.168.30.10</em>:7653: Granting host (<em style='color: #1abc9c;'>192.168.30.10</em>:7654).
[09:00:45]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Stopped PostgreSQL.
[09:00:38]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Waiting to stop.
[09:00:38]:192.168.30.10:7654: node is already stopped. No need to stop it.
[09:00:38]:192.168.30.10:7654: Stop postgreSQL node.
[09:00:38]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Stopping PostgreSQL.
[09:00:38]:Switching slaves to the new master.
[09:00:38]:<em style='color: #1abc9c;'>192.168.30.10</em>:7653: Became master, ok.
[09:00:37]:<em style='color: #1abc9c;'>192.168.30.10</em>:7653: Waiting to become a master.
[09:00:37]:<em style='color: #1abc9c;'>192.168.30.10</em>: server promoting
[09:00:36]:<em style='color: #1abc9c;'>192.168.30.10</em>:7653: Attempting to promote using <strong style='color: #59a449;'>pg_ctl</strong>.
[09:00:36]:<em style='color: #1abc9c;'>192.168.30.10</em>:7653: Promoting host.
[09:00:35]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Stopped PostgreSQL.
[09:00:28]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Waiting to stop.
[09:00:28]:<em style='color: #1abc9c;'>192.168.30.10</em>: done
server stopped
[09:00:28]:<em style='color: #1abc9c;'>192.168.30.10</em>: waiting for server to shut down....
[09:00:27]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Executing: su - postgres -c '/usr/lib/postgresql/9.6/bin/pg_ctl stop --pgdata=/etc/postgresql/9.6/multi_pg/'
[09:00:26]:192.168.30.10:7654: Stop postgreSQL node.
[09:00:26]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Stopping PostgreSQL.
[09:00:26]:<em style='color: #1abc9c;'>192.168.30.10</em>:7654: Stopping the current master.
[09:00:26]:Switching over to <em style='color: #1abc9c;'>192.168.30.10</em>:7653 (previous master is <em style='color: #1abc9c;'>192.168.30.10</em>:7654)
[09:00:26]:Servers:
<em style='color: #1abc9c;'>192.168.30.10</em>:7653:
&bull; Role: slave (slaves: 0)
&bull; Status: CmonHostOnline (NODE_CONNECTED)
&bull; Receive/replay: 0/3001820; 0/3001820
&bull; Master: 192.168.30.10:7654

<em style='color: #1abc9c;'>192.168.30.10</em>:7654:
&bull; Role: master (slaves: 1)
&bull; Status: CmonHostOnline (NODE_CONNECTED)
&bull; Receive/replay: 0/3001820; 0/3001820


[09:00:26]:<em style='color: #1abc9c;'>192.168.30.10</em>:7653: Current master is <em style='color: #1abc9c;'>192.168.30.10</em>:7654.
[09:00:26]:<em style='color: #1abc9c;'>192.168.30.10</em>:7653: Promoting server to master.
Job spec: {
    "command": "promote_replication_slave",
    "group_id": 1,
    "group_name": "admins",
    "job_data": 
    {
        "clusterId": "6",
        "slave_address": "192.168.30.10:7653"
    },
    "user_id": 1,
    "user_name": "[email protected]"
}

Seperti yang Anda lihat, itu ditangani dengan lancar bahkan di host yang sama. Hasil topologi menunjukkan telah berhasil dipromosikan.

Kesimpulan

Kami senang dengan rilis ClusterControl 1.7.3 yang menurut kami memiliki banyak hal untuk ditawarkan. Kami juga berpikir bahwa instans Multi-PostgreSQL baru yang berjalan pada fitur host yang sama merupakan langkah bagus lainnya dalam meningkatkan dukungan keseluruhan kami untuk PostgreSQL. Cobalah dan beri tahu kami pendapat Anda di bawah tentang fitur baru ini.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lihat alias nama kolom di klausa WHERE

  2. Postgresql json menyukai kueri

  3. Sortir/penyusunan/urutan salah dengan spasi di Postgresql 9.4

  4. Ulangi tabel dengan PL/pgSQL di Postgres 9.0+

  5. Cara memetakan Enum PostgreSQL dengan JPA dan Hibernate