Chuyển đến nội dung chính

レッスン 5: PostgreSQL のインストール

パッケージ リポジトリまたはソースから PostgreSQL をインストールし、クラスター内の 3 つのノードすべてで postgresql.conf と pg_hba.conf を構成します。

🔒 DevSecOps — レッスン 5 レッスン 5: PostgreSQL のインストール

Patroni と PostgreSQL の高可用性etcd

パート 2: インストールと構成

xdev.asia_

目標_

このレッスンを終えると、

  • パッケージ リポジトリから PostgreSQL をインストールする_
  • PostgreSQL をソースからインストールする方法を理解する(オプション)
  • 構成 postgresql.conf HAの基本
  • pg_hba.conf について理解する認証_
  • Patroni クラスター用に 3 つのノードで PostgreSQL を準備しています_

1。パッケージ リポジトリ

1.1 から PostgreSQL をインストールします。準備_

PostgreSQL をインストールする前に、公式 PostgreSQL リポジトリ パッケージ (PGDG - PostgreSQL Global Development Group) をセットアップする必要があります。

PGDG リポジトリの利点:

  • ✅ 最新PostgreSQL バージョン
  • ✅ クイック セキュリティ アップデート
  • ✅ 多くの拡張機能が利用可能
  • ✅ 多くのディストリビューションをサポート

1.2。 Ubuntu/Debian にインストール

ステップ 1: PGDG リポジトリを追加

# Import repository signing key
sudo apt install -y wget gnupg2

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Update package list

sudo apt update

ステップ 2: PostgreSQL をインストール

# Cài PostgreSQL 18 (khuyến nghị cho production)
sudo apt install -y postgresql-18 postgresql-contrib-15 postgresql-server-dev-15

Kiểm tra version

psql --version

Output: psql (PostgreSQL) 15.5

ステップ 3: テストservice_

# Kiểm tra status
sudo systemctl status postgresql

Output:

● postgresql.service - PostgreSQL RDBMS

Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)

Active: active (exited) since ...

ステップ 4: PostgreSQL のデフォルト クラスター

# Patroni sẽ quản lý PostgreSQL, nên ta disable service mặc định
sudo systemctl stop postgresql
sudo systemctl disable postgresql

Xóa cluster mặc định (Patroni sẽ tạo cluster mới)

sudo pg_dropcluster 15 main --stop

Kiểm tra

pg_lsclusters

Output: (empty - no clusters)

1.3 を停止して無効にします。 CentOS/RHEL/Rocky Linux にインストール_

ステップ 1: PGDG リポジトリを追加

# Cài đặt EPEL (Extra Packages for Enterprise Linux)
sudo dnf install -y epel-release

Thêm PostgreSQL 18 repository

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Disable built-in PostgreSQL module

sudo dnf -qy module disable postgresql

ステップ 2: PostgreSQL をインストール_

# Cài PostgreSQL 18
sudo dnf install -y postgresql15-server postgresql15-contrib postgresql15-devel

Kiểm tra

/usr/pgsql-15/bin/postgres --version

Output: postgres (PostgreSQL) 15.5

# Tạo symlink cho các binary vào PATH
sudo alternatives --install /usr/bin/psql psql /usr/pgsql-15/bin/psql 1
sudo alternatives --install /usr/bin/pg_config pg_config /usr/pgsql-15/bin/pg_config 1
sudo alternatives --install /usr/bin/pg_basebackup pg_basebackup /usr/pgsql-15/bin/pg_basebackup 1

ステップ 4: データベースを初期化しません (Patroni が初期化します)

# KHÔNG chạy:

sudo /usr/pgsql-15/bin/postgresql-18-setup initdb

KHÔNG enable service:

sudo systemctl enable postgresql-18

2。ソースからの PostgreSQL のインストール (オプション - 上級)

ソースからインストールするとカスタム コンパイル オプションが可能になりますが、より複雑で保守が困難になります。

2.1。ソースからインストールする必要があるのはどのような場合ですか?

  • 🔧 バイナリ パッケージにないカスタム機能が必要
  • 🔧 開発バージョンでのテスト
  • 🔧 ハードウェア向けに最適化
  • 🔧 カスタム パッチ

2.2 を適用できます。ソースからのインストール プロセス

ステップ 1: 依存関係のインストール

# Ubuntu/Debian
sudo apt install -y build-essential libreadline-dev zlib1g-dev 
flex bison libxml2-dev libxslt-dev libssl-dev libxml2-utils
xsltproc libkrb5-dev libldap2-dev libpam0g-dev libperl-dev
python3-dev tcl-dev libsystemd-dev

CentOS/RHEL

sudo dnf install -y gcc make readline-devel zlib-devel openssl-devel
libxml2-devel libxslt-devel systemd-devel perl-ExtUtils-Embed
python3-devel

ステップ 2: ソースのダウンロード

cd /usr/local/src
sudo wget https://ftp.postgresql.org/pub/source/v15.5/postgresql-18.5.tar.gz
sudo tar -xzf postgresql-18.5.tar.gz
cd postgresql-18.5

ステップ 3: 構成とコンパイル

# Configure với options
sudo ./configure 
--prefix=/usr/local/pgsql-15
--with-openssl
--with-libxml
--with-systemd
--with-readline
--enable-nls

Compile (sử dụng nhiều cores)

sudo make -j$(nproc)

Chạy tests (optional)

sudo make check

Install

sudo make install

Install contrib modules

cd contrib sudo make install

ステップ 4: 環境のセットアップ

# Thêm vào ~/.bashrc
export PATH=/usr/local/pgsql-15/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/pgsql-15/lib:$LD_LIBRARY_PATH

source ~/.bashrc

注: ソースからのインストールには systemd サービスが自動的に含まれないため、手動で作成する必要があります。

3。基本的な postgresql.conf 構成

Patroni は、ほとんどの PostgreSQL 構成を DCS を通じて管理します。ただし、重要なパラメータを理解することが重要です。

3.1。ファイル構造 postgresql.conf

# /etc/postgresql/18/main/postgresql.conf

hoặc: /var/lib/pgsql/15/data/postgresql.conf

#------------------------------------------------------------------------------

FILE LOCATIONS

#------------------------------------------------------------------------------ data_directory = '/var/lib/postgresql/18/main' hba_file = '/etc/postgresql/18/main/pg_hba.conf' ident_file = '/etc/postgresql/18/main/pg_ident.conf'

#------------------------------------------------------------------------------

CONNECTIONS AND AUTHENTICATION

#------------------------------------------------------------------------------ listen_addresses = '*' # Lắng nghe trên tất cả interfaces port = 5432 max_connections = 100 # Số connections tối đa

3.2。 HA

__ の重要なパラメータ_HTMLTAG_163____レプリケーション設定____HTMLTAG_164__CODEBLOCK_13___

メモリ設定___HTMLTAG_166__CODEBLOCK_14___

チェックポイント設定_

#------------------------------------------------------------------------------

WRITE-AHEAD LOG (Checkpoints)

#------------------------------------------------------------------------------ checkpoint_timeout = 10min # Tần suất checkpoint tối đa max_wal_size = 2GB # WAL size trigger checkpoint min_wal_size = 1GB # Giữ ít nhất 1GB WAL

checkpoint_completion_target = 0.9 # Spread checkpoint I/O # (90% của checkpoint_timeout)

ロギング設定_

#------------------------------------------------------------------------------

REPORTING AND LOGGING

#------------------------------------------------------------------------------ log_destination = 'stderr' logging_collector = on

log_directory = 'log' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_rotation_age = 1d log_rotation_size = 100MB

log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h ' log_timezone = 'UTC'

Log slow queries

log_min_duration_statement = 1000 # Log queries > 1 second

Log connections/disconnections

log_connections = on log_disconnections = on

Log checkpoints (useful for tuning)

log_checkpoints = on

3.3。 Patroni は設定をオーバーライドします

Patroni は DCS を通じて次のパラメータを管理します。NO は postgresql.conf で設定する必要があります:

# ❌ KHÔNG set trong postgresql.conf khi dùng Patroni

hot_standby = on

primary_conninfo = '...'

restore_command = '...'

recovery_target_timeline = 'latest'

Patroni はそれらを自動的に設定しますpostgresql.auto.conf.

4 内。 pg_hba.conf

pg_hba.conf(ホストベース認証) はクライアント認証を制御します。

4.1 を理解します。 pg_hba.conf_

# TYPE  DATABASE        USER            ADDRESS                 METHOD

"local" is for Unix domain socket connections only

local all all peer

IPv4 local connections:

host all all 127.0.0.1/32 scram-sha-256

IPv4 connections from anywhere (for replication)

host all all 0.0.0.0/0 scram-sha-256

Replication connections

host replication replicator 10.0.1.0/24 scram-sha-256

4.2の構造。列_

  1. TYPE:
    • local: Unix ソケット接続
    • host: TCP/IP (クリアテキストまたは SSL)
    • hostssl: SSL を使用した TCP/IPのみ_
    • hostnossl: SSL なしの TCP/IP
  2. DATABASE:
    • データベース名前
    • all: すべてのデータベース
    • replication: レプリケーション接続_
  3. USER___HTMLTAG_232__ :
    • ユーザー名
    • すべて: すべてユーザー
  4. アドレス:
    • IP/ネットマスク:&nbsp ;10.0.1.0/24
    • ホスト名
    • 0.0.0.0/0: どこでも (非推奨)
  5. METHOD:
    • trust: パスワードは必要ありません (ローカル開発者)のみ)
    • md5: MD5 ハッシュ化パスワード (非推奨)
    • scram-sha-256: 最新の安全なパスワード(推奨)
    • peer: Unix ユーザー名 = PostgreSQL ユーザー名
    • cert: SSL 証明書認証_

4.3。 Patroni クラスターの pg_hba.conf

# /etc/postgresql/18/main/pg_hba.conf

Local connections

local all postgres peer local all all md5

Localhost

host all all 127.0.0.1/32 scram-sha-256 host all all ::1/128 scram-sha-256

Application connections

host all app_user 10.0.1.0/24 scram-sha-256

Patroni REST API health checks (optional database connection)

host postgres patroni_user 10.0.1.0/24 scram-sha-256

Replication connections (Patroni nodes)

host replication replicator 10.0.1.11/32 scram-sha-256 host replication replicator 10.0.1.12/32 scram-sha-256 host replication replicator 10.0.1.13/32 scram-sha-256

Monitoring connections (Prometheus exporter)

host postgres exporter 10.0.1.0/24 scram-sha-256

4.4。 pg_hba.conf

✅ Specific の方が良い: それ以外の場合は0.0.0.0/0 を使用しないでください必要

✅ スクラムシャを使用する-256_: 最新の認証方法

✅ ユーザーを分離: アプリ、レプリケーション、モニタリング

✅ ドキュメント: 各ルールのコメント___HTMLTAG_306__HTMLTAG_307___✅ 複製を制限: Patroni の IP からの複製ユーザーのみを許可しますノード_

❌ 信頼メソッドを回避: 開発環境でも

5。必要なユーザーとデータベースを作成

5.1。レプリケーション ユーザー_

# Sau khi Patroni bootstrap cluster, connect đến primary:
sudo -u postgres psql -h localhost -p 5432

Trong psql:

CREATE ROLE replicator WITH REPLICATION LOGIN ENCRYPTED PASSWORD 'your_strong_password';

Kiểm tra

\du replicator

5.2 を作成します。 Patroni 監視ユーザー

-- User cho Patroni health checks
CREATE USER patroni_user WITH ENCRYPTED PASSWORD 'patroni_password';
GRANT CONNECT ON DATABASE postgres TO patroni_user;

5.3 を作成します。アプリケーション データベースとユーザー

-- Tạo database
CREATE DATABASE myapp;

-- Tạo user CREATE USER app_user WITH ENCRYPTED PASSWORD 'app_password';

-- Grant permissions GRANT ALL PRIVILEGES ON DATABASE myapp TO app_user;

-- Connect to myapp database \c myapp

-- Grant schema permissions GRANT ALL ON SCHEMA public TO app_user;

6 を作成します。ラボ: PostgreSQL を 3 つのノードにインストール

6.1。ラボ環境

node1 (pg-node1): 10.0.1.11  - Primary (sau khi bootstrap)
node2 (pg-node2): 10.0.1.12  - Replica
node3 (pg-node3): 10.0.1.13  - Replica

6.2。 3 つのノードすべてで実行

ステップ 1: システムを更新

sudo apt update && sudo apt upgrade -y

ステップ 2: PostgreSQL 18 をインストール

# Thêm repo
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

sudo apt update

Cài đặt

sudo apt install -y postgresql-18 postgresql-contrib-15 postgresql-server-dev-15

ステップ 3: 停止してデフォルトを無効にするクラスター_

sudo systemctl stop postgresql
sudo systemctl disable postgresql

sudo pg_dropcluster 15 main --stop

Verify

pg_lsclusters

Output: (should be empty)

ステップ 4: PostgreSQL データのディレクトリを作成

# Patroni sẽ quản lý data directory, nhưng ta tạo structure
sudo mkdir -p /var/lib/postgresql/18/data
sudo mkdir -p /var/lib/postgresql/18/archive

sudo chown -R postgres:postgres /var/lib/postgresql sudo chmod 700 /var/lib/postgresql/18/data

ステップ 5: PostgreSQL バイナリをテスト

# Kiểm tra version
postgres --version

Output: postgres (PostgreSQL) 15.5

Kiểm tra các tools

which psql pg_basebackup pg_rewind

6.3。各ノードで_

# Node name
hostname

PostgreSQL version

postgres --version

Directories

ls -ld /var/lib/postgresql/18/data ls -ld /var/lib/postgresql/18/archive

PostgreSQL service

systemctl status postgresql

Output: inactive (dead) ✓

6.4 を確認します。トラブルシューティング_

_問題 1: データ ディレクトリでアクセス許可が拒否されました

# Fix ownership
sudo chown -R postgres:postgres /var/lib/postgresql
sudo chmod 700 /var/lib/postgresql/18/data

_問題 2: PostgreSQL サービスがまだ実行中

# Stop forcefully
sudo systemctl stop postgresql@15-main
sudo systemctl disable postgresql@15-main

Kill processes nếu cần

sudo pkill -9 postgres

_問題 3: ポート 5432 はすでに使用されています

# Kiểm tra process sử dụng port
sudo lsof -i :5432

Hoặc

sudo netstat -tlnp | grep 5432

7 を使用してください。概要

重要なポイント

✅ パッケージ リポジトリ__HTMLTAG_355___: PGDG リポジトリから PostgreSQL をインストールして新しいバージョンを入手する最も

✅ デフォルトのサービスを無効にする: Patroni が PostgreSQL を管理し、デフォルトの systemd サービスを使用しないでください定義_

✅ postgresql.conf: HA とレプリケーションの重要なパラメータを理解する

✅ pg_hba.conf:接続とレプリケーションの認証を構成

✅ クラスターが初期化されていません: Patroni は自動的にクラスターをブートストラップします

後のチェックリストラボ

  •  PostgreSQL 18 が 3 つのノードすべてにインストールされました
  •  デフォルト クラスタが削除されました
  •  PostgreSQL サービス無効
  •  正しい権限で作成されたデータ ディレクトリ
  •  $PATH にバイナリ パスがすでに存在しています

レッスン 6 の準備

次のレッスンでは、 etcd クラスターをインストールして構成します - Patroni の DCS レイヤー。