一、RHCS集群的组成与结构
RHCS集群组成:
RHCS是一个集群工具的集合,主要有下面几大部分组成:
1. 集群架构管理器
这是RHCS集群的一个基础套件,提供一个集群的基本功能,使各个节点组成集群一起工作,具体包括分布式集群管理器(CMAN)、成员关系管理、锁管理(DLM)、配置文件管理和栅设备(Fence)。
2. 高可用服务管理器
提供节点服务监控和服务故障转移功能。当一个节点服务出现故障时,将服务转移到另一个健康节点。
3. 集群配置管理工具
RHCS可以通过Luci来配置和管理RHCS集群。Luci是一个基于Web的集群配置方式,通过Luci可以轻松的搭建一个功能强大的集群系统。
4. LVS
LVS是一个开源的负载均衡软件,利用LVS可以将客户端的请求根据指定的负载均衡策略和算法合理的分配到各个服务节点,实时地、动态地、智能地分担负载。
5. GFS (Gllobal FileSystem)
GFS是Red Hat开发的一套集群文件系统,GFS文件系统允许多个服务同时读写一个磁盘分区,通过GFS可以实现数据的集中管理,免去了数据同步和复制的麻烦,但GFS并不能孤立的存在,安装GFS需要RHCS的底层组件支持。
6. CLVM (ClusterLogical Volume Manager)
集群逻辑卷管理,是LVM的扩展,这种扩展允许集群中的机器使用LVM来管理共享存储。
7. iSCSI
即Internet SCSI,是IETF制定的一项标准,用于将SCSI数据块映射为以太网数据包。它是一种基于IP Storage理论的存储技术。RHCS可以通过iSCSI技术来导出和分配共享存储的使用。
8. GNBD (Global NetworkBlock Device)
全局网络模块,是GFS的一个补充组件,用于RHCS分配和管理共享存储,现在GNBD已经停止了开发,使用GNBD的人越来越少了。
RHCS集群结构:
RHCS集群整体上分为3大部分:高可用性、负载均衡和存储集群。
典型集群框图:
Cluster node、Failover Domain、Service
整个结构分为三层,最上层为高可用的LVS负载均衡层;中间一层是Real Server层,也就是集群服务节点部分;最下边为共享存储层,主要用于为GFS文件系统提供共享存储空间,可以通过GNBD实现,也可以通过iSCSI技术实现。
高可用性附加组建硬件
网页服务器集群
二、使用环境的初始化
各个node要有 IP、 Hostname(主机名)、 /etc/hosts(添加解析,集群中每个节点都得有)
需要关闭 NetworkManager、Iptables、Selinux
配置yum源
实验配置cam,rgmanger.ricci.lucci.gfs2-utils
实验环境redhat6.6系统
1)需要安装的软件
在配置中ricci在所有的节点安装
lucci只在一个节点安装,通过web界面配置,只要安装了ricci的为其在添加节点的时候初始化和安装启动群架的软件
HA:
Node1 Node1.contoso.com 10.35.46.195
Node1 Node2.contoso.com 10.35.46.185
Node1 Node3.contoso.com 10.35.46.175
node4.contoso.com 10.35.46.165 管理主机和iscsi的服务端
RHCS:
Cman.rgmanager,luci .ricci
这4个软件只需要安装2个其他的通过luci通过web添加节点时初始化ricc自己安装
luci 在一个节点上安装就可以了,可以用通过其他节点安装ricci进行相同的配置
ricci所有的节点都必须安装
三、开始安装配置
node4:管理主机
node1.node2.node3:集群节点
配置每一个群集节点主机名
[root@node1 ~]# cat /etc/hosts
10.35.46.195 node1.contoso.com node1
10.35.46.185 node2.contoso.com node2
10.35.46.175 node3.contoso.com node3
集群每一个节点上:
#yum install ricci -y
#passwd ricci #设置ricci密码 添加节点使用的密码就是这个密码
#/etc/init.d/ricci start #启动ricci端口为11111
#chkconfig ricci on
管理主机上:
[root@ty1 cluster]#yum install luci -y #安装luci,使用web方式配置集群
[root@ty1 cluster]# /etc/init.d/luci start
Start luci... [ OK ]
Point your web browser to https://node1.contoso.com:8084 (or equivalent) to access luci
https://node1.contoso.com :8084 登录密码使用系统管理root用户与其密码
[root@node1 ~]# clustat 查看群集节点是否运行正常
Cluster Status for webtest@ Sat May 14 21:23:57 2016 群集名称
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1.contoso.com 1 Online, Local,
node2.contoso.com 2 Online,
node3.contoso.com 3 Online,
四、添加fence设备
“Fence技术”核心在于解决高可用集群在出现极端问题情况下的运行保障问题,在高可用集群的运行过程中,有时候会检测到某个节点功能不正常,比如在两台高可用服务器间的心跳线突然出现故障,这时一般高可用集群技术将由于链接故障而导致系统错判服务器宕机从而导致资源的抢夺,为解决这一问题就必须通过集群主动判断及检测发现问题并将其从集群中删除以保证集群的稳定运行,Fence技术的应用可以有效的实现这一功能
添加一个fence,这儿的fence可能我添加的跟大家实际中演示的可能不太一样所有,这儿就不做演示
群集配置完成了
五、在node4上配置iscsi服务
下面的配置都是在node4上使用的
配置iscsi服务端
实现准备好一块磁盘 添加了一块20G /dev/sdb
[root@node4 ~]# yum install scsi-target-utils –y
[root@node1 ~]# /etc/init.d/tgtd start
[root@node1 ~]# cat /etc/tgt/targets.conf
<target iqn.2016-05.com.contoso:disk1>
backing-store /dev/sdb
initiator-address 10.35.46.0/24 绑定可以挂在的ip地址
</target>
在3个节点上安装iscsi的client
[root@node1 ~]# yum install iscsi-initiator-utils -y ; ssh node2 'yum install iscsi-initiator-utils -y'; ssh node3 'yum install iscsi-initiator-utils -y' 安装iscsiclient
发现iscsi
[root@node1 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 10.35.46.165 --discover ; ssh node2 'iscsiadm --mode discoverydb --type sendtargets --portal 10.35.46.165 --discover'; ssh node3 'iscsiadm --mode discoverydb --type sendtargets --portal 10.35.46.165 --discover'
10.35.46.195:3260,1 iqn.2016-05.com.contoso:disk1
10.35.46.195:3260,1 iqn.2016-05.com.contoso:disk1
10.35.46.195:3260,1 iqn.2016-05.com.contoso:disk1
登录iscsi
[root@node1 ~]# iscsiadm --mode node --targetname iqn.2016-05.com.contoso:disk1 --portal 10.35.46.165:3260 --login ; ssh node2 'iscsiadm --mode node --targetname iqn.2016-05.com.contoso:disk1 --portal 10.35.46.165:3260 --login'; ssh node3 'iscsiadm --mode node --targetname iqn.2016-05.com.contoso:disk1 --portal 10.35.46.165:3260 --login'
格式化磁盘一个分区使1个分区10G,
[root@node3 ~]# fdisk /dev/sdb
[root@node1 ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 21.5 GB, 21467948544 bytes
64 heads, 32 sectors/track, 20473 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x27cd42a2
Device Boot Start End Blocks Id System
/dev/sdb1 1 10241 10486768 83 Linux
[root@node1 ~]# partx /dev/sdb 格式化完了记得 重读一下分区信息
三块磁盘盘都都能看到
[root@node4 ~]# fdisk -l | grep /dev/sdb ; ssh node2 'fdisk -l | grep /dev/sdb '; ssh node3 'fdisk -l | grep /dev/sdb'
Disk /dev/sdb: 21.5 GB, 21467948544 bytes
/dev/sdb1 1 10241 10486768 83 Linux
Disk /dev/sdb: 21.5 GB, 21467948544 bytes
/dev/sdb1 1 10241 10486768 83 Linux
Disk /dev/sdb: 21.5 GB, 21467948544 bytes
/dev/sdb1 1 10241 10486768 83 Linux
六、配置gfs2
所有节点都要安装gfs2
[root@node1 ~]# yum install gfs2-utils -y; ssh node2 'yum install gfs2-utils -y '; ssh node3 'yum install gfs2-utils -y '
将刚刚上面格式化iscsi一块磁盘,格式化为gfs2的格式
[root@node2 ~]# mkfs.gfs2 –h 获取帮助
[root@node2 ~]# rpm -ql gfs2-utils 查看生成了那些命令
mkfs.gfs2
-b 指定块大小
-j: 指定日志区域的个数,有几个就能够被几个几点挂载
-J: 指定日志区域的大小默认为128MB
-p:{lock_dlm|lock_nolock}: 锁,不锁
-t <name>:锁表的名称,格式为clustername:locktablename clustername为当前所在的集群的名称,locktablename要在当前集群唯一
-D显示详细信息
[root@node1 ~]# mkfs.gfs2 -j 3 -p lock_dlm –twebtest:webtest /dev/sdb1
This will destroy any data on /dev/sdb1.
It appears to contain: ACB archive data
Are you sure you want to proceed? [y/n] y
Device: /dev/sdb1
Blocksize: 4096
Device Size 10.00 GB (2621692 blocks)
Filesystem Size: 10.00 GB (2621689 blocks)
Journals: 3
Resource Groups: 41
Locking Protocol: "lock_dlm"
Lock Table: "RHCS:RHCS"
UUID: fb629cb6-bb19-47af-ff90-b45bcc604a5a
[root@node1 ~]# mount /dev/sdc1 /mnt 挂在不用指定文件系统默认会指定
[root@node1 ~]# mont
-bash: mont: command not found
[root@node1 ~]# mount
/dev/mapper/vg_node1-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
none on /sys/kernel/config type configfs (rw)
/dev/sdc1 on /mnt type gfs2 (rw,seclabel,relatime,hostdata=jid=0)
[root@node1 ~]# cd /mnt
[root@node1 mnt]# touch 1 创建了一个文件
[root@node1 mnt]# ls
1
[root@node2 ~]# mount -t gfs2 /dev/sdc1 /mnt 让node2也挂在
[root@node2 ~]# cd /mnt/
[root@node2 mnt]# ls 文件同步了
1
[root@node2 mnt]# touch 2 在node2上创建一个文件
[root@node2 mnt]# ls
1 2
[root@node1 mnt]# ls 在 在node1上查看数据也同步了
12
群集文件的好处,一旦发现数据立即同步,而且一旦一个节点在写的时候会发出锁通知其他节点并锁定文件,等这个节点完成数据后,其他节点才能后写入数据
/usr/sbin/gfs2_tool –h
[root@node1 mnt]# gfs2_tool journals /mnt查看信息
journal2 - 128MB
journal1 - 128MB
journal0 - 128MB
[root@node3 cluster]# rpm -ql gfs2-utils
gfs2_jadd 日志区域不过在增加几个,就是可以在同时挂在的节点有几个
[root@node3 cluster]# gfs2_jadd -j 1 /dev/sdb2