配置 `PostgreSQL` 与 `Keepalived` 以实现高可用性

配置 PostgreSQLKeepalived 以实现高可用性通常包括以下步骤:

PostgreSQL 配置

  1. 安装 PostgreSQL:在两台服务器上安装相同版本的 PostgreSQL。

    sh 复制代码
    sudo yum install postgresql-server postgresql-contrib
  2. 初始化数据库:在两台服务器上初始化 PGDATA 目录。

    sh 复制代码
    sudo postgresql-setup initdb
  3. 配置主从复制:设置一台服务器为主节点,另一台为从节点。

    • 在主服务器上

      • 修改 postgresql.conf 文件以允许复制。

        sh 复制代码
        wal_level = replica
        max_wal_senders = 3
        wal_keep_segments = 64
        archive_mode = on
        archive_command = 'cp %p /path_to_archive/%f'
      • pg_hba.conf 文件中允许从服务器的连接。

        sh 复制代码
        host replication all 192.168.9.183/32 md5
    • 在从服务器上

      • 停止 PostgreSQL 服务。

        sh 复制代码
        sudo systemctl stop postgresql
      • 清空 PGDATA 目录。

      • 从主服务器上使用 pg_basebackup 进行基础备份。

        sh 复制代码
        pg_basebackup -h 192.168.9.195 -D /var/lib/pgsql/data -U replicator -v -P --wal-method=stream
      • 创建 recovery.conf 文件以连接到主服务器。

        sh 复制代码
        standby_mode = 'on'
        primary_conninfo = 'host=192.168.9.195 port=5432 user=replicator password=yourpassword'
        trigger_file = '/tmp/postgresql.trigger.5432'
  4. 启动 PostgreSQL 服务:在两台服务器上启动服务。

    sh 复制代码
    sudo systemctl start postgresql

Keepalived 配置

  1. 安装 Keepalived :如前所述,在两台服务器上安装 keepalived
    sudo yum install keepalived -y

  2. 配置 Keepalived :编辑 /etc/keepalived/keepalived.conf 文件,在两台服务器上配置主从。

    • 在主服务器上

      sh 复制代码
      vrrp_instance VI_1 {
          state MASTER
          interface ens160
          virtual_router_id 51
          priority 100
          advert_int 1
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          virtual_ipaddress {
              192.168.9.200
          }
          track_script {
              chk_postgresql
          }
      }
      
      vrrp_script chk_postgresql {
          script "/usr/lib/keepalived/check_postgres.sh"
          interval 2
          weight 2
      }
    • 在从服务器上

      sh 复制代码
      vrrp_instance VI_1 {
          state BACKUP
          interface ens160
          virtual_router_id 51
          priority 50
          advert_int 1
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          virtual_ipaddress {
              192.168.9.200
          }
          track_script {
              chk_postgresql
          }
      }
      
      vrrp_script chk_postgresql {
          script "/usr/lib/keepalived/check_postgres.sh"
          interval 2
          weight 2
      }
  3. 创建 PostgreSQL 检查脚本 :在两台服务器上创建脚本 /usr/lib/keepalived/check_postgres.sh,用于检查 PostgreSQL 服务状态。

    sh 复制代码
    #!/bin/bash
    PSQL="/usr/bin/psql"
    PGUSER="postgres"
    PGDATABASE="yourdatabase"
    
    $PSQL -U $PGUSER -d $PGDATABASE -c "select 1;" >/dev/null 2>&1
    if [ $? != 0 ]; then
        exit 1
    fi
    exit 0

    确保脚本可执行:

    sh 复制代码
    sudo chmod +x /usr/lib/keepalived/check_postgres.sh
  4. 启动 Keepalived:在两台服务器上启动 Keepalived 服务。

    sh 复制代码
    sudo systemctl start keepalived
    sudo systemctl enable keepalived

测试和

验证

  • 验证主从复制:确保主从复制正确设置且在运行。
  • 测试 Failover:尝试停止主服务器上的 PostgreSQL 服务,确保 Keepalived 将虚拟 IP 地址转移到从服务器。
  • 监控日志:查看 Keepalived 和 PostgreSQL 日志,确保没有错误。

配置 PostgreSQLKeepalived 时,一定要考虑数据一致性和故障转移的机制。这通常涉及仔细的规划和测试,以确保在生产环境中可靠地运行。

相关推荐
开开心心就好1 小时前
高效报价软件,简化商铺定价流程
服务器·数据库·安全·面试·职场和发展·电脑·symfony
钢铁男儿2 小时前
PyQt5高级界而控件(容器:装载更多的控件QDockWidget)
数据库·python·qt
阿蒙Amon5 小时前
C# Linq to SQL:数据库编程的解决方案
数据库·c#·linq
互联网搬砖老肖9 小时前
运维打铁: MongoDB 数据库集群搭建与管理
运维·数据库·mongodb
典学长编程9 小时前
数据库Oracle从入门到精通!第四天(并发、锁、视图)
数据库·oracle
积跬步,慕至千里10 小时前
clickhouse数据库表和doris数据库表迁移starrocks数据库时建表注意事项总结
数据库·clickhouse
极限实验室10 小时前
搭建持久化的 INFINI Console 与 Easysearch 容器环境
数据库
白仑色11 小时前
Oracle PL/SQL 编程基础详解(从块结构到游标操作)
数据库·oracle·数据库开发·存储过程·plsql编程
程序猿小D12 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统
钢铁男儿13 小时前
C# 接口(什么是接口)
java·数据库·c#