1、LInux HA Cluster 2、各层次的实现及组合方式及介绍 3、pcs 配置 corosync + pacemaker 高可用集群 4、crmsh 配置 corosync + pacemaker 高可用集群 5、Heartbeat信息传递方式 6、手动配置 corosync + pacemaker (Web NFS VIP) 7、HA Cluster工作模型 ================================================================================================================================================ LInux HA Cluster 1、集群类型 负载均衡集群(Load balancing (LB) clusters) 高可用性集群(High-availability (HA) clusters) 高性能计算集群(High-performance (HPC) clusters) LB: 传输层:LVS 应用层:nginx、haproxy、httpd、perlbal、ats、varnish HA: vrrp:keepalived AIS:heartbeat、OpenAIS、corosync/pacemker、cman | corosync是OpenAIS的一个实现 2、高可用衡量指标 MTBF:Mean Time Between Failure 平均无故障时间 MTTR:Mearn Time to Repair 平均修复时间 A=MTBF/(MTBF+MTTR) 0-1之间的一个数值,数值越高,可用性越高。 高可用性 High availability,缩写为 HA 指系统故障无法运行使用的时间与系统总运行时间的比较。 A(可用性) MTBF(Mean Time Between Failure,平均无故障时间) MTTR(:Mean Time To Restoration Repair,平均修复时间) A=MTBF/(MTBF+MTTR) 可用性 年故障时间 99.9999% 32秒 99.999% 5分15秒 99.99% 52分34秒 99.9% 8小时46分 99% 3天15小时36分 3、集群之间的信息层 Messageing Layer:传递心跳信息的功能,是AIS提供的一系列功能调用接口。Resoure Manager 根据 Massagening Layer 输出的接口调用,监控节点的状态,监控不仅是硬件节点还包括软件状态,Resoure Manager 不仅向下负责硬件节点的状态检测, 而且向上负责软件状态的检测。事实上 Resoure Manager 的向上一层还有一个层次 Local Resoure Manager,对本地资源的管理,实现 启动、停止、重启、状态等的功能。 当出现网络分区的状况时,一定得由投票系统(vote system)决定代表集群的一方,节点多的一方会代表集群的一方,随后必须要实现资 源隔离操作,隔离操作的机制有: STONITH:shoot the other node on the head ,节点级别的隔离。例如在硬件层面的可以直接将机器切断 Fence:资源级别的隔离 在两节点的集群或者偶数个节点的集群中,投票系统则有可能不生效,此时需要用到 quorum disk 机制,让节点定时的在他们所共享的一 块存储设备上进行写数据,如果检测不到某节点在存储设备上写数据,则说明此节点发出故障。 4、N-M集群模型 N个节点运行M个服务,M小于N,即对多个服务进行高可用。例如:A B C D E 五个节点,A 节点运行 web 服务,B 节点运行数据库服务, 同样 C D 节点都运行了服务,E 节点空闲作为 A B C D 任意一个服务节点的备用节点。 故障转移域 failover domain 将 A B C D 节点和 E 节点分别进行组合,称为一个个主机组,AE BE CE DE ,当 A B C D 任何一个主机上的服务出现故障时,则将 服务切换至 E 节点。 5、资源的约束性 位置约束:资源对节点的倾向性,其范围是 (-oo,+oo) 当某个资源对节点位置约束为 -oo,且只剩下此节点可用时,资源依然会使用此节点,但如果有其他节点可用时,资源会立马 转移到其他可用节点。 如果两个资源对某一个节点的倾向性一个为 -oo ,另一个为 +oo,则此时需要进行倾向性运算: 任何值 + 无穷大 = 无穷大 任何值 + 负无穷大 = 负无穷大 无穷大 + 负无穷大 = 负无穷大 排列约束:资源彼此间是否能运行于同一个节点的倾向性 (-oo,+oo) -oo 表示两个资源永远不可能运行在一个节点上,+oo 则表示这两个资源必须运行于同一个节点 顺序约束:多个资源在同一个节点上启动顺序依赖关系 (-oo,+oo) - location 位置约束 - colocation 排列约束 - order 顺序约束 failover 故障转移 failback 节点返回集群 6、资源类型 primitive:主资源,原始资源,在集群中只能运行一个实例 clone:克隆资源,在集群中可运行多个实例 匿名克隆、全局唯一克隆、状态克隆(主动、被动) multi-state(master/slave):克隆资源的特殊实现 group:组资源,包含一个或多个资源,通过组进行统一调度 7、资源属性 priority 优先级 target-role 角色,集群在那种状态系下保存此资源。tarted|stopped|master is-managed 是否允许集群管理此资源 resource-stickiness 资源粘性,资源对当前所在的节点的倾向性 allow-migrate 是否允许迁移 ================================================================================================================================================ HA各层次的实现及组合方式及介绍 1、Messaging Layer (通信层) heartbeat corosync cman 2、Cluster Resource Manager(CRM) (资源管理层) [heartbeat v1] haresources [heartbeat v2] crm [heartbeat v3] pacemaker rgmanager 3、组合方式 heartbeat v1 + (haresources) heartbeat v2 + (crm) heartbeat v3 + (pacemaker) corosync v1 + (pacemaker {pacemaker作为插件} ) corosync v2 + (pacemaker {pacemaker作为独立服务} ) corosync v1(消息传递功能) + (cman{cman作为插件}投票系统) + (pacemaker) 4、RHCS Red Hat Cluster Suite RHEL5:cman + rgmanager + conga RHEL6:cman + rgmanager + conga corosync + pacemaker corosync + cman + pacemaker RHEL7:corosync + pacemaker 5、资源管理器的配置接口 heartbeat v1 haresources # 配置文件 haresources heartbeat v2 crm # XML格式的配置文件,每个节点运行一个 crmd 5560/tcp 守护进程,命令行接口 crmsh; GUI接口:hb-gui heartbeat v3 pacemaker # crmsh(suse研发),pcs接口; GUI接口:hawk,LCMC,pacemaker-gui rgmanager # 配置接口:cluster.conf|system-config-cluster|conga|cman_tool|clustat 6、Resource Agent(由资源管理器通过子程序提供 Local Resoure Manager) Systemd:/etc/systemd/system目录的服务脚本 LSB:/etc/rc.d/init.d/ OCF:(Open Cluster Framework) ...... heartbeat pacemaker {本身不是服务,没有LSB、systemd脚本的服务可以使用OCF代理} service /etc/hd.d/haresources.d/ 目录下脚本 通过服务类型 STONITH 7、Pacemaker介绍 Pacemaker 是一个集群资源管理器。它通过检测并通过利用集群基础设施(Corosync或heartbeat)提供的消息通信能力从节点和资源级故障恢复 达到最大可用性群集服务(亦称资源)。 8、corosync介绍 1、简介 Corosync是集群管理套件的一部分,它能够通过简单的配置文件配置 (/etc/corosync/ 目录下) 定义节点间消息传递的方式和协议。 2、集群组成层次 (1).资源代理(Agent Resource) (2).资源分配层(Resource Allocation) 集群资源管理器(Cluster Resource Manager) # 每个节点都有 本地资源管理(Local Resource Manager) # 每个节点都有 策略引擎(Policy Engine) # 只有 指定协调器(Designated Coordinator) 节点有 集群事务信息库(Cluster Informatin Base) # 每个节点都有,其他节点的事务信息都是DC节点的副本 (3).消息交换/基础结构(Messageing/Infrastructure) 传递集群心跳信息及集群事务信息 理解:策略引擎只存在于指定协调(DC)节点上,用来集群事务的决策。当有集群事务决策后,借助于消息交换/基础结构层次向 集群中传递事务信息。 整个集群的信息都保存于集群事务信息库,使用集群管理器管理集群时,连接到DC上,然后将配置信息同步到所有节点上 ================================================================================================================================================ pcs 配置 corosync + pacemaker 高可用集群 1、组合 corosync v2 + pacemaker,corosync v2版有自己的投票系统(vote system),pacemaker作为独立的服务运行。配置 corosync v2 +pacemaker 的配置 方式有: 分别进行手动安装配置 使用外在的工具配置,全生命周期的配置管理 pcs 、crmsh 2、pcs pcs 是一个 corosync 和 pacemaker 的配置工具,可以方便的修改创建基于 pacemaker 的集群系统。https://github.com/ClusterLabs/pcs 由 pcsd 守护进程接受指令。 3、实现高可用集群的前提 1.各节点时间同步。通过 chronyd 服务进行时间同步 # 可以使用chrony服务进行时间同步,具体配置参照 --- 笔记《Leeplived》 # 查看两个节点时间是否同步 $ date ;ssh node3 "date" 2.各节点能够互相解析主机名。通过修改 /etc/hosts 配置文件。所有节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主 机名称需要跟 uname -n 命令的结果保持一致 # node2 $ hostnamectl set-hostname node2 $ vim /etc/hosts 172.18.26.3 node2 172.18.26.4 node3 # node3 $ hostnamectl set-hostname node3 $ vim /etc/hosts 172.18.26.3 node2 172.18.26.4 node3 3.是否会用到仲裁设备 4.设定两个节点可以基于密钥进行ssh通信 利用脚本实现免密 ssh 通信 4、安装配置(以下如无特别说明,均都在node3,node4节点都执行) Note:使用 pcs 工具进行管理集群 1、安装 $ yum install pcs corosync pacemaker 2、启动并设置开机启动 $ systemctl enable pcsd.service $ systemctl start pcsd.service $ systemctl enable corosync.service $ systemctl enable pacemaker.service 3、设置密码 $ echo 'abcd' | passwd --stdin hacluster 4、密码认证(node2和node3任意一个节点执行即可) [ root@node2 ]# pcs cluster auth node2 node3 Username: hacluster Password: node3: Authorized node2: Authorized 5、创建集群 $ pcs cluster setup --name cluster1 node2 node3 Destroying cluster on nodes: node2, node3... node3: Stopping Cluster (pacemaker)... node2: Stopping Cluster (pacemaker)... node2: Successfully destroyed cluster node3: Successfully destroyed cluster Sending cluster config files to the nodes... node2: Succeeded node3: Succeeded Synchronizing pcsd certificates on nodes node2, node3... node3: Success node2: Success Restarting pcsd on the nodes in order to reload the certificates... node3: Success node2: Success Note: 1.将 node2 和 node3 节点创建为集群,集群名称为cluster1 2./etc/corosync/ 目录下会自动生成 corosync.conf 配置文件 3.corosync v2 版本使用 udpu 进行同行,corosync v1 版本使用组播或多播,默认是多播形式进行通信 4.集群中两个节点的配置文件应该相同 6、启动集群 $ pcs cluster start --all node2: Starting Cluster... node3: Starting Cluster... 7、检测各节点通信状态 [ root@node2 ~ ]# corosync-cfgtool -s Printing ring status. Local node ID 1 RING ID 0 id = 172.18.26.3 status = ring 0 active with no faults 8、检查集群成员关系及Quprum API [ root@node2 ~ ]# corosync-cmapctl | grep members runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0 runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip(172.18.26.3) runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1 runtime.totem.pg.mrp.srp.members.1.status (str) = joined runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0 runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip(172.18.26.4) runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1 runtime.totem.pg.mrp.srp.members.2.status (str) = joined 9、查看集群状态 [ root@node2 ~ ]# pcs status Cluster name: cluster1 WARNING: no stonith devices and stonith-enabled is not false # 开启了stonith-enabled属性但却没有配置stonith设备所致 Stack: corosync # 传递底层通信信息的是什么Messages Layer Current DC: node3 (version 1.1.15-11.el7-e174ec8) - partition with quorum # 指定协调员,称为DC节点,如果DC故障,则会自动选举 Last updated: Fri Sep 22 22:56:10 2017 Last change: Fri Sep 22 22:45:39 2017 by hacluster via crmd on node3 # 上一次的更新时间和改动时间 2 nodes and 0 resources configured # 节点和资源数量信息 Online: [ node2 node3 ] No resources Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled 10、pacemaker的全局属性配置 pcs property [list|show [ | --all | --defaults]] | [--all | --defaults] 选项: list # 显示配置的属性项 list --all # 显示全局所有属性项 示例: # 关闭资源隔离功能 $ pcs property set stonith-enabled=false 11、显示集群错误信息 crm_verify -L -V 6、corosync.conf配置文件 man corosync.conf totem { # 定义集群所有节点之间通过[通信方式]传递集群心跳信息及集群事务信息 version: 2 # corosync版本 secauth: off # 安全认证功能是否开启 cluster_name: cluster1 # 集群名称 transport: udpu # 传输方式 } nodelist { # 集群列表 node { ring0_addr: node2 nodeid: 1 } node { ring0_addr: node3 nodeid: 2 } } quorum { # 仲裁机制 provider: corosync_votequorum two_node: 1 # 是否为2节点集群 } logging { # 日志配置段 to_logfile: yes # 日志文件 logfile: /var/log/cluster/corosync.log to_syslog: yes } ================================================================================================================================================ crmsh 配置 corosync + pacemaker 高可用集群 1、crmsh 基于ssh进行远程管理,依赖于 pssh 程序进行通信 2、安装 Note: 1.CentOS7默认没有安装crmsh,所以需要自己手动安装,可以在两个节点都安装crmsh,也可以只在一个节点安装crmsh 2.可以到 crmsh 官方站点下载 rpm 包手动安装或者安装官方提供的 yum 源进行安装。https://crmsh.github.io/ 官方yum源配置文件: [network_ha-clustering_Stable] name=Stable High Availability/Clustering packages (CentOS_CentOS-7) type=rpm-md baseurl=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/ gpgcheck=1 gpgkey=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/repodata/repomd.xml.key enabled=1 3.crmsh的运行依赖于pssh程序,确保pssh程序安装、 4.需要安装的rpm包有: crmsh-3.0.0-6.2.noarch.rpm crmsh-scripts-3.0.0-6.2.noarch.rpm python-parallax-1.0.1-29.1.noarch.rpm pssh-2.3.1-5.el7.src.rpm 3、管理命令 Note:crm可以直接在 shell 命令行执行,也可以今如交互式命令行接口执行命令 4、示例(配置高可用httpd服务) 1、说明:两个资源 访问服务的IP:172.18.26.254 httpd程序的运行 集群环境默认情况下是负载均衡的法则,从而会将资源尽可能的平均分配到不同的节点,而这种场景下必须将IP和httpd 运行与同一个节点,所以要将资源定义为组或者定义排列约束规则 2、连个节点都安装httpd服务,为了可能体现实验效果,为httpd服务提供不同内容的index.html文件,安装以后资源将归 集群组件管理,所以将httpd服务停止。 3、命令行配置 Note: help COMD 查看帮助信息 info SUN_COMD 查看子命令帮助 crm ra classes # 查看资源类别 list [] # 查看资源列表 例如:list ocf pacemaker | list lsb | list systemd # 配置IP 进入 configure 模式下 # 查看帮助 help primitive # 示例配置及用法(资源配置) { Usage: primitive {[:[:]]|@