1. 首页 > 软件安装教程 > 正文

PostgreSQL安装-PostgreSQL数据库安装详细过程

PostgreSQL Cluster

一、硬件与系统要求

1.1 硬件要求

  • CPU:至少 4 核
  • 内存:至少 8GB
  • 磁盘:至少 100GB 可用空间
  • 网络:1Gbps 以上

1.2 系统要求

  • Linux:RHEL 7/8/9,Ubuntu 18.04/20.04/22.04

1.3 节点规划

本指南将创建一个包含 3 个节点的 PostgreSQL 主从复制集群:

学习交流加群风哥微信: itpux-com from:www.itpux.com from:www.itpux.com 学习交流加群风哥微信: itpux-com

  • 主节点:192.168.1.10
  • 从节点 1:192.168.1.11
  • 从节点 2:192.168.1.12

二、安装 PostgreSQL

在所有节点上安装 PostgreSQL,参考 PostgreSQL 安装指南。

学习交流加群风哥微信: itpux-com 更多学习教程公众号风哥教程itpux_com 更多视频教程www.fgedu.net.cn 更多学习教程公众号风哥教程itpux_com 更多视频教程www.fgedu.net.cn

三、配置主从复制

3.1 配置主节点

3.1.1 修改 postgresql.conf 文件

# 监听地址
listen_addresses = '0.0.0.0'

# 端口
port = 5432

# 最大连接数
max_connections = 100

# 共享内存
shared_buffers = 1GB

# 启用归档
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/14/archive/%f'

# 复制配置
wal_level = replica
max_wal_senders = 10
max_replication_slots = 10
hot_standby = on

3.1.2 创建归档目录

sudo mkdir -p /var/lib/pgsql/14/archive
sudo chown postgres:postgres /var/lib/pgsql/14/archive
sudo chmod 700 /var/lib/pgsql/14/archive

3.1.3 创建复制用户

sudo -u postgres psql
CREATE USER repl WITH REPLICATION PASSWORD 'replpassword' LOGIN;

3.1.4 修改 pg_hba.conf 文件

# 允许复制连接
host    replication     repl            192.168.1.0/24            scram-sha-256

3.1.5 重启主节点服务

sudo systemctl restart postgresql-14

3.2 配置从节点

3.2.1 停止从节点服务

sudo systemctl stop postgresql-14

3.2.2 清空数据目录

sudo rm -rf /var/lib/pgsql/14/data/*

3.2.3 从主节点复制数据

sudo -u postgres pg_basebackup -h 192.168.1.10 -U repl -D /var/lib/pgsql/14/data -P -X stream

3.2.4 创建 recovery.conf 文件

sudo -u postgres bash -c 'cat > /var/lib/pgsql/14/data/recovery.conf << EOF
standby_mode = on
primary_conninfo = ''host=192.168.1.10 port=5432 user=repl password=replpassword''
trigger_file = ''/var/lib/pgsql/14/data/trigger_file''
EOF'

3.2.5 启动从节点服务

sudo systemctl start postgresql-14

3.3 验证复制状态

3.3.1 在主节点上查看

sudo -u postgres psql
SELECT * FROM pg_stat_replication;

3.3.2 在从节点上查看

sudo -u postgres psql
SELECT pg_is_in_recovery();

四、配置 Patroni 高可用集群

4.1 安装 Patroni

sudo yum install -y python3 python3-pip
sudo pip3 install patroni psycopg2-binary python-etcd

4.2 配置 Patroni

4.2.1 创建 Patroni 配置文件

sudo mkdir -p /etc/patroni
sudo bash -c 'cat > /etc/patroni/patroni.yml << EOF
scope: postgresql
namespace: /db/
name: postgresql1

restapi:
  listen: 192.168.1.10:8008
  connect_address: 192.168.1.10:8008

etcd:
  host: 192.168.1.10:2379

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true

  initdb:
  - encoding: UTF8
  - data-checksums

  pg_hba:
  - host replication replicator 127.0.0.1/32 md5
  - host replication replicator 192.168.1.0/24 md5
  - host all all 0.0.0.0/0 md5

  users:
    admin:
      password: adminpassword
      options:
        - createrole
        - createdb

postgresql:
  listen: 192.168.1.10:5432
  connect_address: 192.168.1.10:5432
  data_dir: /var/lib/pgsql/14/data
  bin_dir: /usr/pgsql-14/bin
  pgpass: /tmp/pgpass0
  parameters:
    unix_socket_directories: ''/var/run/postgresql''
    shared_buffers: 1GB
    wal_level: replica
    hot_standby: on
    max_connections: 100
    max_wal_senders: 10

watchdog:
  mode: automatic
  device: /dev/watchdog
  safety_margin: 5
EOF'

4.2.2 启动 Patroni 服务

sudo -u postgres patroni /etc/patroni/patroni.yml

五、配置 Pgpool-II 负载均衡

5.1 安装 Pgpool-II

sudo yum install -y pgpool-II-14

5.2 配置 Pgpool-II

5.2.1 修改 pgpool.conf 文件

sudo bash -c 'cat > /etc/pgpool-II-14/pgpool.conf << EOF
listen_addresses = ''*''
port = 9999
backend_hostname0 = ''192.168.1.10''
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = ''/var/lib/pgsql/14/data''
backend_flag0 = ''ALLOW_TO_FAILOVER''
backend_hostname1 = ''192.168.1.11''
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = ''/var/lib/pgsql/14/data''
backend_flag1 = ''ALLOW_TO_FAILOVER''
backend_hostname2 = ''192.168.1.12''
backend_port2 = 5432
backend_weight2 = 1
backend_data_directory2 = ''/var/lib/pgsql/14/data''
backend_flag2 = ''ALLOW_TO_FAILOVER''
enable_pool_hba = on
pool_passwd = ''/etc/pgpool-II-14/pool_passwd''
ssl = off
num_init_children = 32
max_pool = 4
child_life_time = 300
child_max_connections = 0
connection_life_time = 0
client_idle_limit = 0
log_destination = ''stderr''
log_connections = on
log_disconnections = on
log_pooler_errors = on
pid_file_name = ''/var/run/pgpool-II-14/pgpool.pid''
master_slave_mode = on
master_slave_sub_mode = ''stream''
delay_threshold = 10000000
query_redirect_preference = ''primary''
allow_sql_comments = on
EOF'

5.2.2 创建 pool_passwd 文件

sudo pg_md5 -p -u admin adminpassword

5.2.3 启动 Pgpool-II 服务

sudo systemctl start pgpool-II-14
sudo systemctl enable pgpool-II-14

六、安全配置

6.1 配置防火墙

sudo firewall-cmd --add-port=5432/tcp --permanent
sudo firewall-cmd --add-port=9999/tcp --permanent
sudo firewall-cmd --reload

6.2 启用 SSL

修改 postgresql.conf 文件:

学习交流加群风哥QQ113257174 学习交流加群风哥微信: itpux-com 更多学习教程公众号风哥教程itpux_com from:www.itpux.com 更多视频教程www.fgedu.net.cn

ssl = on
ssl_cert_file = ''/var/lib/pgsql/14/server.crt''
ssl_key_file = ''/var/lib/pgsql/14/server.key''

七、监控与维护

7.1 查看集群状态

sudo -u postgres psql -p 9999 -c ''SHOW pool_nodes;''

7.2 查看复制状态

sudo -u postgres psql -c ''SELECT * FROM pg_stat_replication;''

7.3 备份集群

pg_dump -U admin -d testdb -h localhost -p 9999 -f /backup/testdb.sql

7.4 故障转移测试

sudo -u postgres patronictl -c /etc/patroni/patroni.yml failover

八、故障排查

8.1 复制失败

  • 查看主节点日志:tail -f /var/lib/pgsql/14/data/log/postgresql-*.log
  • 查看从节点日志:tail -f /var/lib/pgsql/14/data/log/postgresql-*.log
  • 检查网络连接:ping 192.168.1.10

8.2 Patroni 服务异常

  • 查看 Patroni 日志:journalctl -u patroni
  • 检查 etcd 状态:etcdctl cluster-health

8.3 Pgpool-II 连接失败

  • 查看 Pgpool-II 日志:tail -f /var/log/pgpool-II/pgpool.log
  • 检查后端节点状态:sudo -u postgres psql -p 9999 -c ''SHOW pool_nodes;''
提示:生产环境中建议使用至少 3 个节点的集群,以确保高可用性。

警告:集群配置复杂,建议在测试环境中充分测试后再部署到生产环境。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息