一、 什么是RHCS
RHCS是Red Hat Cluster Suite的缩写,也就是红帽子集群套件,RHCS是一个能够提供高可用性、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合,它将集群系统中三大集群架构融合一体,可以给web应用、数据库应用等提供安全、稳定的运行环境。
更确切的说,RHCS是一个功能完备的集群应用解决方案,它从应用的前端访问到后端的数据存储都提供了一个行之有效的集群架构实现,通过RHCS提供的这种解决方案,不但能保证前端应用持久、稳定的提供服务,同时也保证了后端数据存储的安全。
RHCS提供了集群系统中三种集群构架,分别是高可用性集群、负载均衡集群、存储集群。
二、RHCS提供的三个核心功能
高可用集群是RHCS的核心功能。当应用程序出现故障,或者系统硬件、网络出现故障时,应用可以通过RHCS提供的高可用**管理组件自动、快速从一个节点切换到另一个节点,节点故障转移功能对客户端来说是透明的,从而保证应用持续、不间断的对外提供服务,这就是RHCS高可用集群实现的功能。
RHCS通过LVS(Linux Virtual Server)来提供负载均衡集群,而LVS是一个开源的、功能强大的基于IP的负载均衡技术,LVS由负载调度器和服务访问节点组成,通过LVS的负载调度功能,可以将客户端请求平均的分配到各个服务节点,同时,还可以定义多种负载分配策略,当一个请求进来时,集群系统根据调度算法来判断应该将请求分配到哪个服务节点,然后,由分配到的节点响应客户端请求,同时,LVS还提供了服务节点故障转移功能,也就是当某个服务节点不能提供服务时,LVS会自动屏蔽这个故障节点,接着将失败节点从集群中剔除,同时将新来此节点的请求平滑的转移到其它正常节点上来;而当此故障节点恢复正常后,LVS又会自动将此节点加入到集群中去。而这一系列切换动作,对用户来说,都是透明的,通过故障转移功能,保证了服务的不间断、稳定运行。
RHCS通过GFS文件系统来提供存储集群功能,GFS是Global File System的缩写,它允许多个服务同时去读写一个单一的共享文件系统,存储集群通过将共享数据放到一个共享文件系统中从而消除了在应用程序间同步数据的麻烦,GFS是一个分布式文件系统,它通过锁管理机制,来协调和管理多个服务节点对同一个文件系统的读写操作。
具体的看图:
安装环境介绍
这个实例要介绍的是web+mysql集群的构建,整个RHCS集群共有四台服务器组成,分别由两台主机搭建web集群,两台主机搭建mysql集群,在这种集群构架下,任何一台web服务器故障,都有另一台web服务器进行服务接管,同时,任何一台mysql服务器故障,也有另一台mysql服务器去接管服务,保证了整个应用系统服务的不间断运行。
安装前准备工作
为了方便安装RHCS套件,在安装操作系统时,建议选择如下这些安装包:
桌面环境:xwindows system、GNOME desktop environment。
开发工具:development tools、x software development、gnome software development、kde software development。
地址规划如下:
master 192.168.12.181 主lvs server
backup 192.168.12.251 备lvs server
接下来我大致介绍下安装步骤
1.安装Luci
Luci是RHCS基于web的集群配置管理工具,可以从系统光盘找到对应的Luci安装包,安装如下:
[root@storgae-server ~]#rpm -ivh luci-0.12.2-12.el5.centos.1.i386.rpm
安装完成,执行luci初始化操作:
[root@storgae-server ~]#luci_admin init
Initializing the Luci server
Creating the 'admin' user
Enter password:
Confirm password:
Please wait...
The admin password has been successfully set.
Generating SSL certificates...
Luci server has been successfully initialized
输入两次密码后,就创建了一个默认登录luci的用户admin。
最后,启动luci服务即可:
[root@storgae-server ~]# /etc/init.d/luci start
2、 安装Luci
服务成功启动后,就可以通过https://ip:8084访问luci了。
为了能让luci访问集群其它节点,还需要在/etc/hosts增加如下内容:
192.168.12.231 Mysql1
192.168.12.232 Mysql2
192.168.12.230 web1
192.168.12.240 web2
到这里为止,在storgae-server主机上的设置完成。
3、在集群节点安装RHCS软件包
为了保证集群每个节点间可以互相通信,需要将每个节点的主机名信息加入/etc/hosts文件中,修改完成的/etc/hosts文件内容如下:
127.0.0.1 localhost
192.168.12.230 web1
192.168.12.240 web2
192.168.12.231 Mysql1
192.168.12.232 Mysql2
将此文件依次复制到集群每个节点的/etc/hosts文件中。
4、在集群节点安装RHCS软件包
RHCS软件包的安装有两种方式,可以通过luci管理界面,在创建Cluster时,通过在线下载方式自动安装,也可以直接从操作系统光盘找到所需软件包进行手动安装,由于在线安装方式受网络和速度的影响,不建议采用,这里通过手动方式来安装RHCS软件包。
安装RHCS,主要安装的组件包有cman、gfs2和rgmanager,当然在安装这些软件包时可能需要其它依赖的系统包,只需按照提示进行安装即可 ,下面是一个安装清单,在集群的四个节点分别执行 :
#install cman
rpm -ivh perl-XML-NamespaceSupport-1.09-1.2.1.noarch.rpm
rpm -ivh perl-XML-SAX-0.14-8.noarch.rpm
rpm -ivh perl-XML-LibXML-Common-0.13-8.2.2.i386.rpm
rpm -ivh perl-XML-LibXML-1.58-6.i386.rpm
rpm -ivh perl-Net-Telnet-3.03-5.noarch.rpm
rpm -ivh pexpect-2.3-3.el5.noarch.rpm
rpm -ivh openais-0.80.6-16.el5_5.2.i386.rpm
rpm -ivh cman-2.0.115-34.el5.i386.rpm
#install ricci
rpm -ivh modcluster-0.12.1-2.el5.centos.i386.rpm
rpm -ivh ricci-0.12.2-12.el5.centos.1.i386.rpm
#install gfs2
rpm -ivh gfs2-utils-0.1.62-20.el5.i386.rpm
#install rgmanager
rpm -ivh rgmanager-2.0.52-6.el5.centos.i386.rpm
5、在集群节点安装配置iSCSI客户端
安装iSCSI客户端是为了和iSCSI-target服务端进行通信,进而将共享磁盘导入到各个集群节点,这里以集群节点web1为例,介绍如何安装和配置iSCSI,剩余其它节点的安装和配置方式与web1节点完全相同 。
iSCSI客户端的安装和配置非常简单,只需如下几个步骤即可完成:
[root@web1 rhcs]# rpm -ivh iscsi-initiator-utils-6.2.0.871-0.16.el5.i386.rpm
[root@web1 rhcs]# /etc/init.d/iscsi restart
[root@web1 rhcs]# iscsiadm -m discovery -t sendtargets -p 192.168.12.246
[root@web1 rhcs]# /etc/init.d/iscsi restart
[root@web1 rhcs]# fdisk -l
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
64 heads, 32 sectors/track, 10240 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk /dev/sdb doesn't contain a valid partition table
通过fdisk的输出可知,/dev/sdb就是从iSCSI-target共享过来的磁盘分区。
至此,安装工作全部结束。
1.大致的步骤如上 具体的步骤 我们看图实验操作
大家可以看到我这里少创建了mysql 因为机器的原理 我就开了5个 他和web的方式一样 大家会web的负载 就会mysql
在每台服务器上的hosts文件下 做本地解析
然后在存储端 安装luci 步骤我在上面介绍了
两台节点上分别关闭selinux、iptables和NetworkManager
iptables -F
service iptables save
chkconfig iptables off
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
chkconfig NetworkManager off
2.接下来在集群节点安装RHCS软件包 上面也有介绍加依赖包 也可以使用yum
yum install ricci rgmanager cman -y
chkconfig ricci on
chkconfig rgmanager on
chkconfig cman on
service ricci start
service rgmanager start
service cman start
3.接下来我们在储存服务器上初始化luci 步骤在上面也有
我在做到这一步初始化的时候郁闷的要死 没有这条命令 结果百度半天说 命令取消了 可以直接使用root
[root@luci /]# yum install luci -y [root@luci /]# chkconfig luci on [root@luci /]# service luci start Point your web browser to https://域名:8084 (or equivalent) to access luci |
在两台节点上给ricci用户设置与root相同的密码
[root@gfs1 /]# passwd ricci
这时,你就可以用https://域名:8084(或https://192.168.12.246:8084)登陆集群web管理界面了,以root登陆即可
转到manage cluster界面
转到Fence Devices创建fence设备,因为不是用的服务器,没有fence设备,我随意建了一个SRF,实际生产环境中,必须使用fence硬件设备
回到nodes菜单下,点击v1.domain.com,出现节点详情后点击add fence method添加一个method, 点击add fence instance,添加刚才设定的SRF
存储服务器
2.安装scsi-target-utils软件提供iscsi服务
yum install scsi-target-utils
存储服务上挂载10G 做共享用的
3.修改/etc/tgt/targets.conf,添加:
<target iqn.2011-06.com.domain:server.target1>
backing-store /dev/xvdb
</target>
4.重启tgtd服务,并将其设为开机启动:
/etc/init.d/tgtd restart
chkconfig tgtd on
ISCSI客户机
1.安装iscsi客户端软件iscsi-initiator-utils
[root@v1 ~]# yum install iscsi-initiator-utils
2.发现服务器192.168.12.246的iscsi共享卷
iscsiadm -m discovery -t sendtargets -p 192.168.12.246
3.登录ISCSI存储:
iscsiadm -m node -T iqn.2011-06.com.domain:server.target1 -p 192.168.12.246:3260 -l
1、查看iscsi的状态:
[root@desktop54 node1]# /etc/init.d/iscsi status (node1的状态)
iSCSI Transport Class version 2.0-870
version 2.0-872
Target: iqn.2012-03.com.example:kevin
Current Portal: 192.168.0.24:3260,1
Persistent Portal: 192.168.0.24:3260,1
**********
Interface:
**********
Iface Name: default
Iface Transport: tcp
Iface Initiatorname: iqn.1994-05.com.RedHat:86d532367ca0
Iface IPaddress: 192.168.0.54
Iface HWaddress: <empty>
Iface Netdev: <empty>
SID: 2
iSCSI Connection State: LOGGED IN
iSCSI Session State: LOGGED_IN
Internal iscsid Session State: NO CHANGE
************************
Negotiated iSCSI params:
************************
HeaderDigest: None
DataDigest: None
MaxRecvDataSegmentLength: 262144
MaxXmitDataSegmentLength: 8192
FirstBurstLength: 65536
MaxBurstLength: 262144
ImmediateData: Yes
InitialR2T: Yes
MaxOutstandingR2T: 1
************************
Attached SCSI devices:
************************
Host Number: 3 State: running
scsi3 Channel 00 Id 0 Lun: 0
scsi3 Channel 00 Id 0 Lun: 1
Attached scsi disk sdb (这里发现为sdb) State: running
[root@desktop86 node2]# service iscsi status (node2的状态)
iSCSI Transport Class version 2.0-870
version 2.0-872
Target: iqn.2012-03.com.example:kevin
Current Portal: 192.168.0.24:3260,1
Persistent Portal: 192.168.0.24:3260,1
**********
Interface:
**********
Iface Name: default
Iface Transport: tcp
Iface Initiatorname: iqn.1994-05.com.redhat:12546582ea96
Iface IPaddress: 192.168.0.85
Iface HWaddress: <empty>
Iface Netdev: <empty>
SID: 2
iSCSI Connection State: LOGGED IN
iSCSI Session State: LOGGED_IN
Internal iscsid Session State: NO CHANGE
************************
Negotiated iSCSI params:
************************
HeaderDigest: None
DataDigest: None
MaxRecvDataSegmentLength: 262144
MaxXmitDataSegmentLength: 8192
FirstBurstLength: 65536
MaxBurstLength: 262144
ImmediateData: Yes
InitialR2T: Yes
MaxOutstandingR2T: 1
************************
Attached SCSI devices:
************************
Host Number: 3 State: running
scsi3 Channel 00 Id 0 Lun: 0
scsi3 Channel 00 Id 0 Lun: 1
Attached scsi disk sda (发现为sda,源存储为vda) State: running
2、在节点node1和node2上配置:
[root@desktop54 node1]# lvmconf --enable-cluster (启动CLVM的集成cluster锁)
[root@desktop54 node1]# chkconfig clvmd on
[root@desktop54 node1]# service clvmd start (clvm对lvm有效哦)
Activating VG(s): No volume groups found
[ OK ]
之后使用fdisk -l 在节点上可以看到多了一块10G的硬盘
接下来我们先给lvs+keepalived 安装配置好 具体步骤我上篇有介绍 在写就重复了
看 虚拟ip233 我们这就完成了主备
之后我们在230上操作如下
创建LVM卷
1.创建物理卷
[root@v1 ~]# pvcreate /dev/sda
2.查看物理卷
[root@v1 ~]# pvdisplay
3.创建卷组v g1
[root@v1 ~]# vgcreate vg1 /dev/sda
4.查看卷组
[root@v1 ~]# vgdisplay
5.创建逻辑卷lv1
[root@v1 ~]# lvcreate -L 10G -n lv1 vg1
-L 10G指定大小 –n lv1指定名称 vg1指定所在卷组
6.现在在两台节点上手动重启/etc/clvmd服务:
[root@v1 ~]# /etc/init.d/clvmd restart
7.在两边主机上都可以看到新建的lvm卷
[root@web1 ~]# mkfs.gfs2 -p lock_dlm -t kevin_cluster:gfs2 -j 3 /dev/vg1/lv1
kevin_cluster是群集名字
This will destroy any data on /dev/vg1/lv1.
It appears to contain: symbolic link to `../dm-2'
Are you sure you want to proceed? [y/n] y
Device: /dev/vg1/lv1
Blocksize: 4096
Device Size 9.00 GB (2359296 blocks)
Filesystem Size: 9.00 GB (2359294 blocks)
Journals: 3
Resource Groups: 36
Locking Protocol: "lock_dlm"
Lock Table: "kevin_cluster:gfs2"
UUID: e0fa9331-6479-30b0-7249-670823921408
『kevin_cluster:gfs2这个kevin_cluster就是集群的名字,gfs2是定义的名字,相当于标签吧。-j是指定挂载这个文件系统的主机个数,不指定默认为1即为管理节点的。这里实验有两个节点,加上管理主机为3』
接下来 节点安装apache
挂载GFS文件系统
在挂载之前将RHCS上apache服务停掉:
Services 里将apache服务disabled掉。
[root@desktop54 node1]# mount.gfs2 /dev/vg1/lv1 /var/www/html/
如果这里出现类似『fs is for a different cluster error mounting lockproto lock_dlm』错误,查看日志文件:tail -n1 /var/log/messages,当前集群名字为current="kevin_cluster",上一步重新格式化,修改集群名就好了。
接下来测试
我们在192.168.12.230html下的建设文件 都会同步到192.168.12.240上 看图
接下来 我们把网站指向虚拟ip
我们接下来试试负载 我把主lvs的节点服务down了 外加把web的服务down了 网页照样可以访问
而且当用户在网站上传文件的时候 就算主web down了 数据不影响 继续在web2上
转载于:https://blog.51cto.com/zaizai1573/1564605