centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课
centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课
heartbeat是Linux-ha项目中的一个组件
http://linux-ha.org/wiki/Main_Page
一般服务器都有两个网卡或者都有串口,一个网卡专门心跳,或者用串口线 做心跳线 ,COM口串口不能设置ip
上半节课
heartbeat搭建
下半节课
heartbeat测试
主上停止heartbeat服务
测试脑裂
两边都禁用ping仲裁
HA 即 (high available)高可用,又被叫做双机热备,用于关键性业务。 简单理解就是,有两台机器A和B,正常是A提供服务,B待命闲置
当A宕机或服务宕掉,会切换至B机器继续提供服务。常用实现高可用的开源软件有heartbeat和keepalived,其中keepalived有负载均衡的功能。
下面我们使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服务。
试验准备:
eth0:业务网卡
eth1:心跳网卡
主服务器有两个资源 1、nginx服务 2、VIP
三个机器, 都是centos6.5,两个业务网卡eth0 ip如下:
aming :192.168.31.166
aming1 :192.168.31.100
仲裁 192.168.21.1
VIP:192.168.31.110
两个心跳eth1 ip如下,要能够互相ping通:
aming :192.168.21.166
aming1: 192.168.21.100
如何添加心跳网卡:复制eth0 -》eth1
然后uuid删除掉,mac地址删除掉,只配ip就行和掩码就行
心跳网卡不需要设置网关,因为它不需要上网
eth1配置
启动网卡
ifup eth1
下面操作1-5都是在两个机器上操作
1. hostname 设置好,分别为aming 和 aming1
2. 关闭防火墙 iptables -F;
关闭selinux: setenforce 0
3. vi /etc/hosts // 增加内容如下:
192.168.31.166 aming
192.168.31.100 aming1
4. 两个机器都安装epel扩展源:
yum install -y epel-release
#rpm -ivh 'http://www.lishiming.net/data/attachment/forum/epel-release-6-8_32.noarch.rpm'
5. 两个机器都安装heartbeat / libnet
同时还需要安装libnet工具包,libnet是一个高层次的API工具(https://sourceforge.net/projects/libnet-dev/)
yum install -y heartbeat* libnet nginx
6. 主上(aming)配置
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/
cd /etc/ha.d
vi authkeys //加入
//验证加密方式,两台HA机器之间的暗号
auth
# crc
# sha1 HI! //sha1更安全
md5 Hello!
chmod 600 authkeys
vi haresources //加入
aming 192.168.31.110//eth0: nginx //指定虚拟vip 网段 虚拟网卡 aming这台机上的eth0已经有ip了,需要新建一个eth0:0 和承载HA的应用服务 ,注意要确保nginx已经在/etc/init.d/下,否则heartbeat会找不到nginx
vi ha.cf //改为如下内容:
debugfile /var/log/ha-debug //高可用服务例如nginx 切换不了 启动不起来的调试信息
logfile /var/log/ha-log //日志
logfacility local0 //日志级别
keepalive //心跳检测间隔 单位:秒
deadtime //认为死掉的时间 单位:秒
warntime //不确定是否死掉 先发警告
initdead //再次检测是否死掉 可以判断机器是否是重启的状况
udpport //使用udp方式检测 udp端口号
ucast eth1 192.168.21.100 //ucast ip单播的形式只发送到指定ip,bcast 广播形式发送到所有机器 注意要写对方的ip和网卡
auto_failback on //主节点起来之后是否自动failback回去
node aming //主节点 写hosts是因为在ha.cf里只能写主机名不能写ip,主备都需要绑定hosts文件
node aming1 //从节点
ping 192.168.21.1 // 192.168.21.1为仲裁节点
respawn hacluster /usr/lib/heartbeat/ipfail //当启动heartbeat时同时启动ipfail来检测心跳 注意:要ls /usr/lib/heartbeat/ipfail 看一下是否有这个文件,还要注意如果是64位系统,可能在/usr/lib64/heartbeat/ipfail ,hacluster为启动heartbeat时的用户 ,也就是说ipfail和heartbeat都是用hacluster这个用户来运行
7. 把主上的三个配置拷贝到从上:
cd /etc/ha.d/
scp authkeys ha.cf haresources aming1:/etc/ha.d/
8. 到从上(aming1) 编辑ha.cf
vi /etc/ha.d/ha.cf //只需要更改一个地方
ucast eth1 192.168.21.100 改为 ucast eth1 192.168.21.166
9. 启动heartbeat :
先stop nginx ,因为heartbeat 带动nginx启动 ,先主,后从(这里主上启动heartbeat会有点长,因为它要等从启动好heartbeat之后它才真正启动)
service heartbeat start
查看日志
less /var/log/ha-log
启动ipfail服务
ipfail是一个进程,它不会监听端口
less /var/log/ha-log
tcpdump -nn -i eth1 not port 22
694 udp端口
icmp
10. 检查测试
ifconfig 看是否有 eth0:0
ps aux |grep nginx 看是否有nginx进程
11. 测试1
主上故意禁ping
iptables -I INPUT -p icmp -j DROP
主上运行下面语句
tail -f /var/log/ha-log
从上运行下面语句
tail -f /var/log/ha-log
12. 测试2
主上停止heartbeat服务
service heartbeat stop
13. 测试脑裂 为了保证不出现脑裂,一定要保证心跳线的可靠,单独网卡做心跳网卡,最好直连串口不经过交换机
主和从上都down掉eth1网卡
主
ifdown eth1
从
ifdown eth1
恢复 这时候nginx和vip都在从上
主
ifup eth1
/etc/init.d/heartbeat restart //重启主上的heartbeat服务,时间可能要1分钟
因为设置了auto_failback on,所以主重启完heartbeat服务之后会把nginx和vip failback回来
从
ifup eth1
14、两边都禁用ping仲裁
主
iptables -I INPUT -s 192.168.21.1 -j DROP
tail -f /var/log/ha-log
从
iptables -I INPUT -s 192.168.21.1 -j DROP
注意:如果把从的heartbeat服务停止,那么主的heartbeat服务也会停止,nginx和vip都会停止
因为主从要保证HA必须两边的heartbeat服务是没有问题的
这也是主启动heartbeat服务慢的原因:先主,后从(这里主上启动heartbeat会有点长,因为它要等从启动好heartbeat之后它才真正启动)
扩展学习
关于heartbeat配置文件参考文档: http://blog.chinaunix.net/uid-20749043-id-1878328.html
heartbeat和keepalived比较 http://blog.csdn.net/yunhua_lee/article/details/9788433 http://zhengdl126.iteye.com/blog/1738012
DRBD工作原理和配置 http://502245466.blog.51cto.com/7559397/1298945
扩展阅读
高可用开源方案 Keepalived VS Heartbeat对比
http://www.kuqin.com/shuoit/20140623/340745.html
最近因为项目需要,简单的试用了两款高可用开源方案:Keepalived和Heartbeat。两者都很流行,但差异还是很大的,现将试用过程中的感受以及相关知识点简单总结一下,供大家选择方案的时候参考。
1)Keepalived使用更简单:从安装、配置、使用、维护等角度上对比,Keepalived都比Heartbeat要简单得多,尤其是Heartbeat2.1.4后拆分成3个子项目,安装、配置、使用都比较复杂,尤其是出问题的时候,都不知道具体是哪个子系统出问题了;而Keepalived只有1个安装文件、1个配置文件,配置文件也简单很多;
2)Heartbeat功能更强大:Heartbeat虽然复杂,但功能更强大,配套工具更全,适合做大型集群管理,而Keepalived主要用于集群倒换,基本没有管理功能;
3)协议不同:Keepalived使用VRRP协议进行通信和选举,Heartbeat使用心跳进行通信和选举;Heartbeat除了走网络外,还可以通过串口通信,貌似更可靠;
4)使用方式基本类似:如果要基于两者设计高可用方案,最终都要根据业务需要写自定义的脚本,Keepalived的脚本没有任何约束,随便怎么写都可以;Heartbeat的脚本有约束,即要支持service start/stop/restart这种方式,而且Heartbeart提供了很多默认脚本,简单的绑定ip,启动apache等操作都已经有了;
使用建议:优先使用Keepalived,当Keepalived不够用的时候才选择Heartbeat
f
centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课的更多相关文章
- Hadoop HA 高可用集群的搭建
hadoop部署服务器 系统 主机名 IP centos6.9 hadoop01 192.168.72.21 centos6.9 hadoop02 192.168.72.22 centos6.9 ha ...
- 七、Hadoop3.3.1 HA 高可用集群QJM (基于Zookeeper,NameNode高可用+Yarn高可用)
目录 前文 Hadoop3.3.1 HA 高可用集群的搭建 QJM 的 NameNode HA Hadoop HA模式搭建(高可用) 1.集群规划 2.Zookeeper集群搭建: 3.修改Hadoo ...
- Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建
目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...
- Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)
声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...
- linux -- 基于zookeeper搭建yarn的HA高可用集群
linux -- 基于zookeeper搭建yarn的HA高可用集群 实现方式:配置yarn-site.xml配置文件 <configuration> <property> & ...
- HA 高可用集群概述及其原理解析
HA 高可用集群概述及其原理解析 1. 概述 1)所谓HA(High Available),即高可用(7*24小时不中断服务). 2)实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件 ...
- Mysql双主双从高可用集群的搭建且与MyCat进行整合
1.概述 老话说的好:瞻前顾后.患得患失只会让我们失败,下定决心,干就完了. 言归正传,之前我们聊了Mysql的一主一从读写分离集群的搭建,虽然一主一从或一主多从集群解决了并发读的问题,但由于主节点只 ...
- Kubeadm 1.9 HA 高可用集群本地离线镜像部署【已验证】
k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,易宝支付,北森等等. kubernetes1.9版本发布2017年12月15日,每三个月一个迭代 ...
- [K8s 1.9实践]Kubeadm 1.9 HA 高可用 集群 本地离线镜像部署
k8s介绍 k8s 发展速度很快,目前很多大的公司容器集群都基于该项目,如京东,腾讯,滴滴,瓜子二手车,北森等等. kubernetes1.9版本发布2017年12月15日,每是那三个月一个迭代, W ...
随机推荐
- UVA - 11920 0 s, 1 s and ? Marks
Description 0 s, 1 s and ? Marks Given a string consisting of 0, 1 and ? only, change all the ? to ...
- java编写的2048程序
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util ...
- mybatis由浅入深day01_8输出映射_8.1resultType输出类型(8.1.1输出简单类型_8.1.2输出pojo对象和pojo列表_8.1.3输出hashmap)
8 输出映射 8.1 resultType(输出类型) 使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功. 如果查询出来的列名和pojo中的属性名全 ...
- Java类的设计----方法的重写、覆盖
方法的重写.覆盖 在子类中可以根据需要对从父类中继承来的方法进行改造—覆盖方法(方法的重置.重写),在程序执行时,子类的方法将覆盖父类的方法. 覆盖方法必须和被覆盖方法具有相同的方法名称.参数列表和返 ...
- Redis(一)-- 基础
一.Redis 简介 Redis 是完全开源免费的,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内 ...
- Python 流程控制:for
for 循环用于对一个序列进行遍历,用法如下: In [4]: for i in 'abcd': ...: print(i) ...: a b c d In [13]: for i in range( ...
- complex()
complex() 用于将一个对象转换为复数 In [1]: complex(123) # 将整数转换为复数 Out[1]: (123+0j) In [2]: complex(') # 将纯数字的字符 ...
- mybatis 循环遍历
/****Service/ public ServiceMessage<MemberFreedomRepModel> getMFListByPay(Long memberId,Long f ...
- linux制作RPM包
制作rpm包 1.制作流程1.1 前期工作 1)创建打包用的目录rpmbuild/{BUILD,SPECS,RPMS, SOURCES,SRPMS} 建议使用普通用户,在用户家目录中创建 2)确定好制 ...
- jquery单选框radio绑定click事件实现和是否选中的方法
使用jquery获取radio的值,最重要的是掌握jquery选择器的使用,在一个表单中我们通常是要获取被选中的那个radio项的值,所以要加checked来筛选,比如有以下的一些radio项: 1. ...