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:

热备成功。


你可能感兴趣的:(Linux Keepalived双机热备)