99.9% 一年宕机时间不超过10h
99.999% 一年宕机时间不超过6min
如何提高服务器的可用性呢,这就需要使用HA(high availability)集群,一般是由多个节点的来组成。
1.主-备(active-standby)主 - 备方式即指的是一台服务器处于某种业务的激活状态,另一台服务器处于该业务的备用状态;
2.主-主(active-active)双主机方式即指两种不同业务分别在两台服务器上互为主备状态;
主服务器和备用服务器是建立双机热备的基本条件。两个系统上的数据库服务器共享同一个数据库文件。通常情况下,数据库文件挂靠在主数据库服务器上,用户连接到主服务器上进行数据库操作。当主服务器出现故障时,备用服务器会自动连接数据库文件,并接替主系统的工作。用户在未告知的情况下,通过备用数据库连接到数据库文件进行操作。等主服务器的故障修复之后,又可以重新加入集群;
1、串行电缆:被认为是比以太网连接安全性稍好些的连接方式,因为hacker无法通过串行连接运行诸如telnet、ssh或rsh类的程序,从而可以降低其通过已劫持的服务器再次侵入备份服务器的机率。但串行线缆受限于可用长度,因此主、备服务器的距离必须非常短。
2、以太网连接:使用此方式可以消除串行线缆的在长度方面限制,并且可以通过此连接在主备服务器间同步文件系统,从而减少了从正常通信连接带宽的占用。
3、光电交换机
总体部署如下图所示,当然只是选择其中的一种方式就行了:
1.节点级别:
STONITH:Shoot The Other Node In the Head (俗称“爆头”)呵呵,挺形象的,意思就是直接切断电源;常用的方法是所有节点都接在一个电源交换机上,如果有故障,就直接导致该节点的电压不稳定,或断电,是有故障的节点重启
2.资源级别:
fencing 只是把某种资源截获过来
而对于多节点的集群就要复杂了,在多节点集群中要有个“头头”就是指定的“协调员”DC,就是一个集群中每个几点上都有一个相当于选举票的权值,而这个权值就是根据服务器的性能进行手动分配的,性能好的可以分配的大点,而所有的其他节点都要听从DC的调度,在一个集群中只有选票达到50%以上才能称为集群系统。
如果出现故障了,就会有一个故障转移(failover),设置不同的优先级,可以使故障按照优先级的高低进行转移,选择一个性能好的服务器当DC。
DAS:(Direct attached storage)设备直接连接到主机总线上的,距离有限,而且还要重新挂载,之间有耽误时间
RAID
SCSI
NAS:(network attached storage)网络附加存储
文件级别的共享
SAN:(storage area network)存储区域网络
块级别的
模拟的scsi协议
FC光网络(交换机的光接口超贵,有一个差不多2万,如果使用这个,代价太高)
IPSAN(iscsi)存取快,块级别
HA的架构层次:
从下向上讲:
1.Messageing and Infrastructure Layer (信息基础架构层):<套件---heartbeat,keepalive,corosync/openais,RHCS
传递心跳信息的非常重要的子层,通过单独的服务组件来实现,除了心跳信息,还传递集群事务信息
2.Membership 成员层: <套件-----pacemaker(心脏起搏器),cman
(CCM,成员信息)
重新收敛集群成员信息,生成一个概览图,为第三层采取动作提供信息
3.Resource Allocation资源分配层
Cluster Resource Manage(集群资源管理)
LRM,决策本地资源(local resource manage)。定义资源的属性,反映本地资源的信息
policy engine 策略引擎,做决策
transition engine 执行引擎,执行策略引擎做的决定
Cluster information Base 集群信息基础,他是一个包括membership,resoutces,constraints的XML文,在任意一个节点上使用命令进行修改,都会自动的同步到主节点DC的配置文件中去
4.Resource Layer(资源层)
Resource Agent资源代理:就是运行具体的服务,服务启动的脚本,数据文件等资源整体结构如下图所示:
总体拓扑如下图所示:
Node1上的配置
#ssh-keygen -t rsa //生成公钥和密钥,一步enter到底就行了
## ssh-copy-id -i .ssh/id_rsa [email protected] //输入密码就行了
Node2上的配置
#ssh-keygen -t rsa //生成公钥和密钥,一步enter到底就行了
## ssh-copy-id -i .ssh/id_rsa [email protected] //输入密码就行了
二、配置Node1:
1.配置网卡的地址,强烈建议使用静态地址
2.#vim /etc/hosts对所有的节点主机的心跳IP和主机名都写入
10.1.1.1 node1.a.org node1
10.1.1.2 node2.a.org node2
3.编辑主机名
#vim /etc/sysconfig/network
HOSTNAME=node1.a.org
#hostname node1.a.org
#yum install httpd
#echo "<h1>node1server</h1>" >/var/www/html/index.html
任何集群服务都不能自动启动,而且还不能开机自动启动
#server httpd stop
#chkconfig httpd off
4.安装heartbeat,复制配置文件及配置
#cd /usr/share/doc/heartbeat-2.1.4/
#cp ha.cf haresources authkeys /etc/ha.d/
#cd /etc/ha.d/
#vim /etc/ha.d/ha.cf
修改如下内容
keepalive 2 //保持时间
deadtime 30 //死亡时间
warntime 10 //警告时间
initdead 120 //启动时间
udpport 694 //使用udp的端口
bcast eth1 //心跳接口
logfile /var/log/ha-log //日志文件
auto_failback on //失败自动退回
node node1.a.org //节点对应的主机名,这里面要写所有的
node node2.a.org
#vim authkeys
auth 2
2 sha1 jlasdlfladddd //这个后面的密码可以随意写,也可以使用自动生成随机数(#dd if=/dev/urandom bs=512 count=1 |md5sum )的方式来生成,但是节点之间是一样的
#chmod 400 authkeys //修改权限
#vim haresources
node1.a.org 192.168.1.254/24eth0/192.168.1.255 httpd //生成一个VIP
#cd /usr/lib/heabeat
./ha_propagate //拷贝文件authkeys和ha.cf文件
三、配置Node2:
1.配置网卡的地址,强烈建议使用静态地址
2.#vim /etc/hosts对所有的节点主机的心跳IP和主机名都写入
10.1.1.1 node1.a.org node1
10.1.1.2 node2.a.org node2
3.编辑主机名
#vim /etc/sysconfig/network
HOSTNAME=node2.a.org
#hostname node2.a.org
#yum install httpd
#echo "<h1>node2server</h1>" >/var/www/html/index.html
任何集群服务都不能自动启动,而且还不能开机自动启动
#server httpd stop
#chkconfig httpd off
#yum localinstall * -y --nogpgcheck //和Node1 一样的安装
#./ha_propagate //拷贝文件authkeys和ha.cf文件
#cd /etc/ha.d/
#scp haresources node2:/etc/ha.d/
五、启动服务
#/etc/init.d/heartbeat start
#ssh node2 --'/etc/init.d/heartbeat start' //无论哪个先启动,但是所有集群的节点必须在同一个上面启动其他节点
六、测试:
在浏览器中输入http://192.168.1.254进行访问
测试的时候,在Node2上停止Node1的服务
#ssh node1 --'/etc/init.d/heartbeat stop'
在主节点上执行/usr/lig/heartbeat/hb_standy 让出主节点
/usr/lig/heartbeat/hb_takeover 主节点把资源抢回来
实验结束!