资源描述
Linux下使用RHCS搭建双机环境
案例所属系统:
无
案例平台环境:
Red Hat Enterprise Linux 5.5 64位,Red Hat Cluster Suite V5
应用部署:
无
环境搭建详细过程:
一、概述
RedHat Enterprise Linux 3.0和4.0中对应的的RHCSv3/v4支持的最大节点数为16,RedHat Enterprise Linux 5.0对应的RHCSv5支持的最大节点数为128。
RedHat高可用集群组成:
Cluster Configuration System (CCS):集群配置系统,以管理cluster.conf档案
Cluster Manager (CMAN):集群管理器
Distributed Lock Manager (DLM):分布式锁管理器
Fence:输入/输出系统围栏系统(栅设备) 。本例中使用IBM的BMC作为fence设备。默认用户名USERID密码PASSW0RD (是零不是O)。
Resource Group Manage (rgmanager):资源组管理器,用来监督、启动和停止应用、服务和资源
Quorum Disk:仲裁磁盘
system-configure-cluster:图形化工具来管理集群中的多个机器
二、环境搭建与配置步骤
1、操作系统安装
※Red Hat的详细安装步骤在这里就不重复了,但有几个需要注意的步骤:
①在进行文件系统的分区是除了/boot沿用传统的分区方式,其余的文件系统均采用LVM进行分配和管理。如下图所示:
②Red Hat Enterprise Linux V5把RHCH套件集成在系统安装镜像中,在选择安装系统组件的时候需要选中clustering选项,如下图所示:
准备工作:
1.配置bonding:
新建/etc/sysconfig/network-config/ifcfg-bond0,内容如下:
DEVICE=bond0
BOOTPROTO=static
IPADDR=192.168.3.11
NETMASK=255.255.255.0
BROADCAST=192.168.100.255
ONBOOT=yes
TYPE=Ethernet
编辑要绑定的真实网卡eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
编辑要绑定的真实网卡eth1
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
配置绑定模式:
编辑 /etc/modules.conf 文件,加入如下一行内容以使系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0加入下列两行
# vi /etc/modules.conf
alias bond0 bonding
options bond0 miimon=100 mode=1 primary=eth0
说明:miimon是用来进行链路监测的。 比如:miimon=100,那么系统每100ms监测一次路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,共有0、1、2、3四种模式,常用的为0,1两种:mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,默认情况下只有一块网卡工作,另一块做备份,primary指定启动后active的网卡。
重新启动网络服务应用刚才的配置
# service network restart
Bringing up interface bond0 OK
Bringing up interface eth0 OK
Bringing up interface eth1 OK
Bringing up interface eth2 OK
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v2.6.3-rh (June 8, 2005)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:f8:64:e1
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:0c:29:f8:64:eb
2.修改/etc/hosts文件,添加节点的主机名和IP地址。在两台主机上该文件必须一致。
# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.3.11 elndb1
10.1.1.1 elndb1
192.168.3.10 elndb
192.168.3.12 elndb2
10.1.1.2 elndb2
3.给共享存储LVM分区,建立逻辑卷和仲裁磁盘
(1)检查当前服务器硬盘和共享存储的情况(主机elndb1上执行)
[root@elndb1 /]# fdisk -l
Disk /dev/sda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 2610 20860402+ 8e Linux LVM
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
Disk /dev/sdc: 104 MB, 104857600 bytes
64 heads, 32 sectors/track, 100 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
(2)发现共享存储/dev/sdb,将其分区
[root@elndb1 /]# fdisk /dev/sdb
Command (m for help):p
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
可以看到,当前没有分区,我们输入n,建立一个新的分区
Command (m for help): n
Command action
e extended
p primary partition (1-4)
由于我们要把oracle的数据库建立在共享磁盘上,没有其他用途,所以,我们只建立一个主分区即可,输入p
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261
输入p查看一下:
Command (m for help): p
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 83 Linux
注意:因为要建立动态磁盘系统,以使GFS格式化磁盘阵列柜后可以动态调整分区大小,因此需要将刚建立的主分区类型更改为8e,即lvm类型的动态磁盘分区
输入t
Command (m for help): t
Selected partition 1
Hex code (type L to list codes):
输入8e
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
输入p
Command (m for help): p
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 8e Linux LVM
输入w,保存一下。
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
激活刚刚创建好的分区
[root@elndb1 /]# partprobe
(3) 在服务器2上检查自动识别的LVM分区(服务器1上的分区操作,服务器2应可以自动识别)
# chkconfig clvmd on
# service clvmd status
# service clvmd start
(4)动态磁盘的建立
注意:以下A、B、C、D步骤只在服务器1上操作,步骤E需要在服务器1与2上都做。
A:建立物理卷
[root@elndb1 ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
[root@elndb1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name rootvg
PV Size 19.89 GB / not usable 19.49 MB
Allocatable yes (but full)
PE Size (KByte) 32768
Total PE 636
Free PE 0
Allocated PE 636
PV UUID tpIqar-w86b-9x7j-JKkS-BOkz-mBKu-srRlLb
"/dev/sdb1" is a new physical volume of "2.00 GB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 2.00 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 3ZcmC2-FAb0-rqE2-Lpar-FQdE-swT2-MJaNij
B:建立逻辑卷组,卷组名为vgelndb1
[root@elndb1 ~]# vgcreate vgelndb1 /dev/sdb1
Volume group "vgelndb1" successfully created
[root@elndb1 ~]# vgdisplay
/dev/cdrom: read failed after 0 of 2048 at 0: Input/output error
--- Volume group ---
VG Name vgelndb1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 2.00 GB
PE Size 4.00 MB
Total PE 511
Alloc PE / Size 0 / 0
Free PE / Size 511 / 2.00 GB
VG UUID uddDSL-upUI-tUP9-ZEix-DSAm-xKim-qbU5xG
--- Volume group ---
VG Name rootvg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 11
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 10
Open LV 10
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.88 GB
PE Size 32.00 MB
Total PE 636
Alloc PE / Size 636 / 19.88 GB
Free PE / Size 0 / 0
VG UUID WwsD1o-nCv6-FNOg-nsu4-55fr-AjgY-LjYS7P
C:建立逻辑卷
注意,逻辑卷大小要小于物理卷的大小(下面有说明),名字是,lvelnoradb1,逻辑卷组名是刚才建立的vgelndb1
[root@elndb1 ~]# lvcreate -L 2000M -n lvelnoradb1 vgelndb1
Logical volume "lvelnoradb1" created
[root@elndb1 ~]# lvdisplay
/dev/cdrom: read failed after 0 of 2048 at 0: Input/output error
--- Logical volume ---
LV Name /dev/vgelndb1/lvelnoradb1
VG Name vgelndb1
LV UUID piHcbd-cjb5-zgNt-Sm7E-exII-G6JF-QU5Nlk
LV Write Access read/write
LV Status available
# open 0
LV Size 1.95 GB
Current LE 500
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:10
说明:
①建立逻辑卷时,大小要小于上面建立物理卷的大小,我是这么理解的,至于小多少可以建立成功,要试验一下,如果建立不成功,就将容量减小一点.物理卷与逻辑卷大小的关系,因为时间问题,没完全弄清楚.
②在服务器1建立的物理卷、逻辑卷组以及逻辑卷,在服务器2上都应该自动识别.因为我们已经安装了cluster与GFS服务,所以,服务器1的分区操作,在服务器2检查时,建议先重新启动一下clvm服务.在服务器1与服务器2上,pvdisplay、vgdisplay、lvdisplay看到的应该一致,如果服务器2上无法看到与服务器1上相同的信息,或者报错,那么大多是因为clvmd服务没有启动,关于clvmd服务,实际上就是基于cluster(集群)的lvm服务,lvm是什么,大致意思是动态磁盘管理吧!使用命令 service clvmd status检查clvm状态,使用service clvmd restart重新启动clvmd服务.
D:用GFS协议格式化刚才建立的逻辑卷lvelnoradb1
[root@elndb1 ~]# mkfs.gfs -p lock_dlm -t SCN:lvelnoradb1 -j 2 /dev/vgelndb1/lvelnoradb1
This will destroy any data on /dev/vgelndb1/lvelnoradb1.
Are you sure you want to proceed? [y/n]
输入y
Device: /dev/vgelndb1/lvelnoradb1
Blocksize: 4096
Filesystem Size: 446404
Journals: 2
Resource Groups: 8
Locking Protocol: lock_dlm
Lock Table: SCN:lvelnoradb1
Syncing...
All Done
说明:
-p lock_dlm 定义为DLM锁方式,如果不加此参数,当在两个系统中同时挂载此分区时就会像ext3格式一样,两个系统的信息不能同步;
-t SCN:oracle :DLM锁所在的表名字,SCN应与cluster.conf中Cluster的name相同;oracle,按Redhat售前工程师的说法,GFS格式化的要是静态磁盘,可以是任意名字,而要是lvm的动态磁盘,则必须是逻辑卷名;
-j 2 :GFS分区中最多支持多少个节点同时挂载,本例就2个oracle数据库,所以值为2.
/dev/vgelndb1/lvelnoradb1 :准备要格式化的逻辑卷分区
E:将逻辑卷分区/dev/oracle10g/oracle mount到某个目录
本项目的oracle库建在/oradata上,所以,建立相关目录(此步骤需要在服务器1与服务器2上都做)
[root@elndb1 /]# mkdir oradata
[root@elndb1 /]# mount -t gfs /dev/vgelndb1/lvelnoradb1 /oradata
查看挂载的分区
[root@smsdb01 /]#df –h
注意:如果出现下面的错误,无法mount
mount: permission denied
检查/etc/cluster/cluster.conf文件,尤其是cluster configure工具里的service management里的Faildomain Domain是不是选择了定义的Faildomain Domain的名字,如smsdbHP.
另外,可以用demsg命令以及tail –f /var/log/messages检查系统错误消息与监控日志,帮助查错.
4.使用mkqdisk命令创建仲裁磁盘
[root@elndb1 proc]# mkqdisk -c /dev/sdc1 -l elnqdisk
mkqdisk v0.6.0
Writing new quorum disk label 'elnqdisk' to /dev/sdc1.
WARNING: About to destroy all data on /dev/sdc1; proceed [N/y] ? y
Initializing status block for node 1...
Initializing status block for node 2...
Initializing status block for node 3...
Initializing status block for node 4...
Initializing status block for node 5...
Initializing status block for node 6...
Initializing status block for node 7...
Initializing status block for node 8...
Initializing status block for node 9...
Initializing status block for node 10...
Initializing status block for node 11...
Initializing status block for node 12...
Initializing status block for node 13...
Initializing status block for node 14...
Initializing status block for node 15...
Initializing status block for node 16...
[root@elndb1 proc]# mkqdisk -L
mkqdisk v0.6.0
/dev/disk/by-path/pci-0000:02:07.0-scsi-0:0:0:0-part1:
/dev/sdc1:
Magic: eb7a62c2
Label: elnqdisk
Created: Sun Jun 13 15:07:17 2010
Host: elndb1
Kernel Sector Size: 512
Recorded Sector Size: 512
5.检查cman、rgmanager、clvmd、gfs几个服务是否已经加到系统自启动服务中
# chkconfig --list|grep cman
# chkconfig --list|grep rgmanager
# chkconfig --list|grep clvmd
# chkconfig --list|grep gfs
如果没有的话,执行下列命令将其加入到系统服务中
# chkconfig --add cman
# chkconfig --add rgmanager
# chkconfig --add clvmd
# chkconfig --add gfs
# chkconfig cman on
# chkconfig rgmanger on
# chkconfig clvmd on
# chkconfig gfs on
6.查看启动集群的几个服务的运行状态,停掉两台机器上cluster的所有服务
# service cman status
# service rgmanager status
# service clvmd status
# service gfs status
# service cman stop
# service rgmanager stop
# service clvmd stop
# service gfs stop
查看/usr/share/system-config-cluster/FaildomController.py文件,第213行是否少一个“=”,该问题为cluser自身bug。
开始配置Cluster:(使用的是RHCSV5版本的system-config-cluster工具)
1.在Xwindow下运行
# system-config-cluser
或者依次执行System->Administration->Server Settings->Cluster Management,
打开图形化配置工具:
2.选择Create New Configuration按钮,然后输入文件名点和仲裁磁盘的相关信息,然后点击“确定”。
3.选中Cluster Nodes,这里就是加入成员节点的,点击Add a Cluster Node,输入elndb1点OK,如下图,Node Name需要和/etc/hosts文件中配置的机器名相同
同理加入elndb2。
4.选中Fence Devices,点击Add a Fence Device,如下图,Fence设备需要根据实际情况进行选择配置,这次安装中用IBM IPMI lan管理,修改后的IP是192.168.3.21,用户名是USERID,密码是PASSW0RD, 点OK。
5.选中刚添加的节点elndb1,点Manage Fencing For This Node,弹出对话框,点Add a New Fence Level,再选中左侧的Fence-Level-1,点Add a New Fence to this Level,弹出下面对话框
同样方式配置elndb2的fence设备。
6.创建失效域,添加对应节点,如图,选中Failover Domains,点击右下角的Create a Failover Domain。在弹出的对话框中输入失效域的名称,这里我们输入eln_failover保存后。
7.将失效域成员节点添加进去
右边的两个打勾选向分别是 "RestrictFailover Domains members" 以及 "Priotitzed List"。如果妳只有两台, 打勾第一项“Restrict Failover Domains members” 就可以了,这项是只允许这两台做轮替。另外一项"Priotitzed List"则是在你有两台以上的服务器,需要分别设定轮替的优先级时需要的。当你打钩"Priotitzed List"后可以使用"Adjust Priority" 调整多节点的替换优先级
8.创建资源组
选中Resources,点击右下角的Create a Resources,这里选择Create a Resource,然后选择IP Address,填写Float IP进去。
9.创建服务
选中Service,点击右下角的Create a Service,在弹出的对话框中创建Service,如下图
依次增加要切换的服务即可。
在这里需要提醒各位最好将服务脚本放置在IP下面,只有网卡起来了才
能服务,逻辑上才正确。
操作流程:选择Create a new resource for this service 然后选择IP Address,这样地址资源就加载好了,选中刚建立的地址,再在下面选择Attach a new Private Resource to the Selection,这里选择Script并添加我们需要服务的脚本。
10.保存配置并同步到备机
点击 Send To Cluster按钮,如下图所示
也可以通过以下命令来同步集群两台主机的配置:
[root@elndb1 ~]# scp /etc/cluster/cluster.conf elndb2: /etc/
cluster/cluster.conf
The authenticity of host 'elndb2 (134.33.141.202)' can't be established.
RSA key fingerprint is d2:17:1e:73:4e:ae:fc:ff:3c:ec:66:0e:76:b0:76:17.
Are you sure you want to continue connecting (yes/no)?
输入yes
Warning: Permanently added 'elndb2,134.33.141.202' (RSA) to the list of known hosts.
root@elndb2's password:
输入主机2的密码:
cluster.conf 100% 1669 1.6KB/s 00:00
10、最终的cluster.conf文件内容应该如下结构:
[root@elndb1 cluster]# cat cluster.conf
<?xml version="1.0" ?>
<cluster config_version="2" name="eln_cluster">
<quorumd device="/deb/sdc1" interval="1" label="elnqdisk" min_score="3" tko="10" votes="3">
<heuristic interval="2" program="/bin/bash" score="1"/>
</quorumd>
<fence_daemon post_fail_delay="0" post_join_delay="3"/>
<clusternodes>
<clusternode name="elndb1" nodeid="1" votes="1">
<fence>
<method name="1">
展开阅读全文