pacemaker+corosync+postgresql

本文详细介绍如何在Redhat7.3环境下使用Pacemaker和Corosync搭建PostgreSQL 10高可用集群,包括环境配置、软件安装、集群认证、数据库配置及自动切换策略等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试环境:

系统Redhat7.3

数据库Postgresql-10

1、环境配置:

配置主机名

hostnamectl set-hostname node1

 

关闭selinux

[root@node1 ~]# cat /etc/selinux/config |grep -v ^#

SELINUX=disabled

SELINUXTYPE=targeted

 

关闭防火墙

[root@node1 ~]# systemctl stop firewalld

[root@node1 ~]# systemctl disable firewalld

[root@node1 ~]# iptables -F

[root@node1 ~]# iptables -L

 

配置域名解析

[root@node1 ~]# cat /etc/hosts

192.168.21.66 node1

192.168.21.67 node2

 

安装软件

[root@node1 ~]#yum install -y pacemaker corosync pcs ipvsadm

 

2、启用pcsd服务

在所有节点执行:

[root@node1 ~]# systemctl start pcsd.service

[root@node1 ~]# systemctl enable pcsd.service

3、设置hacluster用户密码

在所有节点执行:

[root@node1 ~]# echo hacluster | passwd hacluster --stdin

4、集群认证

在任何一个节点上执行:

[root@node1 ~]# pcs cluster auth -u hacluster -p hacluster node1 node2

5、同步配置

在任何一个节点上执行:

[root@node1 ~]# pcs cluster setup --last_man_standing=1 --name pgcluster node1 node2

6、启动集群

在任何一个节点上执行:

[root@node1 ~]# pcs cluster start --all

 

7、安装配置postgresql

所有节点

[root@node1 ~]# useradd postgres

[root@node1 ~]# passwd postgres

[root@node1 ~]# vim /home/postgres/.bash_profile

添加:

export PGDATA=/app/data

export PATH=/app/pgsql/bin:$PATH

[root@node1 ~]# mkdir /app/

[root@node1 ~]# mkdir /app/data

[root@node1 ~]# chown postgres.postgres /app/data/

[root@node1 ~]# tar -zxvf postgresql-10.1.tar.gz

[root@node1 postgresql-10.1]# ./configure --prefix=/app/pgsql

[root@node1 postgresql-10.1]# gmake

[root@node1 postgresql-10.1]# gmake install

[root@node1 ~]# mkdir /app/xlog_archive

[root@node1 ~]# chown postgres.postgres /app/xlog_archive/

主节点

[postgres@node1 ~]$ initdb

修改配置文件

[root@node1 ~]# vim /app/data/postgresql.conf

[root@node1 ~]# cat /app/data/postgresql.conf |grep -v '^#'|grep -v '^$'|grep -v ^$'\t'

listen_addresses = '*'        

port = 5432                            

max_connections = 100                  

shared_buffers = 128MB                 

dynamic_shared_memory_type = posix     

wal_level = hot_standby                 

synchronous_commit = on       

wal_log_hints = on                   

archive_mode = on              

archive_command = 'cp %p /app/xlog_archive/%f'         

max_wal_senders = 5           

wal_keep_segments = 32        

wal_sender_timeout = 5000       

hot_standby = on                      

wal_receiver_status_interval = 2       

hot_standby_feedback = on             

wal_receiver_timeout = 60s             

logging_collector = on         

log_timezone = 'PRC'

datestyle = 'iso, mdy'

timezone = 'PRC'

lc_messages = 'en_US.utf8'                    

lc_monetary = 'en_US.utf8'                     

lc_numeric = 'en_US.utf8'                     

lc_time = 'en_US.utf8'                         

default_text_search_config = 'pg_catalog.english'

restart_after_crash = on 

            

[root@node1 ~]# vim /data/postgresql/data/pg_hba.conf

添加

host   all              all      192.168.21.0/24         md5

host   replication     all     192.168.21.0/24         md5

 

启动数据库,创建用户。

postgres=# alter user postgres with password 'postgres';

postgres=# create user replicator with login  replication password 'replicator';

 

备节点

[root@node2 ~]# chmod 700 /app/data/

[postgres@node2 ~]$ pg_basebackup -h node3 -U postgres -D /app/data/ -X s

 

停掉主节点

7、配置自动切换

[root@node1 ~]# cat /app/cluster_setup.sh

pcs cluster cib pgsql_cfg

pcs -f pgsql_cfg property set no-quorum-policy="ignore"           

pcs -f pgsql_cfg property set stonith-enabled="false"                      

pcs -f pgsql_cfg resource defaults resource-stickiness="INFINITY"      

pcs -f pgsql_cfg resource defaults migration-threshold="3"                

pcs -f pgsql_cfg resource create vip-master IPaddr2 ip="192.168.21.70" cidr_netmask="24" \

op start  timeout="60s" interval="0s"  on-fail="restart"    \

op monitor timeout="60s" interval="10s" on-fail="restart"    \

op stop    timeout="60s" interval="0s"  on-fail="block"                                           

pcs -f pgsql_cfg resource create vip-slave IPaddr2 ip="192.168.21.71" cidr_netmask="24" \

op start   timeout="60s" interval="0s"  on-fail="restart"    \

op monitor timeout="60s" interval="10s" on-fail="restart"    \

op stop    timeout="60s" interval="0s"  on-fail="block"                                                  

pcs -f pgsql_cfg resource create pgsql pgsql \

pgctl="/app/pgsql/bin/pg_ctl" \

psql="/app/pgsql/bin/psql" \

pgdata="/app/pgdata/" \

config="/app/pgdata/postgresql.conf" \

rep_mode="sync" node_list="node1 node2" master_ip="192.168.21.70"  \

repuser="replicator" \

primary_conninfo_opt="password=replicator \

keepalives_idle=60 keepalives_interval=5 keepalives_count=5" \

restart_on_promote='true' \

op start   timeout="60s" interval="0s"  on-fail="restart" \

op monitor timeout="60s" interval="4s" on-fail="restart" \

op monitor timeout="60s" interval="3s" on-fail="restart" role="Master" \

op promote timeout="60s" interval="0s"  on-fail="restart" \

op demote  timeout="60s" interval="0s"  on-fail="stop" \

op stop    timeout="60s" interval="0s"  on-fail="block"      

pcs -f pgsql_cfg resource master pgsql-cluster pgsql master-max=1 master-node-max=1 clone-max=3 clone-node-max=1 notify=true

pcs -f pgsql_cfg resource group add master-group vip-master       

pcs -f pgsql_cfg resource group add slave-group vip-slave                

pcs -f pgsql_cfg constraint colocation add master-group with master pgsql-cluster INFINITY   

pcs -f pgsql_cfg constraint order promote pgsql-cluster then start master-group symmetrical=false score=INFINITY                                                                                                 

pcs -f pgsql_cfg constraint order demote  pgsql-cluster then stop  master-group symmetrical=false score=0                                                                                                               

pcs -f pgsql_cfg constraint colocation add slave-group with slave pgsql-cluster INFINITY        

pcs -f pgsql_cfg constraint order promote pgsql-cluster then start slave-group symmetrical=false score=INFINITY                                                                                                       

pcs -f pgsql_cfg constraint order demote  pgsql-cluster then stop  slave-group symmetrical=false score=0

pcs cluster cib-push pgsql_cfg

执行操作文件

[root@node1 app]# sh cluster_setup.sh

 

查看集群状态

[root@node1 app]# pcs status

### 配置CorosyncPacemaker实现PostgreSQL高可用性集群 为了建立一个基于CorosyncPacemakerPostgreSQL高可用性(HA)集群,需遵循一系列特定配置步骤来确保数据库服务能够在节点间自动切换并保持数据一致性。 #### 安装必要的软件包 安装过程中涉及的主要组件包括`corosync`, `pacemaker` 和 `postgresql`。这些工具通常可以通过Linux发行版的标准仓库获取[^1]。 #### 初始化Corosync通信层 Corosync作为底层消息传递库负责各节点间的通讯协调工作。其配置文件一般位于 `/etc/corosync/corosync.conf` 中,主要参数设置如下: - **totem**: 定义环回地址、接口以及心跳超时时间等网络属性; - **nodelist**: 列举参与集群的所有成员机器信息; ```bash # Example of totem section in corosync.conf totem { version: 2 secauth: off interface { ringnumber: 0 bindnetaddr: 192.168.1.0 mcastport: 5405 ttl: 1 } } ``` #### 设置Pacemaker资源管理器 一旦Corosync启动成功,则可以继续配置Pacemaker来进行更高级别的HA策略定义。通过命令行工具如`pcs`(ClusterLabs),能够简化此过程中的许多操作,比如创建、修改或删除各种类型的资源和服务约束条件。 对于PostgreSQL而言,在Pacemaker环境中应将其视为一种可迁移的服务单元——即所谓的克隆集(clone set)[^1]。这意味着即使某个实例发生故障,另一个备用副本也会立即接管业务请求而不会造成任何中断现象。 具体来说,需要执行以下几项任务: - 创建虚拟IP(Virtual IP, VIP)用于对外提供统一访问入口; - 将PostgreSQL进程注册成受控对象以便于监控状态变化情况; - 设定主备模式下的同步复制机制以保障事务持久性和读写分离特性。 ```bash # Add PostgreSQL as a resource under Pacemaker control using pcs command line tool. pcs resource create pgsql ocf:heartbeat:pgsql \ params config="/var/lib/pgsql/data/postgresql.conf" \ op monitor interval="30s" ``` #### 数据库层面调整 最后一步是在PostgreSQL内部做出相应改动支持上述架构设计需求。这主要包括但不限于开启流式复制(streaming replication)功能,并指定合适的恢复目标(recovery target)位置路径。 此外,建议定期备份整个环境的相关配置文档资料,便于日后维护升级或者排查问题之用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值