当前位置: 首页 > 编程日记 > 正文

002.Heartbeat部署及httpd高可用

一 前期准备

1.1 依赖准备

编译安装需要依赖的包,如gcc等:
yum -y install gcc gcc-c++ make glibc kernel-devel kernel-headers autoconf automake libtool glib2-devel libxml2 libxml2-devel libxslt-devel libtool-ltdl-devel wget asciidoc libuuid-devel bzip2 bzip2-devel e2fsprogs-devel net-snmp

1.2 环境准备

防火墙及SELinux关闭;
时钟同步,ntp配置;
相关主机名配置,如下所示:
节点/主机名
业务IP
心跳IP
master1.yewu.com
192.168.88.100
192.168.77.100
master2.yewu.com
192.168.88.101
192.168.77.101
vip
192.168.88.88
  1 # hostnamectl set-hostname  master1.yewu.com
  2 # hostnamectl set-hostname  master2.yewu.com	#分别配置主机名
  3 # /etc/hosts
  4 127.0.0.1 localhost.localdomain localhost
  5 #public ip						#业务host解析
  6 192.168.88.100 master1.yewu.com master1
  7 192.168.88.101 master2.yewu.com master2
  8 
  9 #private ip						#Heartbeat心跳解析
 10 192.168.77.100 master1-private.ha.com master1-private
 11 192.168.77.101 master2-private.ha.com master2-private
提示:内网环境为了方便解析,在所有节点分别对业务和用于检测心跳的地址添加解析。
  1 [root@master1 ~]# ifconfig |grep eth[0-9] -A1		#确认相应IP地址
004
配置互免秘钥:(建议项)
  1 [root@master1 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
  2 [root@master1 ~]# ssh-copy-id -i ./.ssh/id_rsa.pub root@192.168.88.101
  3 [root@master2 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
  4 [root@master2 ~]# ssh-copy-id -i ./.ssh/id_rsa.pub root@192.168.88.100

二 正式安装Heartbeat

2.1 下载相应包

所有相关包见:http://linux-ha.org/wiki/Download
  1 [root@master1 ~]# wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2
  2 [root@master1 ~]# wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2
  3 [root@master1 ~]# wget https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz
提示:master2节点参考以上操作即可。

2.2 安装cluster-glue

  1 [root@master1 ~]# groupadd haclient
  2 [root@master1 ~]# useradd -g haclient hacluster
  3 [root@master1 ~]# tar xf 0a7add1d9996.tar.bz2
  4 [root@master1 ~]# mv Reusable-Cluster-Components-glue--0a7add1d9996/ cluster_glue
  5 [root@master1 ~]# cd cluster_glue/
  6 [root@master1 cluster_glue]# ./autogen.sh
  7 [root@master1 cluster_glue]# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
005
  1 [root@master1 cluster_glue]# make && make install
提示:heartbeat依赖于cluster-glue,因此必须先安装cluster-glue;master2节点参考以上操作即可。

2.3 安装Resource Agents

  1 [root@master1 ~]# tar xf v3.9.6.tar.gz
  2 [root@master1 ~]# cd resource-agents-3.9.6/
  3 [root@master1 resource-agents-3.9.6]# ./autogen.sh
  4 [root@master1 resource-agents-3.9.6]# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
006
  1 [root@master1 resource-agents-3.9.6]# make && make install
提示:master2节点参考以上操作即可;
若提示configure: error: C compiler cannot create executables或类似Cluster Glue等so文件未找到,可通过以下方式解决:
  1 ln -s  /usr/local/heartbeat/lib/* /lib/
  2 ln -s  /usr/local/heartbeat/lib/* /lib64/	#将生成的动态库,添加快捷方式到/lib下

2.4 安装Heartbeat

  1 [root@master1 ~]# tar xf 958e11be8686.tar.bz2
  2 [root@master1 ~]# export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
  3 [root@master1 ~]# cd Heartbeat-3-0-958e11be8686/
  4 [root@master1 Heartbeat-3-0-958e11be8686]# ./bootstrap
  5 [root@master1 Heartbeat-3-0-958e11be8686]# ./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
007
  1 [root@master1 Heartbeat-3-0-958e11be8686]# make && make install
提示:master2节点参考以上操作即可;
若提示configure: error: in `/root/Heartbeat-3-0-958e11be8686',可通过以下方式解决,然后再次configure即可。:
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
make
提示:若提示glue_config.h:105:1: error: “HA_HBCONF_DIR” redefined,是由于glue和heartbeat的版本不兼容引起,可通过以下方式解决:
删除或注释掉/usr/local/heartbeat/include/heartbeat/glue_config.h的最后一行
错误2: gmake[1]: *** [strlcpy.lo] Error 1
解决:将 /usr/local/heartbeat/include/heartbeat/glue_config.h的105行 #define  HA_HBCONF_DIR "/usr/local/heartbeat/etc/ha.d" 删除或注释掉

2.5 Heartbeat优化

  1 [root@master1 ~]# cp /root/Heartbeat-3-0-958e11be8686/doc/{ha.cf,haresources,authkeys} \
  2 /usr/local/heartbeat/etc/ha.d/			#复制相关配置文件
  3 [root@master1 ~]# chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys
  4 [root@master1 ~]# mkdir -pv /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
  5 [root@master1 ~]# cp /usr/lib/ocf/lib/heartbeat/ocf-* \
  6 /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
  7 [root@master1 ~]# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* \
  8 /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
  9 [root@master1 ~]# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* \
 10 /usr/local/heartbeat/lib/heartbeat/plugins/
 11 [root@master1 ~]# chkconfig --add heartbeat		#CentOS7可省略
 12 [root@master1 ~]# systemctl enable heartbeat.service
 13 [root@master1 ~]# systemctl start heartbeat.service
提示:master2节点参考以上操作即可。

三 配置Heartbeat

3.1 安装httpd服务

  1 [root@master1 ~]# yum -y install httpd
  2 [root@master1 ~]# systemctl stop httpd
  3 [root@master1 ~]# systemctl disable httpd		#master2也需要安装
  4 [root@master1 ~]# echo "master1.yewu.com" >>/var/www/html/index.html
  5 [root@master2 ~]# echo "master2.yewu.com" >>/var/www/html/index.html
提示:关闭httpd启动及自启动,从而使httpd基于Heartbeat资源形式唤醒。

3.2 配置authkeys

  1 [root@master1 ~]# vi /usr/local/heartbeat/etc/ha.d/authkeys
  2 auth 3
  3 3 md5 Yes!

3.3 配置Heartbeat

  1 [root@master1 ~]# vi /usr/local/heartbeat/etc/ha.d/ha.cf
  2 logfile /var/log/ha-log		#记录Heartbeat其他相关日志信息
  3 logfacility     local0		#设置heartbeat的日志,这里用的是系统日志
  4 keepalive 2				#设定心跳(监测)时间间隔为2秒
  5 deadtime 15				#宣告死亡时间
  6 warntime 10				#心跳延时时间
  7 initdead 60				#初始化时间
  8 udpport 694				#用于通信的UDP端口
  9 bcast   eth1			#接受广播心跳的网卡接口
 10 ucast eth1 192.168.77.101		#置对方机器心跳检测的IP
 11 auto_failback off			#关闭自动切回恢复正常的主节点
 12 node master1.yewu.com		#集群节点的名称,必须匹配uname -n的结果。
 13 node master2.yewu.com
 14 ping 192.168.88.1
 15 respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
注意: 主机和备机之间进行心跳检测,当备机无法检测到主机的心跳,则开启vip;
如果主机和备机都没有挂掉,由于通信问题导致相互无法连接,则会出现裂脑,即主备都对外声明了vip,导致数据出现故障 ,因此建议主机和备机间应该采用专门只是用于检测心跳的网卡(网络),其他数据(业务)网络应该独立于此心跳网络。

3.4 配置haresources

  1 [root@master1 ~]# ll /usr/local/heartbeat/etc/ha.d/resource.d/	#查看现有资源类型
  2 [root@master1 ~]# vi /usr/local/heartbeat/etc/ha.d/haresources
  3 master1.yewu.com IPaddr::192.168.88.88/24/eth0 apache
  4 [root@master1 ~]# scp /usr/local/heartbeat/etc/ha.d/{ha.cf,haresources,authkeys} 192.168.88.101:/usr/local/heartbeat/etc/ha.d/		#将所有配置复制至master2节点
  5 [root@master2 ~]# vi /usr/local/heartbeat/etc/ha.d/ha.cf
  6 ucast eth1 192.168.77.100		#置对方机器心跳检测的IP

四 验证Heartbeat

4.1 master1单节点启动验证

  1 [root@master1 ~]# systemctl start heartbeat.service
  2 [root@master1 ~]# tail -f /var/log/ha-log		#验证日志
008
[root@master1 ~]# ifconfig #查看活的的vip
009
浏览器访问:http://192.168.88.88/
010

4.2 master2启动并验证

  1 [root@master2 ~]# systemctl start heartbeat.service
  2 [root@master1 ~]# tail -f /var/log/ha-log	#观察master2节点启动后的master1日志
011
浏览器访问:http://192.168.88.88/
012
  1 [root@master1 ~]# shutdownr			#模拟master1节点宕机
  2 [root@master2 ~]# ifconfig			#master2节点会自动接管vip
013
浏览器访问:http://192.168.88.88/ #相关vip已经飘移至mster2
014
提示:由于配置了auto_failback off,在master1节点恢复后资源依旧会保留至master2节点;
对于集群上节点之间的切换实质上是资源的接管,通常包括VIP分配回收,磁盘卸载挂载,以及服务的启停等;
对于备用节点,其相应的共享磁盘状态为不可读写,服务处于停止状态;
Heartbeat现有项目已拆分,建议使用pacemaker+corosync,可参考RH436相关文档。

转载于:https://www.cnblogs.com/itzgr/p/10160659.html

相关文章:

C++的STL栈实现获取栈中最小元素的成员

实现一个获取栈中最小数据成员的函数,该栈支持如下操作: 1.push(x) : 将元素x压入栈中 2.pop() : 弹出(移除)栈顶元素 3.top() : 返回栈顶元素 4.getMin() : 返回栈内最小元素 要求时间复杂度为O(1) 这里关键是如何获取最小值,栈中的元素不断…

java servlet applet,详解Java Servlet与Applet比较

Java Servlet与Applet相似之处:◆它们不是独立的应用程序,没有main()方法。◆它们不是由用户或程序员调用,而是由另外一个应用程序(容器)调用。◆它们都有一个生存周期,包含init()和destroy()方法。Java Servlet与Applet不同之处&…

NTP时间同步服务器搭建

转载:http://blog.s135.com/post/281/ 一、搭建时间同步服务器1、编译安装ntp server tar zxvf ntp-4.2.6.tar.gzcd ntp-4.2.6./configure --prefix/usr/local/ntp --enable-all-clocks --enable-parse-clocksmake && make install注:如以上下载…

OI基础系列之最大子数组问题

OI基础系列之最大子数组问题 ——Edward2414 oi退役了,虽然没取得多少成绩,也算是走过一会的人了。我相信绝大多数oi党都是自学成才,在此,我感谢那些把自己所学写到博客里的前辈们,没有你们,我不可能…

springCloud Zuul网关

1.springboot 仅2.0.x 支持&#xff0c;在此选择 2.0.7 2.新建Module eureka-zuul-client 3.导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/…

f-free 查看系统中空闲和使用的内存

文章目录前言语法格式以指定单位显示内存占用情况打印所有内存占用&#xff08;RAM SWAP&#xff09;打印间隔以及次数打印所有的列&#xff08;将buff和cache分开&#xff09;free各个空间含义swap交换空间cache页高速缓存free 与 available前言 free 支持查看空闲的和已使用…

对比两个同类型的泛型集合并返回差异泛型集合 ——两个List类名的比较

1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam name"T">泛型类型</typeparam> 5: /// <param name"newModel">修改后的数据集合</param> 6: /// &…

php insert failed,较大的MySQL INSERT语句导致PHP错误

好吧,我正在编写代码,但是发生了一些奇怪的事情,我不认为我的代码是错误的…但是它仍在垂死,我不知道为什么…有错误&#xff1a;Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use …

js 取得文件大小

document.getElementById("file").files[0].size

Spring Boot thymeleaf模版支持,css,js等静态文件添加

Thymeleaf引入 Thymeleaf是一个Java模板引擎开发库&#xff0c;可以处理和生成HTML、XML、JavaScript、CSS和文本&#xff0c;在Web和非Web环境下都可以正常工作。 1.添加依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>…

s-sed(stream editor) 文本填充和编辑 基本使用

文章目录前言语法格式sed 操作地址sed子命令sed正则表达式sed使用实例打印命令 p删除命令 d替换命令 s指定操作地址的范围 逗号 ,多重编辑命令 e下行插入命令 a上行插入命令 i修改命令 c获取下一行命令 n转换命令 y退出命令 q总结前言 sed是一个“非交互”式的字符流编辑器&am…

c语言动态迁移mysql,flask-migrate动态迁移数据库

了解flask_migrate需要先了解flask-script&#xff0c;那么flask-script的作用是什么呢&#xff1f;flask-script的作用是可以通过命令行的形式来操作Flask。例如通过命令跑一个开发版本的服务器、设置数据库&#xff0c;定时任务等。2.执行pip install flask-script来进行安装…

软考之路-网络攻击:主动攻击和被动攻击

被动攻击(针对路上的东西下手) 概念&#xff1a;就是网络窃听&#xff0c;窃取数据包并进行分析&#xff0c;从中窃取重要的敏感信息 措施&#xff1a;防止被动攻击的主要手段是数据加密传输 主动攻击(针对计算机下手) 概念&#xff1a;包括窃取、篡改、假冒和破坏 措施&#x…

edge.js架起node.js和.net互操作桥梁

今天要介绍的是edge.js这个github上刚兴起的开源项目&#xff0c;它可以让node.js和.net之间在in-process下互操作。.net版本在4.5及以上&#xff0c;因为.net4.5带来的Task&#xff0c;asyn&#xff0c;await关键字和node.js的Event模型正好匹配。如果你感兴趣的话&#xff0c…

connect() failed (111: Connection refused) while connecting to upstream, cli

php-fpm没有运行 执行如下命令查看是否启动了php-fpm&#xff0c;如果没有则启动你的php-fpm即可 netstat -ant | grep 9000没有运行为空&#xff0c;有运行显示 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 启动方法 sudo /usr/loca…

C++的STL 栈实现 判断栈的出栈顺序是否合理

有这样的题目&#xff1a; 已知从1至n的数字序列&#xff0c;按顺序入栈&#xff0c;每个数字入栈后即可出栈&#xff0c; 也可在栈中停留&#xff0c;等待后面的数字入栈出栈后&#xff0c;该数字再出栈&#xff0c;求该数字序列的出栈序列是否合法? 类似如下&#xff1a; 已…

fire.php,Fire PHP

项目介绍&#xff1a; Fire PHP 是基于 PHP JavaScript开发的跨平台的Firefox 的扩充套件&#xff0c;即PHP调试插件&#xff0c;可以帮你debug 后端PHP 的程式&#xff0c;其使用的技术跟某些IDE 一样&#xff0c;要求你在写程式时加入一些追踪用的代码。通过使用Firephp你可以…

json_encode时中文编码转正常状态

function json_encode_cn($data) {$data json_encode($data);return preg_replace("/\\\u([0-9a-f]{4})/ie", "iconv(UCS-2, UTF-8, pack(H*, $1));", $data); }直接json_encode()函数 ["\u6fb3\u5927\u5229\u4e9e","\u8056\u8a95\u5cf6&q…

验证URL链接和IP有效性的JS代码(正则表达式)

千里之行&#xff0c;始于足下&#xff0c;因之前毕业设计的耽误&#xff0c;没能在博客园记录我的程序猿体会&#xff0c;稍有遗憾&#xff0c;这么多的时间&#xff0c;我竟让他转瞬而过&#xff01;但没关系&#xff0c;再次出发&#xff0c;勿忘为什么出发&#xff01; 一下…

[转帖]什么是光纤的波长?看看有哪些是你不知道的!

什么是光纤的波长&#xff1f;看看有哪些是你不知道的&#xff01; FShttps://www.feisu.com/bbs/e-1640.html2017-07-01 00:00:001084我们平时最熟悉的光当然是我们肉眼所能看见的光。我们的眼睛对波长在400nm的紫光到700nm的红光很敏 感。但对于携带玻璃纤维的光纤&#xff0…

C++的STL 栈 实现四则运算

使用栈实现四则运算&#xff0c;支持&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;(&#xff0c;) 输入为字符串&#xff0c;输出为计算好的数值&#xff0c;如不符合四则运算的规定&#xff0c;则异常退出 这个实现借用了栈以及字符处理状态机的思想&#xff1a; 维…

javascript小数相减会出现一长串的小数位数的原因

javascript小数相减会出现一长串的小数位数的原因 <script>var a38.8;var b6.8;alert(parseFloat(a)-parseFloat(b));var a134.22;var b6;alert(a*b);</script>以上代码为什么产生一长串小数位出来&#xff0c;虽然比较精确&#xff0c;可没必要呀。这个和数据结构…

Java孩子父母类,@Output孩子和父母之间的沟通 . 角2(5)

我正在尝试学习角度2&#xff0c;并且我正在尝试使用来自我的子组件的数据在父组件中设置变量 . 基本上我在父视图中有一个子 Headers &#xff0c;我希望 Headers 和一些HTML根据加载的子项进行更改 .父组件&#xff1a;import { Component, OnInit, ViewEncapsulation } from…

SQL 自学笔记1(W3School)

自学W3Schoolhttp://www.w3school.com.cn/sql/index.asp 简介 SQL是什么&#xff1f; Structured Query Language 结构化的查询语言 SQL能做什么&#xff1f; 面向数据库查询、取出数据、插入新数据、更新数据、删除数据在数据库中建立库、表&#xff1b;创建存储过程及视图可设…

BZOJ 1096: [ZJOI2007]仓库建设

传送门 斜率优化DP入门题 显然如果在一个位置 i 建一个仓库&#xff0c;且上一个仓库位置为 j 那么从 j1到 i 的物品显然都要存在 i 仓库是最优的 设 $f [ i ]$ 表示在第 i 个工厂建设仓库时&#xff0c;工厂 1 到 i 的物品都转移好的最小花费 考虑上一个仓库的位置 j 设工厂 i…

C++的STL 堆 实现获取数组堆第K大的数

前言 堆数据结构 使用的是优先级队列实现&#xff0c;创建堆的时候需要指定堆中元素的排列方式&#xff0c;即最大堆或者最小堆 最大堆即 堆顶元素为堆中最大的元素 最小堆即 堆顶元素为堆中最小堆元素 如下为一个最大堆 回到文章标题&#xff0c;获取一个数组中第K大的数&a…

HTML+CSS布局技巧及兼容问题【阅读季】

在IE6和IE7中&#xff0c;行高值必须大于字体的2px以上才能保证字体的完整显示或当作为链接时能显示下划线。 IE6 下去掉 input等元素 的边框 border: 0 none; 所有浏览器都可以了 边框1px {td不重叠状态}&#xff1a;border-collapse: collapse;&#xff08;table、td需同时…

php 去掉数组相同元素,php怎么去掉数组中重复的元素

php去掉数组中重复的元素的方法&#xff1a;可以通过内置函数array_unique()来实现。array_unique()函数可以移除数组中重复的值并返回过滤后的数组。如果数组中存在多个相同元素&#xff0c;则只保留第一个值。php为我们提供了专门的内置函数array_unique()来解决此问题。该函…

Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(完)...

原文 http://www.cnblogs.com/mayswind/archive/2013/04/01/2991271.html 【题外话】 这是这个系列的最后一篇文章了&#xff0c;为了不让自己觉得少点什么&#xff0c;顺便让自己感觉完美一些&#xff0c;就再把OOXML说一下吧。不过说实话&#xff0c;OOXML真的太容易 解析了&…

Makefile (2) gdb

gdb调试 1.用debug的方式编译 -g 2.打上断点 3.单步调试 step into 进入函数里面step over 运行整个函数step return 跳出当前函数 4.继续运行 5.打印和监控值 下面是栗子: 1 #include <stdlib.h>2 #include <stdio.h>3 ​4 static int add(int i) //创…