• 基于RHCS的web双机热备集群搭建


    基于RHCS的web双机热备集群搭建

    RHCS集群执行原理及功能介绍

    1、 分布式集群管理器(CMAN)
     Cluster Manager。简称CMAN。是一个分布式集群管理工具。它执行在集群的各个节点上,为RHCS提供集群管理任务。

    CMAN用于管理集群成员、消息和通知。它通过监控每一个节点的执行状态来了解节点成员之间的关系。当集群中某个节点出现问题。节点成员关系将发生改变,CMAN及时将这样的改变通知底层,进而做出对应的调整。

    2、锁管理(DLM)
     Distributed Lock Manager,简称DLM。表示一个分布式锁管理器,它是RHCS的一个底层基础构件。同一时候也为集群提供了一个公用的锁执行机制。在RHCS集群系统中,DLM执行在集群的每一个节点上,GFS通过锁管理器的锁机制来同步訪问文件系统元数据。

    CLVM通过锁管理器来同步更新数据到LVM卷和卷组。 DLM不须要设定锁管理server,它採用对等的锁管理方式,大大的提高了处理性能。

    同一时候。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设备主要就是通过server或存储本身的硬件管理接口。或者外部电源管理设备。来对server或存储直接发出硬件管理指令。将server重新启动或关机,或者与网络断开连接。 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执行在每一个集群节点上。在server上相应的进程为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有两部分组成,各自是luci和ricci,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之间的关系。一般刚開始学习的人非常easy混淆这个概念:执行RHCS。GFS不是必须的,仅仅有在须要共享存储时,才须要GFS支持,而搭建GFS集群文件系统,必须要有RHCS的底层支持,所以安装GFS文件系统的节点,必须安装RHCS组件。

    集群环境介绍

    主节点。RealServer1: 192.168.10.121

    备节点,RealServer2: 192.168.10.122

    存储节点,Node1:       192.168.10.130

    集群的浮动 IP:           192.168.10.254

    配置主机之间的ssh互信

    ① 在每台主机上运行一下代码

    /usr/bin/ssh-keygen -t rsa
    /usr/bin/ssh-keygen -t dsa
    
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys


    ② 建立 RealServer1和RealServer2之间的ssh互信

    在RealServer1上运行:

    ssh server2 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys 
    ssh server2 cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys
    

    在RealServer2上运行:

    ssh server1 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys 
    ssh server1 cat /root/.ssh/id_dsa.pub >> /root/.ssh/authorized_keys


    配置target 存储

    yum install iscsi-target-utils -y
    service tgtd restart
    chkconfig tgtd on
    HOSTNAME="iqp.2014-08-25.edu.nuist.com:storage.disk"
    tgtadm --lld iscsi --mode target --op  new --tid 1 --targetname $HOSTNAME
    tgtadm --lld iscsi --op new --mode logicalunit --lun 1 --tid 1 -b /dev/sdb
    tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
    
    #tgtadm --lld iscsi --op show --mode target |grep Target
    tgt-admin -s
    

    配置全部节点的initiator

    yum install iscsi-initiator* -y
    service iscsi start
    service iscsid start
    chkconfig iscsid
    
    iscsiadm -m discovery -p 192.168.10.130:3260 -t sendtargets
    iscsiadm -m node --targetname iqp.2014-08-25.edu.nuist.com:storage.disk -p 192.168.10.130:3260 --login


    创建一个GFS2文件系统(仅仅在当中一个节点)(在192.168.10.121上创建)(创建一个lvm)

    pvreate /dev/sdb
    vgcreate webvg /dev/sdb 
    lvcreate -L 2G -n webvg_lv1 webvg


    在每一个节点上安装集群软件

    yum -y install cman* 
    yum -y install rgmanager*
    yum -y install gfs2-utils
    yum -y install system-config-cluster*
    yum -y install lvm2-cluster
    


    格式化文件系统(格式化一次就可以)

    mkfs.gfs2 -p lock_dlm -t httpd_cluster:webvg_lv1 -j 2 /dev/webvg/webvg_lv1
    

    使用 system-config-cluster 图形工具产生 cluster.conf配置文件

    ① 启动system-config-cluster,创建httpd_cluster

        

       

       

    ② 加入新节点

       

    ③ 加入fence

       

    ④ 将fence和节点绑定

       

    ⑤ 加入资源:加入 IP 资源

       

    ⑥ 加入资源:加入GFS资源

       

    ⑦ 加入资源:加入Script资源

       

    ⑧ 创建失效域

       

    ⑨ 创建集群服务

       

    配置完毕后的文件内容例如以下

    <?xml version="1.0" ?>
    <cluster config_version="2" name="httpd_cluster">
    	<fence_daemon post_fail_delay="0" post_join_delay="3"/>
    	<clusternodes>
    		<clusternode name="RealServer1" nodeid="1" votes="1">
    			<fence>
    				<method name="1">
    					<device name="fence1" nodename="RealServer1"/>
    				</method>
    			</fence>
    		</clusternode>
    		<clusternode name="RealServer2" nodeid="2" votes="1">
    			<fence>
    				<method name="1">
    					<device name="fence2" nodename="RealServer2"/>
    				</method>
    			</fence>
    		</clusternode>
    	</clusternodes>
    	<cman expected_votes="1" two_node="1"/>
    	<fencedevices>
    		<fencedevice agent="fence_manual" name="fence1"/>
    		<fencedevice agent="fence_manual" name="fence2"/>
    	</fencedevices>
    	<rm>
    		<failoverdomains>
    			<failoverdomain name="httpd_fail" ordered="0" restricted="1">
    				<failoverdomainnode name="RealServer1" priority="1"/>
    				<failoverdomainnode name="RealServer2" priority="1"/>
    			</failoverdomain>
    		</failoverdomains>
    		<resources>
    			<ip address="192.168.10.254" monitor_link="1"/>
    			<script file="/etc/init.d/httpd" name="httpd"/>
    			<clusterfs device="/dev/webvg/webvg_lv1" force_unmount="1" fsid="8669" fstype="gfs2" mountpoint="/var/www/html" name="docroot" options=""/>
    		</resources>
    		<service autostart="1" domain="httpd_fail" name="httpd_srv" recovery="relocate">
    			<ip ref="192.168.10.254"/>
    			<script ref="httpd"/>
    			<clusterfs ref="docroot"/>
    		</service>
    	</rm>
    </cluster>

    将产生后的cluster.conf通过scp拷贝到其它节点上。

    (第一次须要手动复制。集群服务启动后能够通过system-config-cluster向全部节点分发配置文件。)


    在RealServer1 和RealServer2 上安装apache

    yum install httpd

    配置RealServer1(RealServer2类似)

    NameVirtualHost 192.168.10.121:80
    
    ServerName   www.example.com
    
    <VirtualHost 192.168.10.121:80>
    	DocumentRoot /var/www/html
    	ServerName   www.example.com
    </VirtualHost>
    

    设置apache开机不启动

    chkconfig httpd off


    启动集群服务

    service cman start
    service rgmanager start
    lvmconf --enable-cluster
    service clvmd start

    集群启动后,开启system-config-cluster后。例如以下图。能够对集群的配置文件进行改动,改动完毕后能够通过Send to  Cluster向全部节点分发配置文件。该工具内置版本号控制的功能,每次改动配置文件后,会自己主动产生一个新版本号。集群服务启动后,“Cluster Manager”才会出现,其内容如右图。分别显示集群中的节点,集群服务的状态,和集群中的主节点。

       

    測试

    至此集群搭建完成

    查看集群状态: clustat

    查看挂载状态: mount

    手动切换主被节点:clusvcadm -r httpd_srv 备用主机名称

    查看浮点ip附着在那台主机上: ip addr

    通过浏览器訪问apache: http://192.168.10.254


    參考

    1. 51CTO朱伟宏老师的视频教程。地址:http://edu.51cto.com/course/course_id-2.html

    2. 百度文库:红帽集群套件RHCS四部曲



    
    
    
  • 相关阅读:
    剑指 Offer 31. 栈的压入、弹出序列
    【笔记】小样本学习(Few-shot Learning)(1)
    【VS】Visual Studio 自带的反编译工具,方便了太多了。
    秋招提前批已来,万字长文教你如何增加面试大厂的成功率🔥
    Spring Boot自动配置原理与实践(二)
    MySQL是怎么解决幻读问题的?
    深入学习Netty(5)——Netty是如何解决TCP粘包/拆包问题的?
    深入学习Netty(4)——Netty编程入门
    HttpRunner3.X
    HttpRunner3.X
  • 原文地址:https://www.cnblogs.com/llguanli/p/6747390.html
Copyright © 2020-2023  润新知