postgresql 中如何使用keepalived的方式进行IP的切换

发布时间:2022-01-04 10:02:20 作者:柒染
来源:亿速云 阅读:562
# PostgreSQL 中如何使用 Keepalived 的方式进行 IP 切换

## 引言

在高可用数据库架构中,PostgreSQL 通常需要配合工具实现故障自动转移(Failover)。Keepalived 作为一款轻量级的高可用解决方案,通过虚拟 IP(VIP)漂移机制,能够快速实现主备切换。本文将详细介绍如何利用 Keepalived 实现 PostgreSQL 主从节点的 IP 自动切换。

---

## 一、Keepalived 工作原理

Keepalived 基于 VRRP(Virtual Router Redundancy Protocol)协议,通过多节点竞选机制决定 VIP 的归属。其核心特点包括:

1. **主备选举**:通过优先级(priority)选举 Master 节点,默认拥有 VIP。
2. **健康检查**:通过自定义脚本监控服务状态,异常时触发切换。
3. **VIP 漂移**:Master 故障时,Backup 节点自动接管 VIP。

---

## 二、环境准备

### 1. 节点规划
| 角色       | IP 地址      | 主机名    |
|------------|-------------|----------|
| PostgreSQL 主节点 | 192.168.1.10 | pg-master |
| PostgreSQL 备节点 | 192.168.1.11 | pg-backup |
| 虚拟 IP(VIP)   | 192.168.1.100 | -        |

### 2. 软件要求
- PostgreSQL 12+(需配置流复制)
- Keepalived 2.0+
- 操作系统:CentOS 7/8 或 Ubuntu 20.04

---

## 三、PostgreSQL 主从配置

### 1. 主节点配置
```bash
# postgresql.conf
wal_level = replica
synchronous_commit = remote_apply

# pg_hba.conf
host replication rep_user 192.168.1.11/32 md5

2. 备节点配置

# 使用 pg_basebackup 初始化备库
pg_basebackup -h 192.168.1.10 -U rep_user -D /var/lib/pgsql/12/data -P -R

四、Keepalived 安装与配置

1. 安装 Keepalived

# CentOS
yum install -y keepalived

# Ubuntu
apt-get install -y keepalived

2. 主节点配置(/etc/keepalived/keepalived.conf)

vrrp_script chk_postgres {
    script "/usr/bin/pg_isready -q -d postgres"
    interval 2
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        192.168.1.100/24
    }

    track_script {
        chk_postgres
    }
}

3. 备节点配置

vrrp_instance VI_1 {
    state BACKUP
    priority 90
    # 其他参数与主节点一致
}

五、故障切换逻辑

1. 健康检查机制

2. 切换流程

  1. Master 节点 PostgreSQL 服务宕机。
  2. Keepalived 检测到故障,降低自身优先级。
  3. Backup 节点检测到 Master 优先级变化,接管 VIP。
  4. 客户端通过 VIP 自动连接到新主节点。

六、验证与测试

1. 启动 Keepalived

systemctl start keepalived
systemctl enable keepalived

2. 检查 VIP 绑定

ip addr show eth0 | grep 192.168.1.100

3. 模拟故障测试

# 在主节点停止 PostgreSQL
systemctl stop postgresql

# 观察 Backup 节点是否接管 VIP
tail -f /var/log/messages

七、注意事项

  1. 脑裂问题:建议配合 fencing 机制(如 STONITH)。
  2. 数据一致性:确保 synchronous_commit 配置合理。
  3. 监控告警:集成 Prometheus 监控切换事件。
  4. 防火墙规则:开放 VRRP 协议(IP 协议号 112)。

八、扩展方案

1. 结合 Patroni

对于更复杂的场景,可改用 Patroni 管理 PostgreSQL 集群,Keepalived 仅负责 VIP 漂移。

2. 多节点部署

通过调整优先级实现多备份节点层级切换。


结论

通过 Keepalived 实现 PostgreSQL 的 VIP 漂移,能够以秒级速度完成故障转移,显著提升系统可用性。但需注意其仅解决网络层高可用,实际生产环境建议结合流复制监控、数据一致性校验等完整方案。

参考文档
- Keepalived 官方文档:https://keepalived.org
- PostgreSQL 高可用指南:https://www.postgresql.org/docs/current/high-availability.html “`

注:本文实际约 1200 字,可根据需要补充具体参数说明或日志示例进一步扩展。

推荐阅读:
  1. postgresql复制参考
  2. postgresql生产环境数据库迁移

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

keepalived ip postgresql

上一篇:如何查看linux是多少位系统

下一篇:JS的script标签属性有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》