<commit_before>---
layout: page
title:  "LVS用Heartbeat实现高可用"
date:   2016-6-18 01:05:07
categories: Architecture
tags: Architecture
---
heartbeat因为其版本发展，在Heartbeat v2 (CentOS 6.4)的中的很多组件到Heartbeat v3(CentOS 6.5)之后就独立成单独的软件。比如heartbeat-pils就独立成了Cluster-glue,CRM集群资源管理器Heartbeat也独立成了pacemaker。而在CentOS 6.5及之上还想装Heartbeat v2的话，就只能rpm安装。rpm包我会在下面提供。

高可用集群通用基础环境：
- 1，解析名字和服务器名字一定要对应

	/etc/hosts 与 uname -r 一定要对应

- 2，时间一定要同步

	ntp时间服务器

理论架构我会新开一篇讲，这里就直接讲如何实现的。先把LVS那个坑填好再说。

名称解析

	[root@Director1 ~]# uname -n;cat /etc/hosts
	Director1
	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
	::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
	192.168.100.80  Director1
	192.168.100.79  Director2

启用公私钥登录(不是必要，看需求)

	[root@Director1 ~]# ssh-keygen -t rsa -p""  //创建公私钥
	[root@Director1 ~]# ssh-copy-id Director2   //命令在openssl-clients包里面
	-------------------------------------------------------
	[root@Director2 ~]# ssh-keygen -t rsa -p"" 
	[root@Director2 ~]# ssh-copy-id Director1 



NTP

	[root@Director1 ~]# yum -y install ntp
	[root@Director1 ~]# vim /etc/ntp.conf
	在其中加入 
	server 127.127.1.0
	fudge 127.127.1.0 stratum 10
	[root@Director1 ~]# ssh Director2 "ntpdate Direcotr1"
	9 Jun 15:36:07 ntpdate[7634]: step time server Director1 offset 234616.251
	如果ntpdate同步不了，请自行判断iptables和SELinux。生产环境还需要将同步加入计划任务

安装Heartbeart,如果出现依赖包问题，yum安装就好了

	[root@director1 ~]# rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
	[root@director1 ~]# yum -y install  gettext libtool-ltdl PyXML libnet net-snmp-libs perl-TimeDate
	[root@director1 ~]# 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

配置

	[root@Director1 ~]# cp /usr/share/doc/heartbeat-2.1.4/{authkeys,haresources,ha.cf} /etc/ha.d/
	[root@Director1 ~]# ls /etc/ha.d/
	authkeys  ha.cf  harc  haresources  rc.d  README.config  resource.d  shellfuncs
	[root@Director1 ~]# vim /etc/ha.d/authkeys 
	auth 2                           //指定加密方式
	#1 crc
	2 sha1 HI!521e6e16ead63ac2       //加密方式，后面是秘钥
	#3 md5 Hello!
	[root@Director1 ~]# vim /etc/ha.d/ha.cf 
	logfile /var/log/ha-log            //日志
	keepalive 2                        //心跳包间隔时间
	deadtime 6                         //过了这个时间就算对方已宕机
	warntime 4                         //警告时间
	initdead 120                       //等待外围设备时间，为了闭幕备用服务器一启动没接收到主服务器心跳包就立即转换成主
	udpport 694                        //监听端口
	#bcast   eth0                      //发送心跳包方式,广播
	##mcast eth0 192.168.3.11 694 1 0     //组播
	#ucast eth0 192.168.1.2            //单播，三个任选一个，选合适的就好
	node    Director1                  //定义集群设备
	node    Director2
	ping 192.168.100.2                 //定义ping node
	[root@Director1 ha.d]# vim haresources 
	Director1  192.168.100.20/24/eth0/192.168.100.255 directord    //在当前环境是这样，在其他环境可不同
	#主节点 VIP/Netmask/eth#/广播域 RA    //RA是什么我后面会讲

写directord RA文件：

	#!/bin/bash
	#
	# LVS-Director RA
	#
	# <NAME>   Email:<EMAIL>  Blog:itcys.top
	#<commit_msg>LVS_3_Blog<commit_after>---
layout: page
title:  "LVS用Heartbeat实现高可用"
date:   2016-6-18 01:05:07
categories: Architecture
tags: Architecture
---
heartbeat因为其版本发展，在Heartbeat v2 (CentOS 6.4)的中的很多组件到Heartbeat v3(CentOS 6.5)之后就独立成单独的软件。比如heartbeat-pils就独立成了Cluster-glue,CRM集群资源管理器Heartbeat也独立成了pacemaker。而在CentOS 6.5及之上还想装Heartbeat v2的话，就只能rpm安装。rpm包我会在下面提供。

高可用集群通用基础环境：

- 1，解析名字和服务器名字一定要对应

	/etc/hosts 与 uname -r 一定要对应

- 2，时间一定要同步

	ntp时间服务器

理论架构我会新开一篇讲，这里就直接讲如何实现的。先把LVS那个坑填好再说。

名称解析

	[root@Director1 ~]# uname -n;cat /etc/hosts
	Director1
	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
	::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
	192.168.100.80  Director1
	192.168.100.79  Director2

启用公私钥登录(不是必要，看需求)

	[root@Director1 ~]# ssh-keygen -t rsa -p""  //创建公私钥
	[root@Director1 ~]# ssh-copy-id Director2   //命令在openssl-clients包里面
	-------------------------------------------------------
	[root@Director2 ~]# ssh-keygen -t rsa -p"" 
	[root@Director2 ~]# ssh-copy-id Director1 



NTP

	[root@Director1 ~]# yum -y install ntp
	[root@Director1 ~]# vim /etc/ntp.conf
	在其中加入 
	server 127.127.1.0
	fudge 127.127.1.0 stratum 10
	[root@Director1 ~]# ssh Director2 "ntpdate Direcotr1"
	9 Jun 15:36:07 ntpdate[7634]: step time server Director1 offset 234616.251
	如果ntpdate同步不了，请自行判断iptables和SELinux。生产环境还需要将同步加入计划任务

安装Heartbeart,如果出现依赖包问题，yum安装就好了

	[root@director1 ~]# rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
	[root@director1 ~]# yum -y install  gettext libtool-ltdl PyXML libnet net-snmp-libs perl-TimeDate  //这个是CentOS 6.7我在安装的时候的依赖包
	[root@director1 ~]# 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

配置

	[root@Director1 ~]# cp /usr/share/doc/heartbeat-2.1.4/{authkeys,haresources,ha.cf} /etc/ha.d/
	[root@Director1 ~]# ls /etc/ha.d/
	authkeys  ha.cf  harc  haresources  rc.d  README.config  resource.d  shellfuncs
	[root@Director1 ~]# vim /etc/ha.d/authkeys 
	auth 2                           //指定加密方式
	#1 crc
	2 sha1 HI!521e6e16ead63ac2       //加密方式，后面是秘钥
	#3 md5 Hello!
	[root@Director1 ~]# vim /etc/ha.d/ha.cf 
	logfile /var/log/ha-log            //日志
	keepalive 2                        //心跳包间隔时间
	deadtime 6                         //多久没接到心跳就认为对方宕机
	warntime 4                         //警告时间,多久没接到心跳就去警告一次
	initdead 120                       //等待外围设备时间，为了避免备用服务器一启动没接收到主服务器心跳包就立即转换成主
	udpport 694                        //监听端口
	#bcast   eth0                      //发送心跳包方式,广播
	##mcast eth0 192.168.3.11 694 1 0     //组播
	#ucast eth0 192.168.1.2            //单播，三个任选一个，选合适的就好
	node    Director1                  //定义集群设备
	node    Director2
	ping 192.168.100.2                 //定义ping node
	[root@Director1 ha.d]# vim haresources 
	Director1  192.168.100.20/24/eth0/192.168.100.255 directord    //在当前环境是这样，在其他环境可不同
	#主节点 VIP/Netmask/eth#/广播域 RA    //RA是什么我后面会讲

写directord RA文件：

	#!/bin/bash
	#
	# LVS-Director RA
	#
	# <NAME>   Email:<EMAIL>  Blog:itcys.top
	#
{'fraction_non_alphanumeric': 0.13695473251028806, 'fraction_numerical': 0.08246913580246913, 'mean_word_length': 2.595266272189349, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 20, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3712628', 'n_tokens_mistral': 3321, 'n_tokens_neox': 3140, 'n_words': 436}