corosync+pacemaker实现高可用(HA)集群(一)

    重要概念

在准备部署HA集群前,需要对其涉及的大量的概念有一个初步的了解,这样在实际部署配置时,才不至于不知所云

资源、服务与主机(又称节点)的关系

  • 资源包括vip,httpd,filesystem等;
  • 可整合多个资源形成一个服务;
  • 服务必运行在某个主机上,主机上也可不运行服务(此为空闲主机);
  • 服务里的所有资源应该同时运行在同一个节点上,实现方式有2种:
    • 资源组;
    • 排列约束

资源类型

  • primitive(或native):原生资源,只能运行于一个节点
  • group:组资源
  • clone:克隆资源,只能将原生资源定义为克隆属性;一般用于定义stonith设备的参数(可定义"总克隆数"和"每个节点最多可运行的克隆数"等参数)
  • master/slave:主从资源,也是克隆类型的,只能克隆2份;主的能读能写,从的不能读也不能写(如drbd的实现)

target-role:即资源刚配置完成时是否启动的属性

  • Stopped:资源不启动;
  • Started:选择合适节点启动;
  • Master:资源启动,并提升其启动在主节点上;

no-quorum-policy:当集群故障,分裂为多个部分(称为"集群分区"),当某一集群分区因无法满足"法定人数原则(即quorum)"而无法选举出主节点时,此分区中节点上的资源可作如下处理

  • stop:停止所有资源,默认值
  • ignore:继续管理所有资源,即忽略集群故障,在双节点实验环境中需要
  • freeze:继续管理资源,但不再接受来自其他集群分区下节点的资源
  • suicide:隔离集群分区下的所有节点

资源转移的方式

rgmanager

  • failover domain即故障转移域,利用优先级(priority)的机制决定主节点故障时,资源的转移流向;

pacemaker:利用资源约束的机制,有如下3种类型

  • 资源黏性:资源运行在当前节点上是否远离的倾向性,数值越大表示越倾向留在当前节点
  • 位置约束:资源更倾向于运行在哪个节点上,使用一个数值来表示约束的大小,数值越大越倾
    • inf:无穷大
    • n:整数值
    • -n:负数值
    • -inf:负无穷大
  • 排列约束:资源运行在同一节点的倾向性
    • inf:无穷大,表示2个资源一定要运行在一起
    • -inf:负无穷大,表示2个资源绝不运行在一起
  • 顺序次序:定义资源的启动次序及关闭次序

HA集群的工作模型

  • A/P:two nodes,工作于主备模型;
  • N-M:N>M,N个节点,M个服务;活动节点为M,空闲节点为N-M个;
  • N-N:N个节点,N个服务;没有空闲节点;
  • A/A:two nodes,双主模型,双主模型最适用的场景是对LVS做高可用;

 

 


配置部署HA集群

前期准备

各节点(即主机)的主机名与"uname -n"的结果保持一致

 

 

 

1

# Node1+Node2:

vi /etc/hosts

172.16.21.16   node1.lamp.com node1

172.16.21.17   node2.lamp.com node2

# Node1:

sed -i 's@\(HOSTNAME=\).*@\1node1.lamp.com@g'  /etc/sysconfig/network

hostname node1.lamp.com

# Node2:

sed -i 's@\(HOSTNAME=\).*@\1node2.lamp.com@g' /etc/sysconfig/network

hostname node2.lamp.com

各节点时间保持一致

 

# 添加计划任务,与NTP时间服务器保持一致即可

# Node1+Node2:

crontab -e

# Dscrip: Time Sync

# CTime: 2014.04.19

*/3 * * * * /usr/sbin/ntpdate 172.16.0.1 &>/dev/null

各节点间可基于密钥进行SSH通信,而无需密码

 

# Node1:

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2

# Node2:

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1

 

部署方案一:heartbeat v2

安装配置

 

yum -y install perl-TimeDate net-snmp-libs libnet PyXML

rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm heartbeat-gui-2.1.4-12.el6.x86_64.rpm

# heartbeat:主程序包

# heartbeat-pils:提供通用插件和接口加载库

# heartbeat-stonish:提供了屏蔽(又称"爆头")其他节点的接口

# heartbeat-gui:为管理集群提供的gui配置接口

cd /usr/share/doc/heartbeat-2.1.4

cp ha.cf haresources authkeys /etc/ha.d  # 拷贝配置文件

vi /etc/ha.d/ha.cf # 配置主配置文件,添加节点信息

node node1.lamp.com

node node2.lamp.com

# 其它可参考配置:

# logfile /var/log/ha-log # 日志文件,可查看集群启动信息

# keepalive 2 # 心跳信息发送频率,此为2s一次

# deadtime 30 # 若此时间内未收到心跳信息,则判定节点死亡,此为30s

# initdead 120 # 主机刚启动时,可允许心跳信息的接收时间,至少需要是是deadtime的2倍

# udpport 694 # 监听端口,默认就是694

# bcast eth0 # 通过eth0接口广播心跳信息

# auto_failback on # 打开故障转回功能,即当故障主节点恢复后,资源仍将转移回主节点的过程

# ping 172.16.0.1 # 指定一个虚拟集群节点,用于生成quorum

# respawn hacluster /usr/lib/heartbeat/ipfail # 在heartbeat启动时随之启动的程序,如ipfail,可用于访问控制

# compression bz2 # 定义数据压缩格式

vi /etc/ha.d/authkeys # 配置使用sha1加密算法

auth 2

#1 crc

2 sha1 e3266a6f709a5c3e # 密码可通过命令"openssl rand -hex 8"生成

#3 md5 Hello!

chmod 600 /etc/ha.d/authkeys # 修改密钥文件权限

vi /etc/ha.d/haresources # 添加如下信息即可

node1 172.16.25.55 httpd # 表示在集群的主节点(尽量是node1)上先配置服务IP(就是一个虚拟IP),然后启动httpd服务

/usr/share/heartbeat/ha_propagate # 同步配置文件至其他节点

service heartbeat start # 启动hearbeat服务

ss -antupl |grep 694 # 验证启动进程和端口

 

在heartbeat中HA集群的配置方式

主要有3种:haresources文件,crmsh接口和gui图形配置接口

haresources文件

 

格式:node-name resource1 resource2 ... resourceN

# 资源格式:

# 服务IP资源格式:IPaddr::IP地址/子网掩码/配置的网卡/广播地址,如IPaddr::135.9.8.7/24/eth0/135.9.8.210

# LSB资源格式:脚本名称,如httpd

# 共享文件系统资源格式:Filesystem::挂载源::本地挂载目录::挂载文件系统类型,如Filesystem::172.16.251.163:/www/phpwind.com::/www/phpwind.com::nfs

实例:

# 配置虚拟IP,NFS目录挂载及httpd服务,并按书写顺序在node1上依次启动

node1 172.16.25.51 Filesystem::172.16.251.163:/www/phpwind.com::/www/phpwind.com::nfs httpd

# 缺点:利用文件的进行进行资源的管理配置过于简陋,故不推荐使用

crmsh接口配置

 

vi /etc/ha.d/ha.cf

crm on # 添加此行,即打开crm配置接口

service heartbeat restart # 重启heartbeat服务

ps -ef | grep mgmtd; ss -antupl |grep 5560 # 检查mgmtd进程存在,且监听在5560端口上

crm_mon # 查看集群状态信息

crm_sh # 进入集群命令行配置界面

passwd hacluster # 为heartbeat生成的hacluster用户添加密码

hb_gui & # 进入GUI图形配置界面,对集群进行相关配置,需要填写上述密码哦

  • crm_sh和hb_gui两种配置方式选其一即可;
  • crm_sh的使用可在内部使用help获得,但帮助信息很有限,不建议使用;
  • hb_gui的方式目前测试只在Xshell终端下可用,iTerm就不可以,具体配置自行摸索即可;

 


 

corosync+pacemaker实现高可用(HA)集群的更多相关文章

  1. heartbeat+nginx搭建高可用HA集群

    前言: HA即(high available)高可用,又被叫做双机热备,用于关键性业务.简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至B机器 ...

  2. Redis高可用复制集群实现

    redis简单介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis 与其他 key - value 缓存产品有以下三个特点: 支持数据的持久化,可以将 ...

  3. Keepalived+Nginx+Tomcat 实现高可用Web集群

    https://www.jianshu.com/p/bc34f9101c5e Keepalived+Nginx+Tomcat 实现高可用Web集群 0.3912018.01.08 20:28:59字数 ...

  4. 如何安装一个高可用K3s集群?

    作者介绍 Janakiram MSV是Janakiram & Associates的首席分析师,也是国际信息技术学院的兼职教师.他也是Google Qualified Developer.亚马 ...

  5. 使用kubeadm部署一套高可用k8s集群

    使用kubeadm部署一套高可用k8s集群 有疑问的地方可以看官方文档 准备环境 我的机器如下, 系统为ubuntu20.04, kubernetes版本1.21.0 hostname IP 硬件配置 ...

  6. 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  7. 构建高可用ZooKeeper集群

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

  8. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

  9. 构建高可用ZooKeeper集群(转载)

    ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 Zo ...

随机推荐

  1. 5个基于css3超炫的鼠标滑动按钮动画

    今天给大家分享5个基于css3超炫的鼠标滑动按钮动画.这5个按钮鼠标经过的时候有超炫的动画效果.这5个按钮适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之 ...

  2. Creating Your Own Server: The Socket API, Part 2

    转:http://www.linuxforu.com/2011/09/creating-your-own-server-the-socket-api-part-2/ By Pankaj Tanwar  ...

  3. c++ 设计模式4 (Strategy)

    3.2 Strategy (策略模式) 动机:在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂,而且有时候支持不使用或不常使用的算法也是 ...

  4. 1.4.6 其他Schema元素

    这里描述了schema.xml中的其他几个重要的元素. 唯一主键-Unique Key uniqueKey元素一篇文档的唯一标记,它几乎总是保证您的应用程序设计,例如,如果你更新索引中的文档,需要用到 ...

  5. 在提交SVN时有时候会报svn is already locked 错误

    svn is already locked 解决方案: 如题所述经常在更新代码的时候会产生这样的问题!并且在对应的目录上操作Clean Up 没有任何的效果!如下解决方法. 在出错文件夹下,鼠标右键T ...

  6. C#读取Word模板替换相应的字符串(标签)生成新的Word

    在平常工作中,生成word的方式主要是C#读取html的模板文件处理之后保存为.doc文件,这样的好处是方便,快捷,能满足大部分的需求.不过有些特殊的需求并不能满足,如要生成的Word为一个表格,只是 ...

  7. Oracle基础 TO_CHAR函数参考(转)

    Postgres 格式化函数提供一套有效的工具用于把各种数据类型(日期/时间,int,float,numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成原始的数据类型. 注意:所有格式化 ...

  8. springmvc(3)--数据类型转换

    springmvc 配置 中conversionService可以配置类型转换,springmvc 参数绑定 中各种绑定方式和注解就是使用的这些转换器 一.先看下spring提供的内建类型转换器 第一 ...

  9. POJ 3268 Silver Cow Party (Dijkstra)

    Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13982   Accepted: 6307 ...

  10. zoj 3742 Delivery 好题

    Delivery 题目还是自己看吧 - -! 看似图论,实际上是一个考察思维以及数据结构的题. 我们对于先前和向后的边分别进行统计. 对询问离线. 小边按照左端点从大到小排序. 1.对于向后的边,询问 ...