高可用集群 HA
模型 N+1模型 有N个在工作一个空闲
N/N n个节点运行n个服务
共享存储
DAS 直接附加存储,通过系统总线连接出来一条线直接连接设备
--RAID
--SCSI
NAS 网络附加存储,通过另外的一台主机提供数据的存储,
--NFS
SAN 存储区域网络
俩个主节点通过光纤交换机连接,主机通过光卡练到交换机,光交换机连接到存储空间
光模拟出来的SCSI总线,传输的数据时块级别的
--FCoe 协议实现SCSI
--iSCSI 在tcp/ip 协议上实现
Brain-split ,脑裂 集群分裂成为几个团体,会征用一个共享资源
Partitioned Cluster
STONITH 电源交换机
Shoot the oter node in the head 避免脑裂,
Fence 隔离设备 RHCS提供的
重要目的就是保证服务器7X24小时在线
要实现这种机制旧的使用multipaty
quarom 法定人数,集群满足之后才叫做集群,必须大于半数(不能等于),数目跟服务器个数无关系,可以通过性能的比例给每个服务器票数,并且规定必须大于半数才提供服务。
如果是两个节点是个例外。
Quarom disk 解决方法,在两个节点之间用一个共享存储,节点实时在共享存储里写数据,如果另个节点没有发现有数据写入则,自己代替他。
定义故障转移域(范围)
需要另外建立一个网络实现,主机之间的宣告, (组播 多播 广播)
四个层次
1,最底层 messaging/infrastructure 节点之间互相宣告
2, 决策这个集群是否拥有法定票数 membership 需要的一个服务 CCM (cluster consensus membership) service
3 集群资源管理器(重要) cluster resource manager 在Resource Allocation 这些都保存在一个xml的文件中(CIB-Cluster information Base),只需要编辑一份,然后同步到其他的节点上。可以手动同步,
RHCS 中有个服务监控 CCSD
Designated coordinator 定义的协调员
Policy engine 策略引擎 决定决策的
Transition engine 转变引擎 过度者
Local resource manager 本地资源管理器
4 Resouces Agent 资源代理,真正的集群 类型:LSB 遵循linux 规范的start脚本
能够在本地实现管理服务的脚本 OCF 比LSB具有更大的通用性
Heartbeat 工具实现HA集群 heartbeat自身所带的CRM功能不是很强大,所以需要另外的安装pacemaker,支持2-16个节点 正在提供服务的主节点 备节点
支持传递心跳信息的方法
避免非法获取心跳信息,为了集群的可靠性,互相传递心跳信息需要认证。
集群中的信息
Heartbeat
配置文件 /etc/ha.d/ha.cf heatbeat的配置文件
心跳信息加密的方式对称加密
Ip 地址 需要配置在别名 每个节点有个主地址 和别名地址 (是一个资源,通过资源管理器实现) haresouce实现
Gratuitous ARP (GARP) broadcast
工具 /usr/lib/heartbeat/
Resouce scripts 位置:/etc/ha.d/resource.d 或者 /etc/init.d 支持LSB的脚本
如何配置,并启动HA集群
/etc/ha.d/ha.cf 配置
/etc/ha.d/haresources 资源
/etc/ha.d/authkeys 要求权限必须为600
1,安装 hearbeat软件 版本 2 ,3(比较难理解)以2为准
2,配置 /etc/ha.d/ha.cf
3. 配置 /etc/ha.d/ha.d/haresources
4. 配置 /etc/ha.d/authkeys
配置和启动HA
两个node ip 192.168.0.140 192.168.10.140
192.168.0.141 +> 表示在文件中增加,或者修改某行为后面的内容
#vim /etc/sysconfig/network
+> HOSTNAME=node1.z.org
#hostname node1.z.org
#vim /etc/hosts
+> 192.168.0.140 node1.z.org node1
+> 192.168.0.141 node2.z.org node2
#cd /etc/sysconfig/network-scripts/
#vim ifcfg-eth0
+>BOOTPROTO=static
IPADDR=192.168.0.140
GETWAY=192.168.0.254
#vim ifcfg-eth1
IPADDR=192.168.10.181
NETMASK=255.255.255.0
# service network restart 配置好一台node 开始配置另外一个
#使用SCP的时候不需要密码,基于密钥的认证
#ssh-keygen -t rsa 生成密钥对 在node1上
#ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
#scp /etc/hosts node2:/etc 拷贝node1上得hosts文件
#scp /etc/sysconfig/network-scripts/ifcfg-eth:{0,1} node2:/etc/sysconfig/network-scripts/
#node2上修改ifcfg-eth0 ifcfg-eth1
# lftp 192.168.0.254
lftp 192.168.0.254:/pub> cd /pub/Sources/Heartbeat2
lftp192.168.0.254:/pub/Sources/Heartbeat2>mget heartbeat-2.1.4-9.el5.i386.rpm heartbeat-gui-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm
2288285 bytes transferred
Total 6 files transferred
lftp 192.168.0.254:/pub/Sources/Heartbeat2> bye
# yum --nogpgcheck localinstall *.rpm
#cd /usr/share/doc/heartbeat-2.1.4/ 这个目录里有heartbeat的配置文件
#cp authkeys haresources ha.cf /etc/ha.d
#cd /etc/ha.d
#vim ha.cf 配置主配置文件
+>logfile /var/log/ha-log 记录错误日志
+>udpport 694 默认传输心跳信息的端口
+>bcast eth1 广播的方式传输心跳信息
+>node node1.z.org 节点的主机名,必须和主机上使用 uname -n看见的名字一致
+>node node2.z.org 有几个节点就写几个node
Keepalive 2
Deadtime 30
Warntime 10
Initdead 120 主机刚启动之后的等待时间
# dd if=/dev/urandom bs=512 count=1 | openssl md5 取得随即数
#vim authkeys
+> auth 1
1 md5 随机码
#Chmod 600 authskeys
#Vim haresources
+>node1.z.org 192.168.0.186/24/eth0/192.168.0.255 httpd
主节点名字 流动地址/子网掩码/广播地址 服务名字
# Yum -y install httpd
#echo " <h1>Web1</>" > /var/www/html/index.html 给http服务,一个主页面
#service httpd start 启动服务测试一下,服务是否能正常运行
#service httpd stop 停止服务,让集群服务按需要启动服务
#chkconfig httpd off 取消开机重启
#cp /etc/init.d/httpd /etc/ha.d/resource.d/ 最好把启动脚本放在这个目录下
#scp -p authkeys haresource ha.cf node2:/etc/ha.d/ 拷贝配置文件到node2 -p 保持文件的权限
#service heartbeat start 启动集群服务
#less /var/log/messages 查看日志信息
#netstat -tnlp 查看服务的端口是否监听
#cd /usr/lib/heartbeat 这里有工具模拟测试集群服务
#./hb_standby 把自己设置为主机
#./hb_takeover 取回位置