一、RHCS集群的组成与结构
RHCS集群组成:
RHCS是一个集群工具的集合,主要有下面几大部分组成:
1. 集群架构管理器
这是RHCS集群的一个基础套件,提供一个集群的基本功能,使各个节点组成集群一起工作,具体包括分布式集群管理器(CMAN)、成员关系管理、锁管理(DLM)、配置文件管理和栅设备(Fence)。
2. 高可用服务管理器
提供节点服务监控和服务故障转移功能。当一个节点服务出现故障时,将服务转移到另一个健康节点。
3. 集群配置管理工具
RHCS可以通过Luci来配置和管理RHCS集群。Luci是一个基于Web的集群配置方式,通过Luci可以轻松的搭建一个功能强大的集群系统。
4. LVS
LVS是一个开源的负载均衡软件,利用LVS可以将客户端的请求根据指定的负载均衡策略和算法合理的分配到各个服务节点,实时地、动态地、智能地分担负载。
5. GFS (Gllobal File System)
GFS是Red Hat开发的一套集群文件系统,GFS文件系统允许多个服务同时读写一个磁盘分区,通过GFS可以实现数据的集中管理,免去了数据同步和复制的麻烦,但GFS并不能孤立的存在,安装GFS需要RHCS的底层组件支持。
6. CLVM (Cluster Logical Volume Manager)
集群逻辑卷管理,是LVM的扩展,这种扩展允许集群中的机器使用LVM来管理共享存储。
7. iSCSI
即Internet SCSI,是IETF制定的一项标准,用于将SCSI数据块映射为以太网数据包。它是一种基于IP Storage理论的存储技术。RHCS可以通过iSCSI技术来导出和分配共享存储的使用。
8. GNBD (Global Network Block Device)
全局网络模块,是GFS的一个补充组件,用于RHCS分配和管理共享存储,现在GNBD已经停止了开发,使用GNBD的人越来越少了。
RHCS集群结构:
RHCS集群整体上分为3大部分:高可用性、负载均衡和存储集群。
典型集群框图:
图一 Cluster node、Failover Domain、Service
整个结构分为三层,最上层为高可用的LVS负载均衡层;中间一层是Real Server层,也就是集群服务节点部分;最下边为共享存储层,主要用于为GFS文件系统提供共享存储空间,可以通过GNBD实现,也可以通过iSCSI技术实现。
图二 Red Hat 高可用性附加组建硬件概述
图三 网页服务器集群服务示例
二、使用环境的初始化
各个node要有 IP、 Hostname(主机名)、 /etc/hosts(添加解析,集群中每个节点都得有)
需要关闭 NetworkManager、Iptables、Selinux
配置yum源 ,必须有这几个 Server, HighAvailability, LoadBalancer,ResilientStorage, ScalableFileSystem
三、开始安装配置
node1: 管理主机
node2、node3:集群节点
#cat /etc/hosts 192.168.1.21 ty1.org 192.168.1.22 ty2.org 192.168.1.23 ty3.org
集群节点上:
yum install ricci -y
passwd ricci #设置ricci密码
/etc/init.d/ricci start #启动ricci端口为11111
设置开机启动
chkconfig ricci on
管理主机上:
yum install luci -y #安装luci,使用web方式配置集群
[root@ty1 cluster]# /etc/init.d/luci start Start luci... [ OK ] Point your web browser to https://ty1.org:8084 (or equivalent) to access luci
现在就可以web访问luci配置集群,使用的是https://ty1.org:8084
获取证书:
此处账户密码为管理主机的root及其密码
点击Create Cluster后,各node就开始安装集群所需要的包,可以在node2上查看
[root@ty2 ~]# ps aux | grep yum root 1876 14.3 10.4 257372 52432 ? R 00:23 0:05 /usr/bin/python /usr/bin/yum -y install cman rgmanager lvm2-cluster sg3_utils gfs2-utils root 1933 0.0 0.1 103292 844 pts/0 S+ 00:24 0:00 grep yum
出现如下图,则表示集群创建成功
在node2上使用clustat查看集群节点状态
现在rhel6集群就创建好了。。。
四、添加fence设备和集群web服务
“Fence技术”核心在于解决高可用集群在出现极端问题情况下的运行保障问题,在高可用集群的运行过程中,有时候会检测到某个节点功能不正常,比如在两台高可用服务器间的心跳线突然出现故障,这时一般高可用集群技术将由于链接故障而导致系统错判服务器宕机从而导致资源的抢夺,为解决这一问题就必须通过集群主动判断及检测发现问题并将其从集群中删除以保证集群的稳定运行,Fence技术的应用可以有效的实现这一功能。
以虚拟机和宿主机实现fence功能:
hostname ip KVM domain name
宿主机: ty.org 192.168.1.10
虚拟机: ty2.org 192.168.1.22 node2
ty3.org 192.168.1.23 node3
宿主机上配置:
需要安装fence包:
yum install fence-virtd-multicast fence-virtd fence-virtd-libvirt -y
[root@ty ~]# rpm -qa | grep fence fence-virtd-multicast-0.2.3-13.el6.x86_64 fence-virtd-0.2.3-13.el6.x86_64 fence-virtd-libvirt-0.2.3-13.el6.x86_64
配置fence:
[root@ty ~]# fence_virtd -c
Module search path [/usr/lib64/fence-virt]:
Available backends:
libvirt 0.1
Available listeners:
multicast 1.1
Listener modules are responsible for accepting requests
from fencing clients.
Listener module [multicast]:
The multicast listener module is designed for use environments
where the guests and hosts may communicate over a network using
multicast.
The multicast address is the address that a client will use to
send fencing requests to fence_virtd.
Multicast IP Address [225.0.0.12]:
Using ipv4 as family.
Multicast IP Port [1229]:
Setting a preferred interface causes fence_virtd to listen only
on that interface. Normally, it listens on the default network
interface. In environments where the virtual machines are
using the host machine as a gateway, this *must* be set
(typically to virbr0).
Set to 'none' for no interface.
Interface [br0]: //设置网络接口,据实际情况填
The key file is the shared key information which is used to
authenticate fencing requests. The contents of this file must
be distributed to each physical host and virtual machine within
a cluster.
Key File [/etc/cluster/fence_xvm.key]: //认证key
Backend modules are responsible for routing requests to
the appropriate hypervisor or management layer.
Backend module [libvirt]:
The libvirt backend module is designed for single desktops or
servers. Do not use in environments where virtual machines
may be migrated between hosts.
Libvirt URI [qemu:///system]:
Configuration complete.
=== Begin Configuration ===
backends {
libvirt {
uri = "qemu:///system";
}
}
listeners {
multicast {
interface = "br0";
port = "1229";
family = "ipv4";
address = "225.0.0.12";
key_file = "/etc/cluster/fence_xvm.key";
}
}
fence_virtd {
module_path = "/usr/lib64/fence-virt";
backend = "libvirt";
listener = "multicast";
}
=== End Configuration ===
Replace /etc/fence_virt.conf with the above [y/N]? y
创建fence认证key:
[root@ty ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
/dev/urandom可以产生随机数
将key上传至集群节点node
[root@ty ~]#scp /etc/cluster/fence_xvm.key ty2.org:/etc/cluster
[root@ty ~]#scp /etc/cluster/fence_xvm.key ty3.org:/etc/cluster
[root@ty ~]#/etc/init.d/fence_virtd start //启动fence
接下来使用web设置节点fence
这一步的Domain为虚拟机名字(如下),各节点一定要对应好
设置好fence,就是如下显示
接下来就是测试fence功能,使集群某一节点出现问题(即使心跳连接断开),若fence设置正确,此节点就会由fence控制自动重启。
使用命令使一节点内核崩溃:echo -c > /proc/sysrq-trigger
内核崩溃,集群心跳连接就会断开,该节点若自动重启,即成功。
----------------------------------------------------------------------------------------
添加web服务
先在每个节点上都设置httpd
echo `hostname` > /var/www/html/index.html //创建index.html文件
节点机上的httpd服务不用启动,集群会自动启动
使用web页面添加服务:
创建故障转移域
Prioritized 设定节点优先级
Restricted 指定运行某服务的节点主机
No Failback 勾选时,优先级高的节点主机宕机服务转移到其他节点,其恢复后,服务不再转移到该节点
添加资源
添加vip(虚拟ip)
添加Apache服务
创建service groups
Run Exclusive 专一的运行这一种service
Recovery Policy选择Relocate,服务节点出现问题,转移服务至其它节点
添加Resource到Service,(注意:先添加vip,再添加Apache服务,;两者处在同一级)
添加完后可以使用clustat命令在节点上查看service状态,已经运行,虽然使用/etc/init.d/httpd status 查看httpd状态为stop,但查看httpd端口已经开启运行
,
现在就可以web访问vip
命令:
clusvadm -e www 启动集群www服务enable,在哪个节点上执行,哪个节点运行此服务
clusvadm -d www 关闭集群www服务disable
clusvcadm -r www -m server60.example.com //服务迁移到server60上
clusvcadm -il 监控clustat
加入cluster后,若想要删除某一节点,需要先LeaveCluster,然后再Delete;若某一节点已经加入一个Cluster,现在想加入其他cluster,就必须先删除该节点/etc/cluster/cluster.conf文件(里边为节点的配置信息)
添加其他节点时可以遇到问题:
问题原因:
安装luci软件包时是使用的yum,而yum源中包含了epel源,在安装过程中使用了epel源里的包.而epel源里的包是最新版本的,与luci有些包不兼容.
解决办法:
shell>yum erase jabberpy.noarchpython-repoze-who-friendlyform.noarch python-tw-forms.noarch
shell>yum install luci�Cdisablerepo=*epel*
启动luci遇到的问题:
提示无法创建/var/lib/luci/data/luci.db
解决办法:touch /var/lib/luci/data/luci.db 手动添加
-------------------------------------------------------------
添加iSCSI共享存储
宿主机上创建iscsi共享磁盘:
lvcreate-L 2G -n demo vg_ty
安装iscsi包
scsi-target-utils server (宿主机)
iscsi-initiator-utils client (虚拟机)
在宿主机上:
#yum install scsi-target-utils
#vi/etc/tgt/targets.conf <targetiqn.2013-11.com.example:ty.target1> backing-store /dev/vg_ty/node initiator-address 192.168.1.13 //指定client,其他的不能访问 initiator-address192.168.1.14 </target>
#/etc/init.d/tgtdstart
在节点主机上(虚拟机中):
#yum install iscsi*
#iscsiadm-m discovery -t st -p 192.168.1.10 Startingiscsid: [ OK ] 192.168.1.10:3260,1iqn.2013-11.com.example:ty.target1
//扫描iscsi主机共享磁盘,-t 指定type(sendtargets简写为st),-p指定ip
#iscsiadm -m node -l //登录,登录后在宿主机上执行tgt-admin -s命令就可以看到登录信息
#tgt-admin -s Target 1: iqn.2013-11.com.example:ty.target1 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 2147 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /dev/vg_ty/demo Backing store flags: Account information: ACL information: 192.168.1.13 192.168.1.14
现在可以使用fdisk-l 查看新加入的磁盘
#fdisk-cu /dev/sda //只需在一个节点上执行,所有节点同步,分区,t,8e
#lvmconf --enable-cluster //使逻辑卷支持cluster
#/etc/init.d/clvmd restart
//只需在一个节点上执行,所有节点同步
#pvcreate /dev/sda1
c 支持集群功能,y---yes , n---no
#vgcreate -cy clustervg /dev/sda1
#lvcreate -L 1G -n lvcluster clustervg
在其他节点上使用pvs,vgs等,可以查看创建的lvm分区,第一次若看不到,可以使用partprobe重读分区表
#mkfs.ext4 /dev/clustervg/lvcluster //只需在一个节点上执行
现在就可以挂载文件系统了,所有节点可以同时挂载,某节点做的变动,其他节点需要umount重新挂载才能同步
#mount/dev/clustervg/lvcluster /mnt/
在节点ty2.com上挂在并创建file文件
[root@ty2 ~]# mount /dev/clustervg/lvcluster /mnt/ [root@ty2 ~]# cd /mnt/ [root@ty2 mnt]# ls lost+found [root@ty2 mnt]# echo "test iscsi" > file [root@ty2 mnt]# ls file lost+found [root@ty2 mnt]# cat file test iscsi
在节点ty3.com上挂载共享分区,可看到ty3.com上创建的文件file
[root@ty3 ~]# mount /dev/clustervg/lvcluster /mnt/ [root@ty3 ~]# ls lianxi [root@ty3 ~]# cd /mnt/ [root@ty3 mnt]# ls file lost+found [root@ty3 mnt]# cat file test iscsi
[root@ty3 ~]# cman_tool status //查看集群信息 Version: 6.2.0 Config Version: 16 Cluster Name: cluster Cluster Id: 63628 Cluster Member: Yes Cluster Generation: 140 Membership state: Cluster-Member Nodes: 2 Expected votes: 3 Total votes: 2 Node votes: 1 Quorum: 2 Active subsystems: 9 Flags: Ports Bound: 0 11 177 Node name: ty4.com Node ID: 2 Multicast addresses: 239.192.248.133 Node addresses: 192.168.1.23
若想删除scsi-server主机的scsi共享磁盘,必须先使客户端退出登录,才可以
/etc/init.d/tgtstop,否则回报错,现在就可以删除server端的scsi磁盘分区了
#iscsiadm-m node -u //退出iscsi Loggingout of session [sid: 1, target: iqn.2013-11.com.example:ty.target1,portal: 192.168.1.10,3260] Logout of[sid: 1, target: iqn.2013-11.com.example:ty.target1, portal:192.168.1.10,3260] successful.
#iscsiadm-m node -o delete //删除