RHCS 集群详解及 部署(ricci、luci、fence、apache、scsi、gfs、DLM)

一、相关概念

1、 什么是RHCS

RHCS是Red Hat Cluster Suite的缩写,也就是红帽集群套件,RHCS是一个能够提供高可用性(理解高可用)、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合,它将集群系统中三大集群架构融合一体,可以给web应用、数据库应用等提供安全、稳定的运行环境。

更确切的说,RHCS是一个功能完备的集群应用解决方案,它从应用的前端访问到后端的数据存储都提供了一个行之有效的集群架构实现,通过RHCS提供的这种解决方案,不但能保证前端应用持久、稳定的提供服务,同时也保证了后端数据存储的安全。
RHCS提供了集群系统中三种集群构架,分别是高可用性集群负载均衡集群存储集群

注意: RHCS目前只支持Rhel 6,在Rhel 7中为pacemaker,因此本文的实验均在rhel6 下进行。

2、RHCS提供的三个核心功能

高可用集群是RHCS的核心功能。当应用程序出现故障,或者系统硬件、网络出现故障时,应用可以通过RHCS提供的高可用管理组件自动、快速从一个节点切换到另一个节点,节点故障转移功能对客户端来说是透明的,从而保证应用持续、不间断的对外提供服务,这就是RHCS高可用集群实现的功能。

RHCS通过LVS(Linux Virtual Server)来提供 负载均衡集群,而LVS是一个开源的、功能强大的基于IP的负载均衡技术,LVS由负载调度器和服务访问节点组成,通过LVS的负载调度功能,可以将客户端请求平均的分配到各个服务节点,同时,还可以定义多种负载分配策略,当一个请求进来时,集群系统根据调度算法来判断应该将请求分配到哪个服务节点,然后,由分配到的节点响应客户端请求,同时,LVS还提供了服务节点故障转移功能,也就是当某个服务节点不能提供服务时,LVS会自动屏蔽这个故障节点,接着将失败节点从集群中剔除,同时将新来此节点的请求平滑的转移到其它正常节点上来;而当此故障节点恢复正常后,LVS又会自动将此节点加入到集群中去。而这一系列切换动作,对用户来说,都是透明的,通过故障转移功能,保证了服务的不间断、稳定运行。

RHCS通过GFS文件系统来提供存储集群功能,GFS是Global File System的缩写,它允许多个服务同时去读写一个单一的共享文件系统,存储集群通过将共享数据放到一个共享文件系统中从而消除了在应用程序间同步数据的麻烦,GFS是一个分布式文件系统,它通过锁管理机制,来协调和管理多个服务节点对同一个文件系统的读写操作。

3、RHCS集群的组成

RHCS是一个集群工具的集合,主要有下面几大部分组成:

(1)集群构架管理器 :这是RHCS集群的一个基础套件,提供一个集群的基本功能,使各个节点组成集群在一起工作,具体包含分布式集群管理器(CMAN)、成员关系管理、锁管理(DLM)、配置文件管理(CCS)、栅设备(FENCE)。

(2)高可用服务管理器 提供节点服务监控和服务故障转移功能,当一个节点服务出现故障时,将服务转移到另一个健康节点。

(3)集群配置管理工具 RHCS最新版本通过LUCI来配置和管理RHCS集群,LUCI是一个基于web的集群配置方式,通过luci可以轻松的搭建一个功能强大的集群系统。

(4)Linux Virtual Server LVS是一个开源的负载均衡软件,利用LVS可以将客户端的请求根据指定的负载策略和算法合理的分配到各个服务节点,实现动态、智能的负载分担。

RHCS除了上面的几个核心构成,还可以通过下面一些组件来补充RHCS集群功能:

(5)Red Hat GFS (Global File System) GFS是Redhat公司开发的一款集群文件系统,目前的最新版本是GFS2,GFS文件系统允许多个服务同时读写一个磁盘分区,通过GFS可以实现数据的集中管理,免去了数据同步和拷贝的麻烦,但GFS并不能孤立的存在,安装GFS需要RHCS的底层组件支持。

(6)Cluster Logical Volume Manager Cluster逻辑卷管理,即CLVM,是LVM的扩展,这种扩展允许cluster中的机器使用LVM来管理共享存储。

(7)iSCSI iSCSI是一种在Internet协议上,特别是以太网上进行数据块传输的标准,它是一种基于IP Storage理论的新型存储技术,RHCS可以通过ISCSI技术来导出和分配共享存储的使用。

(8)Global Network Block Device 全局网络模块,简称GNBD,是GFS的一个补充组件,用于RHCS分配和管理共享存储,GNBD分为客户端和服务端,在服务端GNBD允许导出多个块设备或者GNBD文件,而GNBD客户端通过导入这些导出的块设备或者文件,就可以把它们当作本地块设备使用。由于现在GNBD已经停止了开发,所以使用GNBD的越来越少。

4、 RHCS集群结构

RHCS集群从整体上分为三大部分,负载均衡集群、 高可用性集群、存储集群:
在这里插入图片描述

上图是典型的RHCS集群拓扑结构:整个拓扑结构分为三个层面:
最上层是LVS负载均衡层,中间一层是Real Server层,就是服务节点部分,最后一层是共享存储层,主要用于给GFS文件系统提供共享存储空间。

5、RHCS集群运行原理及功能介绍

1、 分布式集群管理器(CMAN)

Cluster Manager,简称CMAN,是一个分布式集群管理工具,它运行在集群的各个节点上,为RHCS提供集群管理任务。
CMAN用于管理集群成员、消息和通知。它通过监控每个节点的运行状态来了解节点成员之间的关系,当集群中某个节点出现故障,节点成员关系将发生改变,CMAN及时将这种改变通知底层,进而做出相应的调整。

2、锁管理(DLM)

Distributed Lock Manager,简称DLM,表示一个分布式锁管理器,它是RHCS的一个底层基础构件,同时也为集群提供了一个公用的锁运行机制,在RHCS集群系统中,DLM运行在集群的每个节点上,GFS通过锁管理器的锁机制来同步访问文件系统元数据。CLVM通过锁管理器来同步更新数据到LVM卷和卷组。
DLM不需要设定锁管理服务器,它采用对等的锁管理方式,大大的提高了处理性能。同时,DLM避免了当单个节点失败需要整体恢复的性能瓶颈,另外,DLM的请求都是本地的,不需要网络请求,因而请求会立即生效。最后,DLM通过分层机制,可以实现多个锁空间的并行锁模式。

3、配置文件管理(CCS)

Cluster Configuration System,简称CCS,主要用于集群配置文件管理和配置文件在节点之间的同步。CCS运行在集群的每个节点上,监控每个集群节点上的单一配置文件/etc/cluster/cluster.conf的状态,当这个文件发生任何变化时,都将此变化更新到集群中的每个节点,时刻保持每个节点的配置文件同步。例如,管理员在节点A上更新了集群配置文件,CCS发现A节点的配置文件发生变化后,马上将此变化传播到其它节点上去。
rhcs的配置文件是cluster.conf,它是一个xml文件,具体包含集群名称、集群节点信息、集群资源和服务信息、fence设备等,这个会在后面讲述。

4、栅设备(FENCE)

FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情况而造成的“脑裂”现象,FENCE设备的出现,就是为了解决类似这些问题,Fence设备主要就是通过服务器或存储本身的硬件管理接口,或者外部电源管理设备,来对服务器或存储直接发出硬件管理指令,将服务器重启或关机,或者与网络断开连接。

FENCE的工作原理是:当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资源进行了释放,保证了资源和服务始终运行在一个节点上。
RHCS的FENCE设备可以分为两种:内部FENCE和外部FENCE,常用的内部FENCE有IBM RSAII卡,HP的iLO卡,还有IPMI的设备等,外部fence设备有UPS、SAN SWITCH、NETWORK SWITCH等

5、高可用服务管理器

高可用管理主要用来监督、启动和停止集群的应用、服务和资源。它提供了一种对集群服务的管理能力,当一个节点的服务失败时,高可用性集群服务管理进程可以将服务从这个失败节点转移到其它健康节点上来,并且这种服务转移能力是自动、透明的。
RHCS通过rgmanager来管理集群服务,rgmanager运行在每个集群节点上,在服务器上对应的进程为clurgmgrd。
在一个RHCS集群中,高可用包含集群服务和集群资源两个方面,集群服务其实就是应用服务,例如apache、mysql等,集群资源有很多种,例如一个IP地址、一个运行脚本、ext3/GFS文件系统等。
在RHCS集群中,高可用是和一个失败转移域结合在一起的,所谓失败转移域是一个运行特定服务的集群节点的集合。在失败转移域中,可以给每个节点设置相应的优先级,通过优先级的高低来决定节点失败时服务转移的先后顺序,如果没有给节点指定优先级,那么集群高可用服务将在任意节点间转移。因此,通过创建失败转移域不但可以设定服务在节点间转移的顺序,而且可以限制某个服务仅在失败转移域指定的节点内进行切换。

6、集群配置管理工具

RHCS提供了多种集群配置和管理工具,常用的有基于GUI的system-config-cluster、Conga等,也提供了基于命令行的管理工具。
system-config-cluster是一个用于创建集群和配置集群节点的图形化管理工具,它有集群节点配置和集群管理两个部分组成,分别用于创建集群节点配置文件和维护节点运行状态。一般用在RHCS早期的版本中。

Conga是一种新的基于网络的集群配置工具,与system-config-cluster不同的是,Conga是通过web方式来配置和管理集群节点的。Conga有两部分组成,分别是luciricci,luci安装在一台中立的计算机上,用于配置和管理集群,ricci安装在每个集群节点上,Luci通过ricci和集群中的每个节点进行通信。
RHCS也提供了一些功能强大的集群命令行管理工具,常用的有clustat、cman_tool、ccs_tool、fence_tool、clusvcadm等,这些命令的用法将在下面讲述。

7、 Redhat GFS

GFS是RHCS为集群系统提供的一个存储解决方案,它允许集群多个节点在块级别上共享存储,每个节点通过共享一个存储空间,保证了访问数据的一致性,更切实的说,GFS是RHCS提供的一个集群文件系统,多个节点同时挂载一个文件系统分区,而文件系统数据不受破坏,这是单一的文件系统,例如EXT3、EXT2所不能做到的。
为了实现多个节点对于一个文件系统同时读写操作,GFS使用锁管理器来管理I/O操作,当一个写进程操作一个文件时,这个文件就被锁定,此时不允许其它进程进行读写操作,直到这个写进程正常完成才释放锁,只有当锁被释放后,其它读写进程才能对这个文件进行操作,另外,当一个节点在GFS文件系统上修改数据后,这种修改操作会通过RHCS底层通信机制立即在其它节点上可见。
在搭建RHCS集群时,GFS一般作为共享存储,运行在每个节点上,并且可以通过RHCS管理工具对GFS进行配置和管理。这些需要说明的是RHCS和GFS之间的关系,一般初学者很容易混淆这个概念:运行RHCS,GFS不是必须的,只有在需要共享存储时,才需要GFS支持,而搭建GFS集群文件系统,必须要有RHCS的底层支持,所以安装GFS文件系统的节点,必须安装RHCS组件。

实验一、Ricci + luci 集群创建

1.实验准备
本次实验需要两台虚拟机:
server1: ip 172.25.63.1
server2: ip 172.25.63.2
物理机: ip 172.25.63.250 yum源
首先需要配置rhel6的yum(物理机yum源需要先配置好):
在server1:

[root@server1 ~]# vim /etc/yum.repos.d/rhel-source.repo 
[root@server1 ~]# cat /etc/yum.repos.d/rhel-source.repo 
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.63.250/rhel6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.63.250/rhel6.5/HighAvailability
gpgcheck=0

[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.63.250/rhel6.5/LoadBalancer
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.63.250/rhel6.5/ResilientStorage
gpgcheck=0

[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.63.250/rhel6.5/ScalableFileSystem
gpgcheck=0

测试yum源:

[root@server1 ~]# yum clean all 
Loaded plugins: product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Cleaning repos: HighAvailability LoadBalancer ResilientStorage
              : ScalableFileSystem rhel-source
Cleaning up Everything
[root@server1 ~]# yum repolist
Loaded plugins: product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
HighAvailability                                         | 3.9 kB     00:00     
HighAvailability/primary_db                              |  43 kB     00:00     
LoadBalancer                                             | 3.9 kB     00:00     
LoadBalancer/primary_db                                  | 7.0 kB     00:00     
ResilientStorage                                         | 3.9 kB     00:00     
ResilientStorage/primary_db                              |  47 kB     00:00     
ScalableFileSystem                                       | 3.9 kB     00:00     
ScalableFileSystem/primary_db                            | 6.8 kB     00:00     
rhel-source                                              | 3.9 kB     00:00     
rhel-source/primary_db                                   | 3.1 MB     00:00     
repo id              repo name                                            status
HighAvailability     HighAvailability                                        56
LoadBalancer         LoadBalancer                                             4
ResilientStorage     ResilientStorage                                        62
ScalableFileSystem   ScalableFileSystem                                       7
rhel-source          Red Hat Enterprise Linux 6Server - x86_64 - Source   3,690
repolist: 3,819

说明配置yum配置成功
将yum配置文件给server2复制一份:

scp /etc/yum.repos.d/rhel-source.repo root@172.25.63.2:/etc/yum.repos.d/

同样需要在每台虚拟机中添加域名解析,否则构建集群速度会比较慢:

[root@server1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.63.1 server1
172.25.63.2 server2
172.25.63.3 server3
172.25.63.4 server4
172.25.63.5 server5
172.25.63.6 server6
172.25.63.6 server6

2.安装软件

在server1:

yum install ricci luci -y

在server2:

yum install ricci -y

安装完成后 server1 和 server2 都会添加一个用户ricci,需要为这个用户修改密码(以server1为例,server2也是同样的操作):

[root@server1 ~]# passwd ricci
Changing password for user ricci.
New password: 						#此处修改密码为redhat
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password: 				#在输入一遍密码
passwd: all authentication tokens updated successfully.

安装软件后启动软件并使其开机自启:

server1:

/etc/init.d/ricci start
/etc/init.d/luci start
chkconfig ricci on
chkconfig luci on


server2:

/etc/init.d/ricci start
chkconfig ricci on

安装好后就可以使用浏览器进行配置了

3.luci配置

在物理机浏览器中访问:https://172.25.63.1:8084
第一次打开时需要添加证书
在这里插入图片描述创建集群:
在这里插入图片描述在这里插入图片描述等待创建完成后:
在这里插入图片描述
以上网页的操作会保存在server1和server2中的/etc/cluster/cluster.conf文件中

4.查看集群状态

server1:

[root@server1 ~]# clustat
Cluster Status for redhat_cl @ Sun Feb 23 21:57:09 2020
Member Status: Quorate

 Member Name                             ID   Status
 ------ ----                             ---- ------
 server1                                     1 Online, Local
 server2                                     2 Online

server2:

[root@server2 ~]# clustat
Cluster Status for redhat_cl @ Sun Feb 23 21:57:42 2020
Member Status: Quorate

 Member Name                             ID   Status
 ------ ----                             ---- ------
 server1                                     1 Online
 server2                                     2 Online, Local

实验二、ricci + luci + fence 集群实现

1.在物理机中安装配置fence

yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 -y

配置fence(只需要修改设备,其他的均为默认):

[root@foundation63 ~]# fence_virtd -c
Module search path [/usr/lib64/fence-virt]: 

Available backends:
    libvirt 0.1
Available listeners:
    multicast 1.2

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 all interfaces.
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]: 												#此处设备若不是br0需要改称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]: 

Backend modules are responsible for routing requests to
the appropriate hypervisor or management layer.

Backend module [libvirt]: 

Configuration complete.

=== Begin Configuration ===
fence_virtd {
	listener = "multicast";
	backend = "libvirt";
	module_path = "/usr/lib64/fence-virt";
}

listeners {
	multicast {
		key_file = "/etc/cluster/fence_xvm.key";
		address = "225.0.0.12";
		interface = "br0";
		family = "ipv4";
		port = "1229";
	}

}

backends {
	libvirt {
		uri = "qemu:///system";
	}

}

=== End Configuration ===
Replace /etc/fence_virt.conf with the above [y/N]? y		#此处需要输入y以保存设置

配置好后需要生成key:

mkdir /etc/cluster
cd /etc/cluster/
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1

将key发送给两个集群节点server1 和server 2:

[root@foundation63 cluster]# scp fence_xvm.key root@172.25.63.1:/etc/cluster/
root@172.25.63.1's password: 
fence_xvm.key                                 100%  128     0.1KB/s   00:00    
[root@foundation63 cluster]# scp fence_xvm.key root@172.25.63.2:/etc/cluster/
root@172.25.63.2's password: 
fence_xvm.key                                 100%  128     0.1KB/s   00:00    

启动fence服务:

[root@foundation63 cluster]# systemctl start fence_virtd.service

2.luci添加fence设备
在这里插入图片描述
3.将fence设备添加到结点上:

首先添加server1:
在这里插入图片描述在这里插入图片描述在这里插入图片描述server2的操作除了方法名为vmfence2,以及mac地址外 其他均相同。

在物理机重启fence服务以测试添加是否成功:

[root@foundation63 cluster]# systemctl restart fence_virtd.service				#能够重启表明添加成功

4.测试

在server1使用fence使server2重启:

[root@server1 ~]# fence_node server2
fence server2 success

发现server2重启:
在这里插入图片描述
同样也可以在server2使server1重启,在此不做演示。

实验三、ricci + luci + fence + apache 实现高可用

1.添加失败回迁的优先级
在这里插入图片描述2.安装apache
在 server1 和 server2 安装httpd并编写测试页:

server1:

yum install httpd -y
vim /var/www/html/index.html
写入:server1

server1:

yum install httpd -y
vim /var/www/html/index.html
写入:server2

3.添加资源

首先添加 ip:
在这里插入图片描述再添加脚本:

在这里插入图片描述4.设置服务的组
在这里插入图片描述添加资源时,先添加ip后添加httpd:
在这里插入图片描述
保存后集群即设置成功
在这里插入图片描述

5.测试
在server1:
在这里插入图片描述在这里插入图片描述在客户端:

[root@foundation63 ~]# curl 172.25.63.100 
server1						#表明server1在提供服务
[root@foundation63 ~]# curl 172.25.63.100 
server1
[root@foundation63 ~]# curl 172.25.63.100 
server1

当server1 宕机时:

[root@server1 ~]# echo c >/proc/sysrq-trigger			#模拟宕机

在server2:
在这里插入图片描述此时在客户端:
在这里插入图片描述由于在错误域设置的不会回迁,因此当server1重新上线时不会回迁:
在这里插入图片描述

实验四、ricci + luci + fence + apache + scsi + lvm 存储共享集群

1.实验准备

此实验还需要一台虚拟机:

server3 : ip:172.25.63.3 作用:存储服务器
并且需要为其再添加一块硬盘:
在这里插入图片描述
2.配置scsi服务

在server3:

[root@server3 ~]# yum install scsi-* -y
[root@server3 ~]# yum install parted-2.1-21.el6.x86_64 -y
[root@server3 ~]# partprobe 

在server1 和 server2 :

yum install iscsi-* -y

在server3:

[root@server3 ~]# vim /etc/tgt/targets.conf 
写入:
 38 <target iqn.2020-02.com.example:server.target1>
 39     backing-store /dev/vda
 40 </target>


[root@server3 ~]# /etc/init.d/tgtd start					#启动服务
Starting SCSI target daemon:                               [  OK  ]
[root@server3 ~]# tgt-admin -s
......

            Prevent removal: No
            Readonly: No
            Backing store type: rdwr
            Backing store path: /dev/vda			#表示配置正确
            Backing store flags: 
    Account information:
    ACL information:
        ALL
[root@server3 ~]# ps -ax
......
 1008 ?        S      0:00 [virtio-blk]
 1040 ?        S<     0:00 /sbin/udevd -d
 1057 ?        Ssl    0:00 tgtd				#有两个进程表示配置正确
 1060 ?        S      0:00 tgtd
 1093 pts/0    R+     0:00 ps -ax

之后在server1 和server2上(以server1为例,server2和server1操作相同):

[root@server1 ~]# iscsiadm -m discovery -t st -p 172.25.63.3
Starting iscsid:                                           [  OK  ]
172.25.63.3:3260,1 iqn.2020-02.com.example:server.target1
[root@server1 ~]# iscsiadm -m node -l
Logging in to [iface: default, target: iqn.2020-02.com.example:server.target1, portal: 172.25.63.3,3260] (multiple)
Login to [iface: default, target: iqn.2020-02.com.example:server.target1, portal: 172.25.63.3,3260] successful.
[root@server1 ~]# partprobe
Warning: ......
[root@server1 ~]# fdisk -l

.....

Disk /dev/sdb: 21.5 GB, 21474836480 bytes				#配置成功
64 heads, 32 sectors/track, 20480 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: 0x00000000

3.硬盘分区

在server1 或者 server 2(在一台虚拟机上做即可)上:

[root@server1 ~]# fdisk -cu /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x6b388308.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n							#新建分区
Command action
   e   extended
   p   primary partition (1-4)
p												#主分区
Partition number (1-4): 1
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): 
Using default value 41943039

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e			#设置为lvm
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes
64 heads, 32 sectors/track, 20480 cylinders, total 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6b388308

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41943039    20970496   8e  Linux LVM

Command (m for help): wq					#保存
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@server1 ~]# partprobe 				#同步分区表,两个虚拟机都需要做
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).  As a result, it may not reflect all of your changes until after reboot.

4.创建lvm
在server1:

[root@server1 ~]# pvcreate /dev/sdb1			#创建pv
  dev_is_mpath: failed to get device for 8:17
  Physical volume "/dev/sdb1" successfully created
[root@server1 ~]# vgcreate dangdang /dev/sdb1			#创建vg
  Clustered volume group "dangdang" successfully created
[root@server1 ~]# pvs
  PV         VG       Fmt  Attr PSize  PFree 
  /dev/sda2  VolGroup lvm2 a--   9.51g     0 
  /dev/sdb1  dangdang lvm2 a--  20.00g 20.00g

[root@server1 ~]# lvcreate -L 4G -n dd dangdang			#创建lvm
  Logical volume "dd" created
[root@server1 ~]# lvs	
  LV      VG       Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_root VolGroup -wi-ao----   8.54g                                             
  lv_swap VolGroup -wi-ao---- 992.00m                                             
  dd      dangdang -wi-a-----   4.00g                                             

在server2:

[root@server2 ~]# lvs
  LV      VG       Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_root VolGroup -wi-ao----   8.54g                                             
  lv_swap VolGroup -wi-ao---- 992.00m                                             
  dd      dangdang -wi-a-----   4.00g   			#说明配置成功                                          

5.配置文件系统并挂载

在server1:

[root@server1 ~]# mkfs.ext4 /dev/dangdang/dd 

挂载:

[root@server1 ~]# mount /dev/dangdang/dd /mnt/
[root@server1 ~]# df
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root   8813300 1083348   7282260  13% /
tmpfs                           251136   25656    225480  11% /dev/shm
/dev/sda1                       495844   33462    436782   8% /boot
/dev/mapper/dangdang-dd        4128448  139256   3779480   4% /mnt			#成功挂载

ext4是本地文件系统,不支持同时写入,当server1 和server2 都挂载上且都写入时会报错。
因此,需要设置两个虚拟机谁拿到 vip 谁就把/dev/dangdang/dd挂载到/var/www/html/,用户就可以看到存储服务器server3通过apache服务器(server1或server2)发布的内容

在server1挂载设备并编辑测试界面,目的是把测试页面写入设备/dev/dangdang/dd

[root@server1 ~]# mount /dev/dangdang/dd /mnt/
[root@server1 ~]# cd /mnt/
[root@server1 mnt]# vim index.html
[root@server1 mnt]# cat index.html 
server3 iscsi:index.html
[root@server1 mnt]# cd
[root@server1 ~]# umount /mnt/

6.配置luci

此步需要把之前实验的服务停止:

[root@server2 ~]# clusvcadm -d apache
Local machine disabling service:apache...Success
[root@server2 ~]# clustat
Cluster Status for redhat_cl @ Mon Feb 24 00:43:22 2020
Member Status: Quorate

 Member Name                             ID   Status
 ------ ----                             ---- ------
 server1                                     1 Online, rgmanager
 server2                                     2 Online, Local, rgmanager

 Service Name                   Owner (Last)                   State         
 ------- ----                   ----- ------                   -----         
 service:apache                 (server1)                      disabled   			#表明已经停止

添加资源:
在这里插入图片描述整合资源:
顺序是: IP Address Filesystem Script

在这里插入图片描述
在这里插入图片描述在这里插入图片描述之后点击启动按钮即可启动服务

7.测试

在物理机中:

[root@foundation63 ~]# curl 172.25.63.100 
server3 iscsi:index.html					#表明配置成功
[root@foundation63 ~]# curl 172.25.63.100 
server3 iscsi:index.html

此时集群服务在servre1上,测试将其迁移到server2上:

[root@server1 ~]# clusvcadm -r apache -m server2				#迁移
Trying to relocate service:apache to server2...Success
service:apache is now running on server2
[root@server1 ~]# clustat
Cluster Status for redhat_cl @ Mon Feb 24 00:59:25 2020
Member Status: Quorate

 Member Name                             ID   Status
 ------ ----                             ---- ------
 server1                                     1 Online, Local, rgmanager
 server2                                     2 Online, rgmanager

 Service Name                   Owner (Last)                   State         
 ------- ----                   ----- ------                   -----         
 service:apache                 server2                        started       	#表明迁移成功

此时在server2上:

[root@server2 ~]# df
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root   8813300 1026124   7339484  13% /
tmpfs                           251136   25656    225480  11% /dev/shm
/dev/sda1                       495844   33462    436782   8% /boot
/dev/mapper/dangdang-dd        4128448  139260   3779476   4% /var/www/html				#成功挂载
[root@server2 ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:fa:30:e7 brd ff:ff:ff:ff:ff:ff
    inet 172.25.63.2/24 brd 172.25.63.255 scope global eth0
    inet 172.25.63.100/24 scope global secondary eth0				#得到vip
    inet6 fe80::5054:ff:fefa:30e7/64 scope link 
       valid_lft forever preferred_lft forever

此时对客户端的服务丝毫不受影响,上述测试表明将服务迁移到server2 后,server 2 得到了 vip,将/dev/dangdang/dd设备挂载到/var/www/html中,因此设备中的测试页面可以在客户端看到。

[root@foundation63 ~]# curl 172.25.63.100 
server3 iscsi:index.html
[root@foundation63 ~]# curl 172.25.63.100 
server3 iscsi:index.html

实验五、ricci + luci + Apache + GFS +DLM

在上个实验中,ext4本地文件系统不支持同时读写,因此Rhel还支持了GFS文件系统以支持同时读写

1.格式化设备

首先停止服务并且保证server1 和server 2 都没有挂载:

[root@server2 ~]# clusvcadm -d apache
Local machine disabling service:apache...Success				#停止服务

格式化设备:

[root@server1 ~]# mkfs.gfs2 -p lock_dlm -j 2 -t redhat_cl:mygfs2 /dev/dangdang/dd 
This will destroy any data on /dev/dangdang/dd.
It appears to contain: symbolic link to `../dm-2'

Are you sure you want to proceed? [y/n] y

Device:                    /dev/dangdang/dd
Blocksize:                 4096
Device Size                4.00 GB (1048576 blocks)
Filesystem Size:           4.00 GB (1048575 blocks)
Journals:                  2
Resource Groups:           16
Locking Protocol:          "lock_dlm"
Lock Table:                "redhat_cl:mygfs2"
UUID:                      10713819-87fc-b666-7530-f5c3d90fe6a0

mkfs.gfs2为gfs2文件系统创建工具,其一般常用的选项有:

-b BlockSize:指定文件系统块大小,最小为512,默认为4096;

-J MegaBytes:指定gfs2日志区域大小,默认为128MB,最小值为8MB;

-j Number:指定创建gfs2文件系统时所创建的日志区域个数,一般需要为每个挂载的客户端指定一个日志区域;有几个node节点就要指定几个

-p LockProtoName:所使用的锁协议名称,通常为lock_dlm或lock_nolock之一;

-t LockTableName:锁表名称,一般来说一个集群文件系统需一个锁表名以便让集群节点在施加文件锁时得悉其所关联到的集群文件系统,锁表名称为
clustername:fsname,其中的clustername必须跟集群配置文件中的集群名称保持一致,因此,也仅有此集群内的节点可访问此集群
文件系统;此外,同一个集群内,每个文件系统的名称必须惟一

格式化完成后即可实现,server1 和 server 2 同时挂载的情况下同时写入。

注意:gfs文件系统依赖于集群,但是集群可以不需要gfs

2.写入 gfs 测试页面

server1 和server 2 都没有挂载的情况下:

[root@server1 ~]# mount /dev/dangdang/dd /var/www/html/
[root@server1 ~]# vim /var/www/html/index.html
[root@server1 ~]# cat /var/www/html/index.html 
gfs2:index.html

此步的目的是给设备中写入 gfs 测试页面

3.实现永久挂载:

在server 1 和 server 2:

vim /etc/fstab
在最后一行写入:

/dev/dangdang/dd        /var/www/html           gfs2    _netdev         0 0

此时在server1 和server2 中执行 mount -a即可实现挂载:

[root@server1 ~]# mount -a
[root@server1 ~]# df
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root   8813300 1081448   7284160  13% /
tmpfs                           251136   31816    219320  13% /dev/shm
/dev/sda1                       495844   33462    436782   8% /boot
/dev/mapper/dangdang-dd        4193856  264780   3929076   7% /var/www/html
[root@server2 ~]# mount -a
[root@server2 ~]# df
Filesystem                   1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root   8813300 1024196   7341412  13% /
tmpfs                           251136   31816    219320  13% /dev/shm
/dev/sda1                       495844   33462    436782   8% /boot
/dev/mapper/dangdang-dd        4193856  264780   3929076   7% /var/www/html

4.配置luci

将filesystem在资源列表中删除:
在这里插入图片描述在这里插入图片描述删除data资源:
在这里插入图片描述启动服务:
在这里插入图片描述5.测试

在物理机:

[root@foundation63 ~]# curl 172.25.63.100 
gfs2:index.html
[root@foundation63 ~]# curl 172.25.63.100 
gfs2:index.html
[root@foundation63 ~]# curl 172.25.63.100 
gfs2:index.html

表示配置成功

6.gfs2的相关操作

查看配置的gfs2的信息

[root@server1 ~]# gfs2_tool sb /dev/dangdang/dd all
  mh_magic = 0x01161970
  mh_type = 1
  mh_format = 100
  sb_fs_format = 1801
  sb_multihost_format = 1900
  sb_bsize = 4096
  sb_bsize_shift = 12
  no_formal_ino = 2
  no_addr = 23
  no_formal_ino = 1
  no_addr = 22
  sb_lockproto = lock_dlm
  sb_locktable = redhat_cl:mygfs2
  uuid = 0281d23d-fc3f-5759-9259-39cfd2bac068

查看保留的日志信息

[root@server1 ~]# gfs2_tool journals /dev/dangdang/dd
journal1 - 128MB
journal0 - 128MB
2 journal(s) found.

如果再添加3个挂载点,对应的需要增加3份日志信息

[root@server1 ~]# gfs2_jadd -j 3 /dev/dangdang/dd 
Filesystem:            /var/www/html
Old Journals           2
New Journals           5

对设备进行扩容

[root@server1 ~]# lvextend -L +1G /dev/dangdang/dd 
  Extending logical volume dd to 5.00 GiB
  Logical volume dd successfully resized
[root@server1 ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  8.5G  1.1G  7.0G  13% /
tmpfs                         246M   32M  215M  13% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/dangdang-dd       4.0G  647M  3.4G  16% /var/www/html

注意:此时文件系统大小并没有改变,需要进行如下操作

[root@server1 ~]# gfs2_grow /dev/dangdang/dd 
FS: Mount Point: /var/www/html
FS: Device:      /dev/dm-2
FS: Size:        1048575 (0xfffff)
FS: RG size:     65533 (0xfffd)
DEV: Size:       1310720 (0x140000)
The file system grew by 1024MB.
gfs2_grow complete.
[root@server1 ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  8.5G  1.1G  7.0G  13% /
tmpfs                         246M   32M  215M  13% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/dangdang-dd       5.0G  647M  4.4G  13% /var/www/html
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值