Title

linux下nginx+keeplalived实现双机热备

  • 作者:Mr_Yan
  • linux
  • 时间:2018-08-30 03:52:21
  • 1122人已阅读


nginx安装配置前面已经说过了 这里不多说了


Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到

并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived

自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

keepalived的官方站点是 - Keepalived for Linux


一、安装

1、下载keepalived压缩包

wget        http://www.keepalived.org/software/keepalived-1.1.20.tar.gz

2、解压    tar -zxvf keepalived.tar.gz


3、开始编译

cd keepalive

./configure --prefix=/usr/local/keepalived

编译错误提示缺少popt  


4、安装popt

dbian 下安装直接 apt-get install libpopt-dev

centos下 yum install popt-devel


5.make && make install


6、移动配置文件,无CP目录自己 mkdir

mkdir /etc/keepalived                       ##keepalived默认配置文件从/etc/keepalived下读取

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/         ##就一个二进制文件,直接拷贝过去即可,多的话就更改PATH吧

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/        ##脚本的额外配置文件读取位置

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d   /##启动脚本

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/      ##keepalived配置文件

建立软链接

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

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

ln -s /lib/lsb/init-functions /etc/rc.d/init.d/functions


7、修改/etc/init.d/keepalived文件23行

 #daemon keepalived ${KEEPALIVED_OPTIONS} daemon keepalived start


8、apt-get install daemon


9、启动 service keepalived start

可能出现:Warning: Unit file of keepalived.service changed on disk, 'systemctl daemon-reload' recommended.

执行 systemctl daemon-reload    &&  service keepalived start

也可 keepalived -d -D -S 0 -f /etc/keepalived/keepalived.conf

查看进程

ps aux |grep keepalived |grep -v grep

查看启动日志(master/slave)

cat /var/log/keepalived


10、进入 /etc/keepalived目录下 编写nginx_check.sh

vim nginx_check.sh

#如下

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

nginx_check.sh脚本授权。赋予可执行权限:chmod +x /etc/keepalived/nginx_check.sh


二、本地测试配置

需要两台虚拟机  同样都安装nginx+keepalived 


主用配置

! Configuration File for keepalived

                        global_defs {
   notification_email {
       xxxx@qq.com
  }
  notification_email_from Alexandre.Cassen@firewall.loc
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id nginx.master #路由id,不能重复
}


vrrp_script chk_nginx {
   script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
   interval 2 ##检测时间间隔
   weight -20 ## 如果条件成立则权重减20(-20)
}


vrrp_instance VI_1 {
   state MASTER     #主节点为MASTER 备份节点为BACKUP
       ## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是eth0)
   interface eth0
       ## 虚拟路由ID号
   virtual_router_id 51
       ##优先级配置(0-254的值)
   priority 100
## 组播信息发送间隔,俩个节点必须配置一致,默认1s
   advert_int 1

   authentication {
       auth_type PASS
       auth_pass yan ## 真实生产环境下对密码进行匹配
   }


       track_script {
       chk_nginx       #调用检测脚本
   }


       ## 虚拟ip(vip),可以指定多个
   virtual_ipaddress {

       192.168.140.200   #nginx 同一网段

   }
}



备用配置

! Configuration File for keepalived

                        global_defs {
   notification_email {
       xxxxx@qq.com
  }
  notification_email_from Alexandre.Cassen@firewall.loc
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id nginx.backup #路由id,不能重复
}


vrrp_script chk_nginx {
   script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
   interval 2 ##检测时间间隔
   weight -20 ## 如果条件成立则权重减20(-20)
}


vrrp_instance VI_1 {
   state BACKUP     #主节点为MASTER 备份节点为BACKUP
       ## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是eth0)
   interface eth0
       ## 虚拟路由ID号
   virtual_router_id 51  
       ##优先级配置(0-254的值)
   priority 90
## 组播信息发送间隔,俩个节点必须配置一致,默认1s
   advert_int 1

   authentication {
       auth_type PASS
       auth_pass yan ## 真实生产环境下对密码进行匹配
   }


       track_script {
       chk_nginx       #调用检测脚本
   }


       ## 虚拟ip(vip),可以指定多个
   virtual_ipaddress {

       192.168.140.200   #nginx 同一网段
       
   }
}


主备配置基本一样,注意需要声明是 ,MASTER 还是 BACKUP


三、测试是否成功 

如图访问虚拟IP 192.168.140.200 时 主用服务并没有停止

image.png


当我们手动关闭NGINX后 发现keepalived服务也停止了也就是192.168.140.200 这个ip由备用接管了


image.png

image.png








本文为MrYan原创文章,转载无需和我联系,但请注明来自MrYan个人博客:www.mryan888.com

文章评论

Top