如何使用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.int
和node2.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