如何使用Pacemaker,Corosync和DRBD(CentOS 5.5)设置主动/被动PostgreSQL集群

如何设置主动/被动PostgreSQL群集使用Pacemaker, Corosync和DRBD(CentOS 5.5) 本文介绍如何设置(和monit ...

如何使用Pacemaker,Corosync和DRBD(CentOS 5.5)设置主动/被动PostgreSQL群集

本文介绍如何使用带有Corosync和DRBD的Pacemaker来设置(并监视)Active / Passive PostgreSQL群集。 由BRLink Servidor Linux团队的Rafael Marangoni编写。

介绍

我们使用两个节点,一个活动(从应用程序中应答请求),另一个在被动模式。 如果活动服务器关闭,被动服务器将自动取消其位置(作为活动节点)。

1初步说明

Linux发行版:

我们正在使用CentOS 5.5(64位)分发版,但它也可能适用于Fedora(也可以是Red Hat)。 CentOS的安装非常简单和古典,选择您喜欢/需要的基础包和其他东西。 必须记住的一个问题是我们使用DRBD在节点之间复制PostgreSQL数据,那么您需要具有专用于DRBD的磁盘或分区。 在CentOS安装分区磁盘之前,请记住这一点。

网络硬件/拓扑:

我们每个节点使用两个千兆网卡,一个(eth0)连接到网络(LAN),另一个(eth1)连接两个节点的交叉电缆。
必须使用交叉电缆来提高系统的性能和可靠性,因为DRBD不会依赖于网络交换机或任何其他方式在节点之间复制数据。

在本教程中,我们将使用物理节点node1.clusterbr.intnode2.clusterbr.int
node1.clusterbr.int :使用IP 10.0.0.191 (LAN)和IP 172.16.0.1 (交叉)
node2.clusterbr.int :使用IP 10.0.0.192 (LAN)和IP 172.16.0.2 (交叉)
dbip.clusterbr.int :它是集群IP, 10.0.0.190 。 这是所有应用程序需要指向的访问PostgreSQL的IP

磁盘:

两个节点都有两个磁盘:
/ dev / sda :系统操作系统;
/ dev / sdb :到DRBD。
如前所述,如果将一个分区专用于DRBD,则只能使用一个磁盘。

PostgreSQL:

本文中使用的PostgreSQL版本为8.4,但并不重要,因为DRBD设备内的任何内容都将通过集群复制。

2准备节点

禁用SELINUX

我们需要禁用SELINUX:

vi /etc/selinux/config

只改变这一行(让别的东西不变):

SELINUX=disabled

设置主机名

我们需要更改节点的主机名和网关:

vi /etc/sysconfig/network

node1:

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=node1.clusterbr.int
GATEWAY=10.0.0.9

node2:

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=node2.clusterbr.int
GATEWAY=10.0.0.9

配置网络接口

接下来,我们将配置网络接口:

node1:

LAN接口

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.0.191
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=a6:1e:3d:67:66:78 

交叉/ DRBD接口

vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
BOOTPROTO=static
IPADDR=172.16.0.1
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=ee:ef:ff:9a:9a:57

node2:

LAN接口

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.0.192
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=52:52:a1:1a:62:32

交叉/ DRBD接口

vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
BOOTPROTO=static
IPADDR=172.16.0.2
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=1a:18:b2:50:96:1e

设置DNS配置

在两个节点上设置DNS配置(根据您的网络):

vi /etc/resolv.conf

search clusterbr.int
nameserver 10.0.0.9

配置基本的主机名解析

配置/ etc / hosts (两个节点上的相同配置):

vi /etc/hosts

127.0.0.1               localhost.localdomain localhost
10.0.0.191              node1.clusterbr.int   node1
10.0.0.192              node2.clusterbr.int   node2
10.0.0.190              dbip.clusterbr.int   node2

PS:您可能想要在此文件上设置另一行,以指向网络的其他地址。

检查网络连接

我们来检查一切是否正常:

node1:

Pinging node2(通过LAN接口):

ping -c 2 node2


[root@node1 ~]# ping -c 2 node2
PING node2 (10.0.0.192) 56(84) bytes of data.
64 bytes from node2 (10.0.0.192): icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from node2 (10.0.0.192): icmp_seq=2 ttl=64 time=0.082 ms
--- node2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.082/0.085/0.089/0.009 ms

Pinging node2(通过交叉接口):

ping -c 2 172.16.0.2

[root@node1 ~]# ping -c 2 172.16.0.2
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=64 time=0.083 ms
64 bytes from 172.16.0.2: icmp_seq=2 ttl=64 time=0.083 ms
--- 172.16.0.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.083/0.083/0.083/0.000 ms

node2:

Pinging node1(通过LAN接口):

ping -c 2 node1

[root@node2 ~]# ping -c 2 node1
PING node1 (10.0.0.191) 56(84) bytes of data.
64 bytes from node1 (10.0.0.191): icmp_seq=1 ttl=64 time=0.068 ms
64 bytes from node1 (10.0.0.191): icmp_seq=2 ttl=64 time=0.063 ms
--- node1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.063/0.065/0.068/0.008 ms

Pinging node1(通过交叉接口):

ping -c 2 172.16.0.1

[root@node2 ~]# ping -c 2 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=1.36 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=0.075 ms
--- 172.16.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.075/0.722/1.369/0.647 ms

配置初始化选项

我喜欢将运行级别设置为3。

vi /etc/inittab

只改变这一行(让别的东西不变):

id:3:initdefault:

我喜欢从一些自动初始化中删除一些服务,只保留真正使用的服务。

这些是我们需要的活动服务:

chkconfig --list | grep 3:sim

[root@node1 ~]# chkconfig --list | grep 3:sim
acpid           0:não  1:não  2:sim   3:sim   4:sim   5:sim   6:não
anacron         0:não  1:não  2:sim   3:sim   4:sim   5:sim   6:não
apmd            0:não  1:não  2:sim   3:sim   4:sim   5:sim   6:não
atd             0:não  1:não  2:não  3:sim   4:sim   5:sim   6:não
cpuspeed        0:não  1:sim   2:sim   3:sim   4:sim   5:sim   6:não
crond           0:não  1:não  2:sim   3:sim   4:sim   5:sim   6:não
irqbalance      0:não  1:não  2:sim   3:sim   4:sim   5:sim   6:não
kudzu           0:não  1:não  2:não  3:sim   4:sim   5:sim   6:não
network         0:não  1:não  2:sim   3:sim   4:sim   5:sim   6:não
rawdevices      0:não  1:não  2:não  3:sim   4:sim   5:sim   6:não
sshd            0:não  1:não  2:sim   3:sim   4:sim   5:sim   6:não
syslog          0:não  1:não  2:sim   3:sim   4:sim   5:sim   6:não

PS:由Pacemaker(集群资源管理器 - CRM)管理的服务在本文中为Postgresql和DRBD,不应该自动初始化,因为Pacemaker将启动/停止这些服务。

此时,我们需要重新启动两个节点才能应用配置。

3.安装先决条件和集群包

以前需要安装一些软件包:

yum install -y postgresql84** gcc perl-mailtools perl-dbi php-pgsql

要安装群集包,我们需要添加EPEL仓库:

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

此链接指向EPEL包到CentOS 5 64位,如果这不是您的发行版/版本,请务必进行更改。

现在,我们安装了ClusterLabs EPEL仓库:

wget -O /etc/yum.repos.d/pacemaker.repo http://clusterlabs.org/rpm/epel-5/clusterlabs.repo

如果evething是好的,现在就去吧,并安装集群和drbd包:

yum install -y pacemaker corosync drbd83 kmod-drbd83 heartbeat