目標_
このレッスンを終えると、
- パッケージ リポジトリから PostgreSQL をインストールする_
- PostgreSQL をソースからインストールする方法を理解する(オプション)
- 構成
postgresql.confHAの基本 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 gnupg2sudo 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-15Kiểm tra version
psql --version
Output: psql (PostgreSQL) 15.5
ステップ 3: テストservice_
# Kiểm tra status sudo systemctl status postgresqlOutput:
● 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 postgresqlXó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-releaseThê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-develKiểm tra
/usr/pgsql-15/bin/postgres --version
Output: postgres (PostgreSQL) 15.5
ステップ 3: シンボリックリンクを作成します (オプションですが、便利です)
# 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-devCentOS/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-nlsCompile (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.confhoặ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 Patronihot_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の構造。列_
- TYPE:
local: Unix ソケット接続host: TCP/IP (クリアテキストまたは SSL)hostssl: SSL を使用した TCP/IPのみ_hostnossl: SSL なしの TCP/IP
- DATABASE:
- データベース名前
all: すべてのデータベースreplication: レプリケーション接続_
- USER___HTMLTAG_232__ :
- ユーザー名
すべて: すべてユーザー
- アドレス:
- IP/ネットマスク:  ;
10.0.1.0/24 - ホスト名
0.0.0.0/0: どこでも (非推奨)
- IP/ネットマスク:  ;
- METHOD:
trust: パスワードは必要ありません (ローカル開発者)のみ)md5: MD5 ハッシュ化パスワード (非推奨)scram-sha-256: 最新の安全なパスワード(推奨)peer: Unix ユーザー名 = PostgreSQL ユーザー名cert: SSL 証明書認証_
4.3。 Patroni クラスターの pg_hba.conf
# /etc/postgresql/18/main/pg_hba.confLocal 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 5432Trong 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 postgresqlsudo 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 --versionOutput: postgres (PostgreSQL) 15.5
Kiểm tra các tools
which psql pg_basebackup pg_rewind
6.3。各ノードで_
# Node name hostnamePostgreSQL 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-mainKill processes nếu cần
sudo pkill -9 postgres
_問題 3: ポート 5432 はすでに使用されています
# Kiểm tra process sử dụng port sudo lsof -i :5432Hoặ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 レイヤー。