Linux Keepalived双机热备

Keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived是自动完成,不需人工干涉。

本文详细介绍使用keepalived实现最简单的双机热备,并使用Nginx进行验证。
环境:CentOS 7 64位、Keepalived-1.2.18、Nginx-1.6.2。


一、虚拟机安装
1、网络设置

本文使用的是VMware Workstation 15 Player,创建两个虚拟机,分别命名为CentOS 7 64位 MCentOS 7 64位 B,M表示"master"主服务器,B表示"backup"备用服务器。
网络连接选择NAT模式,启动后使用ip add发现没有自动分配ip地址,是因为CentOS 7默认是不启动网卡的,解决方法如下:

vi /etc/sysconfig/network-scripts/ifcfg-ens33

打开配置文件,把ONBOOT=no这一项改为ONBOOT=yes,然后:wq保存退出,然后重启网络服务:

sudo service network restart

这时候再输入ip add会发现ip地址有了。

本文Master ip为192.168.56.131,Bcakup ip为192.168.56.132
虚拟ip(vip)定义为192.168.56.188


二、Nginx部署
1、安装wget
yum -y install wget
2、下载并解压Nginx
wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar -zxvf nginx-1.6.2.tar.gz
3、下载所需要的依赖库文件
yum -y install pcre
yum -y install pcre-devel
yum -y install zlib
yum -y install zlib-devel
4、配置

安装gcc

yum -y install gcc

进入nginx-1.6.2并执行configure文件

cd nginx-1.6.2
./configure
5、编译并安装Nginx
make && make install

成功后会在/usr/local/nginx目录下看到conf、html、logs、sbin四个目录。

6、启动Nginx

启动命令:

/usr/local/nginx/sbin/nginx

停止命令:

/usr/local/nginx/sbin/nginx -s stop

重启命令:

/usr/local/nginx/sbin/nginx -s reload

使用如下命令查看相关端口是否已启动Nginx

netstat -ano | grep 80
或
lsof -i:80

浏览器输入Master的ip地址:http://192.168.56.131,出现Nginx的欢迎页面即成功启用Nginx。

同理,Backup浏览器输入:http://192.168.56.132,同样出现Nginx的欢迎页面。

注意这个地方,html中最后一行"Thank you for using nginx."本文针对Master和Backup分别进行了修改便于热备时更好的区分服务是否切换成功,修改的文件在

/usr/local/nginx/html/index.html

如果启动成功,但进入不了欢迎页面,则可能需要关闭firewalld防火墙:

systemctl stop firewalld.service
systemctl disable firewalld.service

三、Keepalived安装
1、下载并解压Keepalived
wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
2、安装依赖软件包openssl
yum install -y openssl openssl-devel
3、配置

进入keepalived-1.2.18并执行configure文件

cd keepalived-1.2.18
./configure --prefix=/usr/local/keepalived
4、编译并安装keepalived
make && make install
5、将keepalived安装成Linux系统服务

/etc/目录下创建keepalived文件夹

mkdir /etc/keepalived

将keepalived配置文件复制到/etc/keepalived下

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

将keepalived脚本文件复制到/etc/相关目录下

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

创建keepalived软链接

ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/

设置开机启动

chkconfig keepalived on

安装完毕。


四、修改keepalived配置文件

进入/etc/keepalived/目录下打开keepalived.conf文件进行修改

vi /etc/keepalived/keepalived.conf
1、Master
! Configuration File for keepalived

global_defs {
    router_id localhost.localdomain ##标识节点的字符串,通常为hostname
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
    interval 2 ##检测时间间隔
    weight -20 ## 如果条件成立则权重减20,这样恢复时优先级低于另一台就会自动变为BACKUP
}
## 定义虚拟路由 VI_1为自定义标识。
vrrp_instance VI_1 {
    state MASTER   ## 主节点为MASTER,备份节点为BACKUP
    ## 接口设置 与本虚拟机ifconfig或ip address的接口相同
    interface ens33  
    virtual_router_id 131  ## 虚拟路由ID号,两台虚拟机保证这个数字相同一致
    mcast_src_ip 192.168.56.131  ## 本机ip地址
    priority 100  ##优先级配置(0-254的值),数字越大等级越高
    nopreempt  ## 不抢占
    advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
    authentication {  
        auth_type PASS ## vrrp协议 保证两虚拟机一致
        auth_pass zxn ## 真实生产环境下对密码进行匹配
    }

    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        192.168.56.188 ## 虚拟地址(vip),可以指定多个
    }
}

2、Backup
! Configuration File for keepalived

global_defs {
    router_id zxn132 ##标识节点的字符串,通常为hostname
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
    interval 2 ##检测时间间隔
    weight -20 ## 如果条件成立则权重减20,这样恢复时优先级低于另一台就会自动变为BACKUP
}
## 定义虚拟路由 VI_1为自定义标识。
vrrp_instance VI_1 {
    state BACKUP   ## 主节点为MASTER,备份节点为BACKUP
    ## 接口设置 与本虚拟机ifconfig或ip address的接口相同
    interface ens33  
    virtual_router_id 131  ## 虚拟路由ID号,两台虚拟机保证这个数字相同一致
    mcast_src_ip 192.168.56.132  ## 本机ip地址
    priority 90  ##优先级配置(0-254的值),比MASTER少就行 
    nopreempt  ## 不抢占
    advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
    authentication {  
        auth_type PASS ## vrrp协议 保证两虚拟机一致
        auth_pass zxn ## 真实生产环境下对密码进行匹配
    }

    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        192.168.56.188 ## 虚拟地址(vip),可以指定多个
    }
}

3、nginx_check.sh脚本

在/etc/keepalived/目录下创建sh脚本文件

1、安装nano

yum -y install nano

2、使用nano创建nginx_check.sh脚本

sudo nano nginx_check.sh

3、打开nginx_check.sh并编辑如下内容

#!/bin/bash
# 如果进程中没有nginx则将keepalived进程kill掉
A=`ps -C nginx --no-header |wc -l`      ## 查看是否有 nginx进程 把值赋给变量A
if [ $A -eq 0 ];then                    ## 如果没有进程值得为零
    service keepalived stop             ## 则结束 keepalived 进程
fi

(注意`符号,非'符号)

4、脚本授权

chmod +x /etc/keepalived/nginx_check.sh

五、启动Nginx和Keepalived

安装并配置完毕后,可以分别启动两台虚拟机上的Nginx和Keepalived进行热备的验证了。

启动Nginx:

/usr/local/nginx/sbin/nginx

启动Keepalived:

service keepalived start

关闭Keepalived:

service keepalived stop

查看nginx进程:

ps -ef | grep nginx

查看keepalived进程:

ps -ef | grep keepalived

分别启动Nginx和Keepalived后,Master输入ip add查看ip多了一个192.168.56.188

打开浏览器输入ip地址:http://192.168.56.188看到Nginx的欢迎页面

此时nginx131说明为主节点。

然后我们将Keepalived关闭

service keepalived stop

或kill掉Nginx进程,因为有nginx_check.sh脚本会检测如果没有Nginx进程运行也会自动将Keepalived关闭

ps -ef |grep nginx
kill xxxxx

会发现,节点由Master切换到了Backup:

热备成功。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335