一 集群环境介绍
一 Linux 集群发展史
高可用集群的层次结构
1 消息 / 基础架构 corosync
2 成员关系 : 监听心跳信息, 并进行处理成员关系和计算成员关系的票数等信息
3 资源管理 VIP 磁盘 文件系统 CRM (群集资源管理器)等, 有些策略引擎(有些资源是放置在同一个节点和其依赖关系) 和资源的分配调度有关
4 资源 : 对特定资源的操作, 通过一定的脚本实现
pacemaker 群集资源管理器
corosync 消息 / 基础架构
管理工具
- crmsh : crm (cluster resource manager )shell (CentOS 7 已经废弃)
- pcs : pacemaker corosync server
- CLVM
集群化的 LVM(clustered LVM)
LVM 的一个集群方面的扩展, 允许集群中的计算机通过 LVM 管理共享存储
- DRBD
- distributed replicated block device (DRBD)
软件实现的, 无共享的, 服务器之间的镜像块设备内容的复制解决方案
- GFS2/OCFS
- global file system 2 / oracle Cluster file system
集群文件系统使用集群中的所有节点并发的通过标准文件系统接口来访问存储设备
二 Linux HA 体系结构
pacemaker 体系结构
群集的组成:
1 基本的消息层
2 资源管理层
3 为群集提供一些功能, 节点的并发读写和锁的管理
pacemaker 内部组件
四个关键组件
1 CIB(群集信息基础)xml 文件, 信息在群集之间同步
2 CRMd(群集资源管理守护进程)通过选举一个 DC, 是一个指定的协调者
- 3 PEngine(PE or 策略引擎)
- 4 STONITHd
- shoot-the-other-node-in-the-head
爆其他节点的头
corosync
corosync 位于高可用集群结构中的底层, 为各个节点 (node) 之间提供心跳信息传递这样一个角色
心跳: 就是讲多台服务器用网络连接起来, 而后每一台服务器都不停的将自己依然在线的信息使用很简短很小的通告给同一网络中的其他主机, 告诉他们自己依然在线, 其他服务器收到这个心跳信息就认为它是在线的, 尤其是主服务器
fencing agent
隔离引擎
集群通常需要使用 fencing agent
fencing 是在一个节点不稳定或者无答复时将其关闭, 使得他不会损坏集群的其他资源, 其主要用途是消除脑裂
常见的 fencing agent 类型
power 类型的 agent
会将节点的电源断电, 他通常链接到物理设备比如 UPS
storage 类型的 agent
会确保某个时刻只有一个节点会读写共享的存储
resource agent
RA 是管理一个集群资源的可执行程序, 没有固定其实现的编程语言, 但大部分 RA 都是使用 shell 脚本实现的
pacemaker 使用 RA 来和收管理资源进行交互, 它即支持它自身实现的 70 多个 RA, 也支持第三方 RA
要实现一个 RA, 需要遵循 OCF 规范
pacemaker 支持三种类型的 RA:
- LSB resource agents
- OCF resource agents
- legacy heartbeat resource agents
RA 支持的主要操作包括:
start , stop ,monitor,validate-all,meta-data...
pcs resource agnet 查看相关的 agent
STONITH
stonith 是 "shoot the other node in the head" 的首字母简写
他是 heartbeat 软件包的一个组件
它允许使用一个远程或 "智能的" 链接到健康服务器的电源设备自动重启失效负无穷的电源
stonith 设备可以关闭电源并相应软件命令, 运行 heartbeat 的服务器可以通过串口线或网线向 stonith 设备发送命令, 他控制高可用服务器对其他服务器的电力供应
主服务器可以复位备用服务器的电源
备用服务器也可以复位主服务的电源
三 高可用解决方案概述
1 active/passive
只有当主节点故障时, 备用节点才会启用
2 shared failover
最后一个设备作为前面几台服务器的备用服务器节点
3 N to N redundancy
需要有群集文件系统, 能够实现对同一资源的并发访问
群集的规划和设计
软件
群集类型: A/P,A/A....
操作系统吗: RedHat/CentOS,suse
群集软件: pacemaker+corosync...
群集配置: 群集名称, 资源依赖, 次序等约束
硬件
服务器:
HCL, 带外管理, 冗余电源
网络:
将业务, 心跳, 存储, 带外管理网络分开
网卡的捆绑, 冗余
存储:
控制器, 接口, raid 级别
空间规划
二 基于 NFS 共享存储的集群搭建
一 环境准备
1 本地 yum 源, 通过本地挂载配置进行配置
2 网络 yum
- [pacemkaker]
- name=pacemaker
- baseurl= https://mirrors.aliyun.com/centos/7/os/x86_64/
- gpgcheck=0
3 安装软件包
yum -y install pacemaker corosync pcs psmisc policycoreutils-python fence-agents-all
二 群集节点的准备
1 配置主机名及解析
2 配置 SSH key 互信
3 配置时钟
4 配置防火墙相关(本实验关闭防火墙和 SELinux, 生产环境不建议关闭)
三 群集创建
1 配置 pcs 守护程序
2 设置 hacluster 账户密码
安装群集软件包时, 会创建一个账户 hacluster, 它的密码是禁用的
此账户用于群集间通信时的身份验证
必须在每个节点设置其密码后并启用此账户
3 集群配置文件
群集及 pacemaker 配置文件
配置文件为 corosync.conf 和 cib.xml, 默认不存在
corosync.conf 文件提供 corosync 使用的集群参数
cib.xml 是 xml 文件, 存储集群配置及所有资源的信息, pcsd 守护程序负责整个节点上同步 CIB 的内容
最佳策略
虽然可以手工创建, 修改, 但建议通过 pcs 工具进行管理和维护
4 认证组成群集的节点
5 配置和同步群集节点
6 在群集节点中启动群集资源并查看图形化界面相关
图形化界面: 用户名为 hacluster 密码为前面设置认证时使用的密码
四 共享存储配置和挂载
1 NFS 相关配置
2 置将虚拟机迁移到共享存储中
3 手动迁移测试
4 此处需要将磁盘的高级选项改为 none
5 配置并迁移资源
将虚拟的有 KVM 放权
virsh undefine rhel7.3
- pcs resource create rh7.3 ocf:heartbeat:VirtualDomain \
- hypervisor="qemu:///system" \
- config="/vm/qemu_config/rhel7.3.xml" \
- migration_transport=SSH \
- meta allow-migrate="true" priority="100" \
- migration_transport=SSH \
- op start timeout="120s" \
- op stop timeout="120s" \
- op monitor timeout="30" interval="10" \
- op migrate_from interval="0" timeout="120s" \
- op migrate_to interval="0" timeout="120"
6 关闭脑裂
并查看状态
五 迁移测试
pcs resource move X
pcs resource move X Y
其中如果选择第一个, 如果有多个节点, 则其会根据集群内部算法进行计算决定迁移的目标节点, 如果选择第二个, 则 Y 表示目标节点, X 表示资源名称
配置节点 standby/unstandby
stop 节点进行测试, 资源自动迁移
服务运行的情况下进行的
六其他相关资源及配置
1 配置群集的 stonith
二 配置基于 iscsi 存储的服务和配置 stonith (disk)
1 基本概述
在 SAN 中, 主机一般都是 initiator, 存储设备则是 target
initator
scsi 会话的发起方
向 target 请求 LUN, 并将数据的读写指令发送给 target
target
接受 scsi 会话的一方
他接收来自 initiator 的指令, 为 initiator 提供 LUN, 并实现对 LUN 的读写
Linux 上主要的开源 target 项目
Linux scsi target - STGT /tgt (之前的版本)
Linux-IO target-LIO Linux 2.6.38 开始纳入内核 , 内核模式的模拟, 对用户提供友好的管理工具
SCST-Generic SCSI subsystem for Linux
Linux-IO target 概述
Linux-IO target 在 Linux 内核中, 用软件实现各种 SCSI target
前端
FC FCOE ISCSI 1394 infiniband USB vhost
架构
支持 SSE4.2 高性能, 多线程
支持 x86,ia64,alpha,cell PPC,ARM, MIPS 等多种 CPU
支持高可用, 负载平衡集群
2 环境准备:
同上
3 安装 Linux 的存储服务器
1 安装 targetcli 软件包
2 配置 target
1 创建存储对象
2 创建 ISCSI target
3 配置 target portal group(TPG)
1 配置 portals
2 配置 LUN: 添加块设备, ramdisk,fileio 三个 LUN
3 配置 ACL
查看 ISCSI initator 查看其 IQN
为每个 initiator 创建 ACL
4 保存配置
5 设置 target 服务自启动
6 检查配置
Linux-IO target
Linux 上主要的开源 target
Linux-IO
7 使用存储上 40GB 的磁盘
- pcs stonith create scsi-shooter fence_scsi pcmk_host_list="node1 node2"\
- devices="/dev/disk/by-id/wwn-0x6001405876a238fd00745d198419fc60" \
- meta provides=unfencing \
4 安装群集文件系统软件
OCFS2 和 GFS2 是群集文件系统
5 配置 DLM
需要进行克隆和两个节点上都存在
- pcs resource create dlm ocf:pacemaker:controld \
- op monitor interval=30s \
- on-fail=fence clone interleave=true ordered=true
6 LVM-cluster 安装和配置
其运行必须是两个节点都能运行
- pcs resource create clvmd ocf:heartbeat:clvm \
- op monitor interval=30s \
配置约束:
次序约束和位置约束:
查看约束:
创建 LV
在集群中创建 LV 与在单节点上创建 LV 是一样的
其必须保证群集基础架构运行正常, 并有 quorate 法定人数
1 创建一个分区, 设置为 8e 及 LVM
刷新磁盘:
7 创建 GFS2 文件系统
相关参数讲解:
-p 使用的协议
-j 保存的日志的份数
-t 指定的锁定的表, 其方式是群集的名称和其他
最后指定块设备
向集群中添加 GFS2 文件系统
添加克隆的资源, 即在每个节点上均挂载文件系统
- pcs resource create VMFS ocf:heartbeat:Filesystem
- device="/dev/vg0/lv0" directory="/vm" fstype="gfs2" clone
配置约束
8 添加虚拟机资源并配置约束
配置和处理相关约束
9 迁移虚拟机测试
来源: http://www.bubuko.com/infodetail-2911855.html