首页 >> 大全

Keepalived案例一:Keepalived双机热备(HA)精讲

2023-10-23 大全 24 作者:考证青年

这里我们仅仅只利用做双机热备,也就是保证服务器的高可用性,其他的不用管。可能您会说这样在实际应用中很少会这样用,这您可就错了,仅仅做双机热备的情况还是有的,我就碰到过几次这样的案例,下面就我碰到的几个案例做个小结

一,双机热备的应用场景

1,网站流量不高,压力不大,但是对服务器的可靠性要求极其高,例如实时在线OA系统,政府部门网站系统,医院实时报医系统,公安局在线报案系统,股市后台网站系统等等,他们的压力不是很大,但是对可靠性要求是非常高的

2,有钱没地方花的,典型的政府企业,公办学校等等

二,双机热备的特性以及优缺点

特性:

1,至少需要两台服务器,其中一台为始终提供服务,另外一台作为始终处于空闲状态,只有在主服务器挂掉的时候他就来帮忙了,这是典型的双击热备

2,能根据需求判断服务是否可用,在不可用的时候要即使切换

优缺点:

优点:数据同步非常简单,不像负载均衡对数据一致性要求非常高,实现起来相对复杂维护也颇为不便,双机热备用rsync就可以实现了操作和维护非常简单

缺点:服务器有点浪费,始终有一台处于空闲状态

三,双机热备的配置

首先画个双机热备拓扑图吧:

这里我只写最终实现的配置,至于的理论知识请参考《 原理与实战精讲 》

1,本例通过来实现两台LNMP(也就是linux+nginx+mysql+php)架构服务器的双机热备

LNMP的配置请参考:《 Lnmp配置精讲第一版 》

2,配置双机安装配置

1》安装

官方地址: ,大家可以到这里下载最新版本的

操作系统: 5.5 32bit

系统安装:最小化安装,也就是去掉所有组件

环境配置:安装make 和 gcc -devel等等

yum -y gcc make -devel wget -devel

mkdir -p /usr/local/src/

cd /usr/local/src/

wget

tar -zxvf -1.2.2.tar.gz

cd -1.2.2

./ --=/usr/local/ --with--dir=/usr/src//2.6.18-238.19.1.el5-i686/

复制代码

预编译后出现:

------------------------

: 1.2.2

: gcc

flags : -g -O2 -=

Extra Lib : -lpopt -lssl -

Use IPVS : Yes

IPVS sync : Yes

IPVS use libnl : No

Use VRRP : Yes

Use Debug flags : No

复制代码

make && make

复制代码

这里注意哦,我上面是指通用的安装方法,如果你没有用到LVS可以把lvs去掉即

./ --=/usr/local/ --with--dir=/usr/src//2.6.18-238.19.1.el5-i686/ ---lvs-syncd ---lvs

但这个没有影响,就按照我的来配置吧,不过如果你要是集成了LVS,那么就不可加这两个参数了哦

整理管理文件:

cp /usr/local//sbin/ /usr/sbin/

cp /usr/local//etc// /etc//

cp /usr/local//etc/rc.d/init.d/ /etc/init.d/

建立配置文件目录(注意:的配置文件默认在/etc//目录)

mkdir -p /etc/etc//

两台服务器(两个节点)都这样安装即可

2》配置

节点A配置如下:

vi /etc//.conf

rom

127.0.0.1

30

lnmp {

state

eth0

100

200

5

{

eth0

eth1

{

PASS

{

192.168.17.200

复制代码

节点B配置如下:

vi /etc//.conf

rom

127.0.0.1

30

lnmp {

state

eth0

100

150

5

{

eth0

eth1

{

PASS

{

192.168.17.200

复制代码

四,启动调试

在节点A上启动

/usr/local//sbin/

启动日志

Sep8 18:26:02 :

Sep8 18:26:02 :

Sep8 18:26:02 : ARP

Sep8 18:26:02 : file '/etc//.conf'.

Sep8 18:26:02 : is using : 36076 Bytes

Sep8 18:26:02 : Using ...

Sep8 18:26:02 : VRRP child , pid=5606

Sep8 18:26:07 : (lnmp) to STATE

Sep8 18:26:12 : (lnmp) STATE

Sep8 18:26:12 avahi-[2528]: new for 192.168.17.200 on eth0.

在节点B上启动

/usr/local//sbin/

开机自动启动

echo /usr/local//sbin/ >> /etc/rc.local

启动日志:

Sep8 18:30:02 : v1.2.2 (09/08,2011)

Sep8 18:30:02 : child , pid=5837

Sep8 18:30:02 :

Sep8 18:30:02 :

Sep8 18:30:02 : ARP

Sep8 18:30:02 : VRRP child , pid=5839

Sep8 18:30:02 : IPVS: (TCP, UDP, AH, ESP)

Sep8 18:30:02 : IPVS: hash table (size=4096, =)

Sep8 18:30:02 : IPVS: ipvs .

Sep8 18:30:02 ckers:

Sep8 18:30:02 ckers:

Sep8 18:30:02 ckers: file '/etc//.conf'.

Sep8 18:30:02 : file '/etc//.conf'.

Sep8 18:30:02 : is using : 36252 Bytes

Sep8 18:30:02 : Using ...

Sep8 18:30:02 ckers: is using : 6271 Bytes

Sep8 18:30:02 ckers: Using ...

Sep8 18:30:02 : (lnmp) STATE

从日志可以看出,启动都没有问题,并且安装我给的优先级完成了竞选,各自成就了各自的状态

关闭节点A的网卡测试切换是否正常

双机热备结构图_双机热备的概念_

eth0

观察节点B的日志:

Sep8 18:32:55 : (lnmp) to STATE

Sep8 18:33:00 : (lnmp) STATE

Sep8 18:33:00 avahi-[2531]: new for 192.168.17.200 on eth0.

启动节点A的网卡测试切换是否正常

ifup eth0

观察节点B的日志:

Sep8 18:33:31 : (lnmp) prio

Sep8 18:33:31 : (lnmp) STATE

Sep8 18:33:31 avahi-[2531]: for 192.168.17.200 on eth0.

prio :表示接收到更高优先级的公告(公告的意思)

: 撤回的意思,可以看出切换过程一目了然

OK,到这里我们的安装部分完成,下面我们来看看如何监控服务吧,我们这里仅仅是监控了网络故障和本身进程,在网络或者进程出现问题的时候会切换,但是我的节点A里面还有很多服务呢,例如nginx,PHP,mysql进程出问题或高负载的时候相应过慢怎么办,怎么切换的呢,这时就要用到脚本了,下面我们来看看是如何控制脚本来实现对服务器的监控和切换的

写个脚本来实时监控三个服务,若有一个出现问题遍切换mkdir /root/shell/

cd /root/shell

vi .sh

#!/bin/bash

while:

do

=`/usr/local/lnmp/mysql/bin/ -uroot ping 2>&1`

=`echo $?`

=`ps -C php-fpm --no- | wc -l`

=`ps -C nginx --no- | wc -l`

=`ps -C --no- | wc -l`

if [ $ -eq 0 ]|| [ $ -eq 0 ]||[ $ -ne 0 ];then

if [ $ -ne 0 ];then

-TERM

else

echo " is "

fi

else

if [ $ -eq 0 ];then

/etc/init.d/ start

else

echo " is "

fi

fi

sleep 5

done

复制代码

注意,用 /etc/init.d/ start如果起不来,可以用/usr/local//sbin/二进制文件直接执行启动即可

启动脚本:

chmod +x /root/shell/.sh

nohup sh /root/shell/.sh &

复制代码

节点B也用这个脚本

写入/etc/rc.local开机自动启动

echo "nohup sh /root/shell/.sh &" >> /etc/rc.loal

复制代码

可以测试了

开了防火墙之后双节点都变成了,日志如下

Sep 13 21:21:27 avahi-[2528]: for fe80::20c:29ff:fede:99ab on eth1.

Sep 13 21:21:27 avahi-[2528]: for 192.168.27.212 on eth1.

Sep 13 21:21:27 avahi-[2528]: for fe80::20c:29ff:fede:99a1 on eth0.

Sep 13 21:21:27 avahi-[2528]: for 192.168.17.212 on eth0.

Sep 13 21:21:27 avahi-[2528]: Host name , with

Sep 13 21:21:27 avahi-[2528]: new for fe80::20c:29ff:fede:99ab on eth1.

Sep 13 21:21:27 avahi-[2528]: new for 192.168.27.212 on eth1.

Sep 13 21:21:27 avahi-[2528]: new for fe80::20c:29ff:fede:99a1 on eth0.

Sep 13 21:21:27 avahi-[2528]: new for 192.168.17.200 on eth0.

Sep 13 21:21:27 avahi-[2528]: new for 192.168.17.212 on eth0.

解决方法如下:(一般使用第二种情况)

第一种情况,如果用的是默认防火墙

只需要添加: -I RH--1-INPUT -d 224.0.0.18 -j

第二种情况:如果是自己用脚本设置的防火墙,只需要添加西门规则即可

-A -o eth0-d 224.0.0.18-j

-A -o eth0-s 224.0.0.18 -j

-A INPUT-i eth0-d 224.0.0.18-j

-A INPUT -i eth0-s 224.0.0.18 -j

修改完后,记得使用/etc/rc.d/init.d/ save 保存修改的规则,并会将规则写入/etc//文件中去,否则重启后会失效。

在/etc//文件中,要将INPUT链和链中的规则放到最后,否则会影响上面设置的功能。

最后,使用 ,重启使规则生效。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了