分类: LINUX
2010-09-11 20:46:23
###################$$$$$$$$$$$$$..高可用集群..$$$$$$$$$$################
集群概述
1. 集群是一组协同工作的服务实体
2. 集群实体的可扩展性
3. 集群实体的高可用性
4. 集群实体地址
5. 客户请求的负载均衡
6. 服务节点的错误恢复
集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性和可用性的服务平台。
从客户端看来,一个集群就是一个完整不可细分的实体,但事实上一个集群实体是由完成不同任务的服务节点个体所组成的。
集群实体的可扩展性是指,在集群运行的中新的服务节点可以动态的加入集群实体从而提升集群实体的综合性能。
集群实体的高可用性是指,集群实体通过其内部的服务节点的冗余使客户端免予 OUTOF SERVICE 错误。简单的说,在集群中同一服务可以由多个服务节点提供,当部分服务节点失效后,其它服务节点可以接管服务。
集群实体地址是指客户端访问集群实体获取服务资源的唯一入口地址。
负载均衡是指集群中的分发设备(服务)将用户的请求任务比较均衡(不是平均)分布到集群实体中的服务节点计算、存储和网络资源中。一般我们将提供负载均衡分发的设备叫做负载均衡器。负载均衡器一般具备如下三个功能:
1. 维护集群地址
2. 负责管理各个服务节点的加入和退出
3. 集群地址向内部服务节点地址的转换
错误恢复是指集群中某个或某些服务节点(设备)不能正常工作(或提供服务),其它类似服务节点(设备)可以资源透明和持续的完成原有任务。具备错误恢复能力是集群实体高可用性的必要条件。
负责均衡和错误恢复都需要集群实体中各个服务节点中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图必须一致。类似服务节点(设备)可以资源透明和持续的完成原有任务。具备错误恢复能力是集群实体高可用性的必要条件。
负责均衡和错误恢复都需要集群实体中各个服务节点中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图必须一致。
集群技术的优势:
1. 低成本
2. 高可用
3. 高扩展
4. 高资源利用率
Linux集群的优势:
1. 稳定
2. 高性能
3. 兼容 UNIX 系统
4. 开源的发展模式
5. 兼容多种硬件平台
6. 利于分发的纯文本配置文件
7. 方便快捷的文本化管理界面
安装 Linux 集群的前期准备
Linux 集群硬件需求
1. 最小硬件需求
至少两台兼容 Linux 的服务器
每台服务器至少一块兼容 Linux 的可用网卡,推荐两块网卡
具备支持磁盘共享(Share Storage)的磁盘柜或服务器
具备相应链接方式的链接设备或线路
2. 无单一故障点(SPOF)硬件需求
至少两台兼容 Linux 的服务器
每台服务器至少三块兼容 Linux 的可用网卡,推荐其中一块用来链接心跳设备
具有 SCSI 或 FC 卡用以连接磁盘共享(Share Storage)的高速磁盘柜系统支持多路复用(multipath)技术
具有至少一台双控高速磁盘柜
两台以上的高速网络交换设备
使用 UPS
安装 Linux 系统时注意事项:
1. 安装前需事先确定网络配置
2. 不要将本地文件系统放在共享存储(Share Storage)上
3. 将/tmp 及/var 放在不同的文件系统上有助于提高 HA 集群性能
4. 使用 LVM 方式的共享存储有助于存储设备的扩充
5. 安装后编辑/boot/grub/grub.conf 降低等待时间
6. 安装后编辑/etc/hosts 加入所有成员服务器(Member Server)
7. 安装后确认服务器上的硬件正确识别
8. 安装后确认网络连接通畅
9. 确认需配置的服务(Service)正确安装
10. 在所有成员服务器(Member Server)识别并安装共享存储设备
11. 如果 SCSI 设备顺序识别不正常需编辑 Udev 规则进行配置
12. 如果需要在内核启动时不能自动识别共享存储设备需重新生成 Linux 内核模块
13. 在共享存储上创建集群文件系统
14. 如共享存储设备为裸设备类型,不可使用 dd 操作
15. 如有必要配置多网卡绑定,增强网卡的冗余性能
16. 安装并配置 UPS
17. 安装并配置可编程电源控制器
Linux 高可用性(HA)集群技术简介
Linux 高可用性(HA)集群的三种方式
1. 主从方式(非对称)
2. 对称方式(互备互援)
3. 多机方式(多机互备)
主从方式包含二台服务器及一个或多个服务,基中一台服务器运行服务,另外一台做为备份服务器随时检查主服务器的状态,发生故障时,服务会立即切换至从服务器上以保证服务的正常运行
主从方式由一台主服务器和一台备份服务器构成,主服务器运行一个或多个SERVICE,从服务器和主服务相互监控,如果主服务器上的服务发生故障则执行故障切换功能。SERVICE 切换到从服务器继续运行主从方式提出供了较高级别的可用性,由于一台服务器专门用于备份,所以主从方式对资源利用率较低。
对称方式包含二台服务器及一个或多个服务,两台服务器都运行服务并互为备份,相互监视,当有服务发生故障时,服务会立即切换到另一台服务器。
由两台服务器构成,两台服务器分别运行一个或多个不同的 SERVICE,两台服务器相互监控,如果其中的 SERVICE 发生故障则切换到另外一台服务器上运行。对称方式在提供了较高资源利用率的同时,也为服务提供了可用性保证。
多机方式由多台服务器及多个服务构成,每台服务器都可能运行或不运行服务,每台服务器都会监视指定的几个服务,当服务发生故障时会备切换至一组服务器中的一台。
由多台服务器构成,每台服务器上分别运行一个或多个 SERVICE,服务器间相互监控,如果某台服务器上的 SERVICE 发生故障则切换到其它服务器继续运行。集群方式将许多台服务器连接在一起构成高可用服务集群,配置相对主从或对称方式的高可用集群相对较为困难,支持多台机器的共享存储设备售价也较高,一般情况下不建议采用集群方式的高可用集群。
Linux 高可用性(HA)集群的基本组成
1. 服务(Service)
2. 浮动 IP(Float IP)
3. 成员服务器或称节点(Member Server or Node)
4. 失效域(Failover Domain)
5. 心跳(Heartbeat)
6. 共享存储(Share Storage)
RedHat Cluster Suite 中包括的组件:
1. CCS:集群配置系统,以管理 cluster.conf 档案
2. CLVM:集群扩展到 LVM2 可扩展逻辑盘管理工具
3. CMAN :集群管理器
4. Conga :RHCM 的 Web 控制套件。包括 luci 和 ricci
5. DLM :分布式锁管理器
6. luci:RHCM 的 Web 控制套件中 Web 图形界面集群管理器
7. LVS :Linux 虚拟服务器(ipvsadm)
8. LVM2Cluster:基于 LVM 的集群可扩展存储功能
9. Fence :输入/输出系统围栏系统(栅设备)
10. GFS :共享磁盘簇文件系统(全球文件系统)
11. GFS2 :共享磁盘簇文件系统(全球文件系统 2 )
12. GNBD :内核模块,多机网络共享块设备管理器
13. GULM :基于服务器的集群冗余锁定管理器(替代 CMAN 和 DLM)
14. Magma :集群/锁定库用于 gulm 和 CMAN/DLM 的迁移
15. ricci :RHCM 的 Web 控制套件中 Web 图形界面集群管理代理(node 端)
16. RGmanager :资源组管理器,用来监督、启动和停止应用、服务和资源
17. Openais :开源集群基础设施
18. systemconfigcluster :图形化工具来管理集群中的多个机器
构建HA集群所需RHCS包
1. ccs
2. cman,cman-kernel ,cman-kernheaders
3. dlm,dlm-kernel,dlm-kernheaders,gulm
4. fence
5. rgmanager
6. system-config-cluster(可选)
7. luci,ricci (可选)
8. magma,magma-plugins (RHCS v5 中已剔出)
集群程序打开的端口
1. rgmanager/clurgmarg tcp 41966~41969
2. ccsd tcp 50006、50008、50009 udp 50007
3. dlm tcp 21064
4. cman udp 6809(EL4) udp 5405(EL5)
5. gnbd tcp 14567
端口 程序 协议
41966 rgmanager/clurgmgrd tcp
41967 rgmanager/clurgmgrd tcp
41968 rgmanager/clurgmgrd tcp
41969 rgmanager/clurgmgrd tcp
50006 ccsd tcp
50007 ccsd udp
50008 ccsd tcp
50009 ccsd tcp
21064 dlm tcp
6809 (RHEL4 and under) cman udp
5405 (RHEL5 and above) cman udp
14567 gnbd tcp
环境:
初始化配置:
一,修改hosts的路由信息:
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
#192.168.0.170 node1s.uplooking.com node1s
#192.168.10.173 node2.uplooking.com node2
192.168.10.170 node1.uplooking.com node1
192.168.0.173 node2s.uplooking.com node2s
192.168.0.168 fence.uplooking.com fence
192.168.0.169 node3.uplooking.com node3
将 /etc/hosts 文件复制到其他节点上,声明将添加到集群中各节点
node1# scp /etc/hosts node2:/etc/
node1# scp /etc/hosts node3:/etc/
node1# scp /etc/hosts fence:/etc/
二,设置各节点的 ssh_key ,这样有利于我们在节点间相互访问。
node1# ssh-keygan //不需要设置密码,空的即可
node1# cp .ssh/id_dsa.pub .ssh/authorized_keys //将生成的keys发送给其他主机
将 node1 的/root/ .ssh 目录复制到其他节点上,这样所有极点就都可以相互无密码的
访问了。
node1# scp -r .ssh node2:/root/
node1# scp -r .ssh node3:/root/
node1# scp -r .ssh fence:/root/
三,清楚iptables的内容,最好关闭iptables
node1#iptables -F
node1#chkconfig iptables off
四,关闭selinux
node1#vim /etc/sysconfig/selinux
Enforcing---->disabled
或者执行命令
node1#sed -i 's@Enforcing@disabled@g' /etc/sysconfig/selinux
node1#chkconfig selinux off
实验步骤:
一,打开其中一台主机,执行一下的命令:
node1#system-config-cluster //打开配置的图形化界面
配置好的文件在:/etc/cluster/cluster.conf
将生成的配置文件分发到其他的主机上:
node1#scp /etc/cluster/cluster.conf 192.168.0.173:/etc/cluster/
node1#scp /etc/cluster/cluster.conf 192.168.0.168:/etc/cluster/
下面的现不加:以后
node1#scp /etc/cluster/cluster.conf 192.168.0.169:/etc/cluster/
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@发送完毕后,记得要把机子重新启动一下,这样才能是配置文件生效!!!!!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
二,检测是否安装了cman和rgmanager
node1#rpm -qa | grep cman
cman-2.0.98-1.el5 //显示则安装成功,否则安装即可
node1#rpm -qa | grep rgmanager
rgmanager-2.0.46-1.el5 //显示则安装成功,否则安装即可
相同的命令在其他的机子上执行,看看是否安装正常
三,在三台机子上同时执行下面的语句
node[123]#service cman start
Starting cluster:
Loading modules... DLM (built Dec 17 2008 12:23:12) installed
GFS2 (built Dec 17 2008 12:24:30) installed
done
Mounting configfs... done
Starting ccsd... done
Starting cman... done
Starting daemons... done
Starting fencing...
当出现OK字样的化表明,三台主机可以通过cman来实现通信了,这是下面作一切实验的前提,
node[123]#service rgmanager start
这是节点要提供服务的竞争,也就是谁想提供服务,谁就开启rgmanager服务
四,在fence机子上,开启检测:
fence#clustat -i 1 //开启检测,每隔一秒刷新一下
Cluster Status for xxl-cluster @ Fri Sep 3 02:57:34 2010
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1 1 Online, rgmanager
node2 2 Online, rgmanager
fence 4 Online, Local, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:xxl-mysql node2 started
service:xxl-web node2 started
实验检测:
一:手动迁移测试实验:
[root@fence ~]# clusvcadm -r xxl-web -m node1 //将服务迁移到node1上
Trying to relocate service:xxl-web to node1...Success
service:xxl-web is now running on node1
再通过四步骤查看是否迁移成功,
Cluster Status for xxl-cluster @ Fri Sep 3 03:01:58 2010
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1 1 Online, rgmanager
node2 2 Online, rgmanager
fence 4 Online, Local, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:xxl-mysql node1 started
service:xxl-web node1 started
则实验验证成功.....
二,手动关闭/开启服务
[root@node1 ~]# clusvcadm -d xxl-web //关闭xxl-web服务
Local machine disabling service:xxl-web...Success
查看情况如下:
Cluster Status for xxl-cluster @ Fri Sep 3 03:09:20 2010
Member Status: Quorate
Member Name ID Status
------ ---- ---- ------
node1 1 Online, rgmanager
node2 2 Online, rgmanager
fence 4 Online, Local, rgmanager
Service Name Owner (Last) State
------- ---- ----- ------ -----
service:xxl-mysql node1 started
service:xxl-web (node1) disabled
[root@node1 ~]# clusvcadm -e xxl-web //可以重新开启服务
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@注:上面的语句在那台机子上开启就会使用哪台机子作为服务的节点!!!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
三:手动添加服务节点
在一个节点上修改配置文件
node1#vi /etc/cluster/cluster.conf
修改下面的内容:
.........
//
.........
//
//添加上面的一句话内容,完成节点的添加
上面的内容修改好之后就可以保存了;执行下面的内容
[root@node1 ~]# ccs_tool update /etc/cluster/cluster.conf
Config file updated from version 2 to 3
Update complete.
出现上面的内容说明成功。
四:添加仲裁磁盘
修改配置文件cluster.conf
添加为:
.........
.........
[root@node1 ~]# ccs_tool update /etc/cluster/cluster.conf
Config file updated from version 3 to 4
Update complete.
升级所有的节点配置文件.......
在fence设备上创建qdisk分区作为qdisk服务的保存地方
[root@fence ~]#fdsik /dev/sda
创建一个单独地分区,大小为100M即可:sda7
在做实验之前,安装所需要的包,所有设备:
yum install kmod-gnbd(-xen) //如果是指出虚拟内核的话使用加括号的内容
[root@fence ~]#gnbd_ser
[root@fence ~]#gnbd_export -d /dev/sda7 -e gnbd_qdisk
[root@fence ~]#gnbd_export -l //查看是否导出
Server[1] : gnbd_qdisk
--------------------------
file : /dev/sda7
sectors : 995967
readonly : no
cached : no
timeout : 60
[root@node1 ~]# modprobe gnbd //在其他节点上导入qdisk设备
[root@node1 ~]# gnbd_import -i fence
gnbd_import: created directory /dev/gnbd
gnbd_import: created gnbd device gnbd_qdisk
gnbd_monitor: gnbd_monitor started. Monitoring device #0
gnbd_recvd: gnbd_recvd started
resending requests
其他节点类似,执行相同的命令即可
[root@node1 ~]#mkqdisk -c /dev/gnbd/gnbd_qdisk -L qdisk
//对导出设备作初始化操作
最后在所有节点上开启qdisk的服务
service qdisk start
在fence设备上执行命令:
[root@fence ~]#cluster -i 1
五:添加共享存储
首先要想建立共享存储必须把qdisk作好
然后在修改配置文件:cluster.conf
修改为:
.........
.........
[root@node1 ~]# ccs_tool update /etc/cluster/cluster.conf
Config file updated from version 4 to 5
Update complete.
升级所有的节点配置文件.......
[root@fence ~]#fdisk /dev/sda
在fence设备上创建两/三个分区
[root@fence ~]#gnbd_export -d /dev/sda8 -e gnbd_share1
[root@fence ~]#gnbd_export -d /dev/sda9 -e gnbd_share2
[root@fence ~]#gnbd_export -d /dev/sda10 -e gnbd_share3
[root@node1 ~]#modprobe gnbd
[root@node1 ~]#gnbd_import -i fence
[root@node1 ~]#gnbd_import -l //将导出设备导进节点内
以上操作同时也要在,node2/node2上执行
创建CLVM:
在各个节点上执行命令:
yum install lvm2-cluster -y
来安装clvm(集群逻辑卷管理器协调服务,如果需要在集群中使用CLVM,集群中的所有节点都必须启动CLVM服务)
修改配置文件来使此服务支持集群:/etc/lvm/lvm.conf
找到locking-type 将值修改为1--->3
或者执行下面的命令
lvmconf --enable-cluster //结果和上面的修改一样,完成值的修改
之后在所有的节点执行开启CLVM服务
service clvmd start
[root@node1 ~]#pvcreate /dev/gnbd/gnbd_share[123]
[root@node1 ~]#vgcreate CVG0 /dev/gnbd/gnbd_share[12]
[root@node1 ~]#lvcreate -L 600M -n CLVM0 /dev/CVGO
创建CLVM0作为共享存储的地方
创建GFS文件系统
[root@node1 ~]#yum install gfs2* //安装gfs2文件系统,要对下面的
//磁盘作文件系统的安装
安装gfs2文件的工具
[root@node1 ~]#mkfs.gfs2 -p lock_dlm -j 1 -t xxl-mysql:gfsdisk /dev/CVG0/CLVM0
//对共享存储创建文件系统
[root@node1 ~]#service clvmd restart //重新启动clvm服务
chinaunix网友2010-09-13 14:43:30
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com