双机热备是指两台机器都在运行,但并非两台机器同时在提供服务。
当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,且切换的时间非常短。

keepalived的工作原理是VRRP——虚拟路由冗余协议。

测试环境如下:

ip

vip

master

192.168.174.135

192.168.174.140

backup

192.168.174.137

192.168.174.140

nginx

安装

  1. sudo apt-get install nginx 

查找配置文件位置

  1. sudo find / -name nginx.conf
  2. /etc/nginx/nginx.conf

修改配置文件(nginx.conf)

  1. user www-data;
  2. worker_processes ;
  3. pid /run/nginx.pid;
  4.  
  5. events {
  6. worker_connections ;
  7. }
  8.  
  9. http {
  10. sendfile on;
  11. tcp_nopush on;
  12. tcp_nodelay on;
  13. keepalive_timeout ;
  14. types_hash_max_size ;
  15.  
  16. include /etc/nginx/mime.types;
  17. default_type application/octet-stream;
  18.  
  19. access_log /var/log/nginx/access.log;
  20. error_log /var/log/nginx/error.log;
  21.  
  22. server {
  23. listen default_server;
  24. server_name test;
  25. charset utf-;
  26.  
  27. location / {
  28. root html;
  29. index index.html index.htm;
  30. proxy_set_header X-Real_IP $remote_addr;
  31. client_max_body_size 100m;
  32. }
  33. }
  34. }

文件/usr/share/nginx/html/index.html

在192.168.174.135上加上  <h1>Welcome to nginx!  135  </h1>

在192.168.174.137上加上  <h1>Welcome to nginx!   ***137***   </h1>

启动

  1. sudo service nginx start

关闭

  1. sudo service nginx stop

keepalived

安装

下载keepalived-1.2.19.tar.gz

  1. tar zxvf keepalived-1.2..tar.gz
  2. cd keepalived-1.2.
  3. ./configure --prefix=/usr/local/keepalived
  4. make
  5. sudo make install

期间可能出现问题:

!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files. !!!

解决

  1. sudo apt-get install libssl.dev

建立软链接

  1. sudo ln -s /usr/local/keepalived/sbin/keepalived /sbin/
  2. sudo ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
  3. sudo ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

启动

  1. sudo keepalived -D -f /usr/local/keepalived/etc/keepalived/keepalived.conf

关闭

  1. sudo killall keepalived

配置(keepalived.conf):

  1. global_defs {
  2. router_id NODEA
  3. }
  4.  
  5. vrrp_instance VI_1 {
  6. state MASTER
  7. interface eth0 #监测网络接口
  8. virtual_router_id #主、备必须一样
  9. priority #优先级:主>备
  10. advert_int
  11. authentication {
  12. auth_type PASS #VRRP认证,主备一致
  13. auth_pass #密码
  14. }
  15.  
  16. virtual_ipaddress {
  17. 192.168.174.140/ #VRRP HA虚拟地址
  18. }
  19. }

备用节点的配置

  1. global_defs {
  2. router_id NODEB
  3. }
  4.  
  5. vrrp_instance VI_1 {
  6. state BACKUP
  7. interface eth0
  8. virtual_router_id
  9. priority
  10. advert_int
  11. authentication {
  12. auth_type PASS
  13. auth_pass
  14. }
  15.  
  16. virtual_ipaddress {
  17. 192.168.174.140/
  18. }
  19. }

测试

双击热备

两台机子均启动nginx和keepalived,浏览器各自访问

浏览器访问:http://192.168.174.140/,显示的是MASTER的页面。

同样用ip appr可以验证:

135机器:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:0c:29:39:d4:88 brd ff:ff:ff:ff:ff:ff

inet 192.168.174.135/24 brd 192.168.174.255 scope global eth0

valid_lft forever preferred_lft forever

inet 192.168.174.140/24 scope global secondary eth0

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fe39:d488/64 scope link

valid_lft forever preferred_lft forever

137机器:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000

link/ether 00:0c:29:cf:23:62 brd ff:ff:ff:ff:ff:ff

inet 192.168.174.137/24 brd 192.168.174.255 scope global eth0

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fecf:2362/64 scope link

valid_lft forever preferred_lft forever

现在关闭135机器的keepalived。

但当nginx宕掉或整个机子宕机后,这种情况不行了——通过浏览器访问192.168.174.140访问不到资源。

nginx宕掉/机器宕掉热备

为了解决上一问题,可以利用脚本,当检测到nginx进程宕掉后,自动关闭keepalived进程,从而实现热备份。

主节点的配置

  1. global_defs {
  2. router_id NODEA
  3. }
  4.  
  5. vrrp_script chk_http_port {
  6. script "/home/jimite/keepalived/chk_nginx_pid.sh"
  7. interval
  8. weight
  9. }
  10.  
  11. vrrp_instance VI_1 {
  12. state MASTER
  13. interface eth0
  14. virtual_router_id
  15. priority
  16. advert_int
  17. authentication {
  18. auth_type PASS
  19. auth_pass
  20. }
  21. track_script {
  22. chk_http_port
  23. }
  24. virtual_ipaddress {
  25. 192.168.174.140/
  26. }
  27. }

备用节点的配置

  1. global_defs {
  2. router_id NODEB
  3. }
  4.  
  5. vrrp_script chk_http_port {
  6. script "/home/jihite/keepalived/chk_nginx_pid.sh"
  7. interval
  8. weight
  9. }
  10.  
  11. vrrp_instance VI_1 {
  12. state BACKUP
  13. interface eth0
  14. virtual_router_id
  15. priority
  16. advert_int
  17. authentication {
  18. auth_type PASS
  19. auth_pass
  20. }
  21. track_script {
  22. chk_http_port
  23. }
  24.  
  25. virtual_ipaddress {
  26. 192.168.174.140/
  27. }
  28. }

其中/home/jimite/keepalived/chk_nginx_pid.sh为

  1. #!/bin/bash
  2. A=`ps -C nginx --no-header |wc -l`
  3. if [ $A -eq ]
  4. then
  5. echo 'nginx server is died'
  6. sudo killall keepalived
  7. fi

问题:杀死keepalived进程后,可以实现vip的偏移,但是原机器的vip无法自动删除

原因:VRRP协议原理是:只有MASTER对外发送消息。各BACKUP接受消息,当接受不到消息时会在剩下的BACKUP机器中选出新的MASTER。
之前用kill -9 pid 或killall pid杀死keepalived进程,导致安装keepalived不能发送信息,BACKUP收不到信息升级为MASTER,但是由于进程被杀死【非正常关闭】,导致keepalived没有能力自己删除vip。
解决方案:关闭keepalived时用命令
       service keepalived stop  或   kill -15 pid(注:只删除第一个进程号)
存在问题:
       非正常关闭keepalived。 禁止使用kill -9  或killall杀死keepalived。

nginx + keepalived 双机热备的更多相关文章

  1. Nginx+keepalived双机热备(主主模式)

    之前已经介绍了Nginx+Keepalived双机热备的主从模式,今天在此基础上说下主主模式的配置. 由之前的配置信息可知:master机器(master-node):103.110.98.14/19 ...

  2. Nginx+keepalived 双机热备(主主模式)

    之前已经介绍了Nginx+Keepalived双机热备的主从模式,今天在此基础上说下主主模式的配置. 由之前的配置信息可知:master机器(master-node):103.110.98.14/19 ...

  3. 【Nginx】如何基于主从模式搭建Nginx+Keepalived双机热备环境?这是最全的一篇了!!

    写在前面 最近出版了<海量数据处理与大数据技术实战>,详情可以关注 冰河技术 微信公众号,查看<我的<海量数据处理与大数据技术实战>出版啦!>一文. 也有不少小伙伴 ...

  4. Nginx+keepalived双机热备(主从模式)

    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...

  5. Nginx+keepalived 双机热备(主从模式)

    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...

  6. Nginx+keepalived双机热备(默认路径安装)- 基础篇

    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...

  7. Nginx+Keepalived双机热备

    一.Keepalived Keepalived是保证集群高可用的服务软件.网络中优先级高的节点为master负责响应VIP的ARP包,将VIP和MAC地址映射关系告诉网络内其他主机,还会以多播的形式向 ...

  8. Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)

    原文:https://my.oschina.net/xshuai/blog/917097 摘要: Nginx+Keepalived搭建高可用负载均衡环境(HA) http://blog.csdn.ne ...

  9. Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)-转帖篇

    原文:https://my.oschina.net/xshuai/blog/917097 摘要: Nginx+Keepalived搭建高可用负载均衡环境(HA) http://blog.csdn.ne ...

随机推荐

  1. 新浪SAE数据库连接demo和说明

    <?php $con = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); // ...

  2. Nvidia Anisotropic Lighting

    http://http.download.nvidia.com/developer/SDK/Individual_Samples/DEMOS/Direct3D9/HLSL_Aniso.zip Anis ...

  3. PHP 常用函数库和一些实用小技巧

    PHP 常用函数库和一些实用小技巧 作者: 字体:[增加 减小] 类型:转载   包括文件读取函式,文件写入函式,静态页面生成函式,目录删除函式等   文件读取函式 //文件读取函式 function ...

  4. Oracle 安装 INS-30131错误。

    需要学习SDE配置相关知识,其中Oracle数据库安装遇到错误INS-30131,虽然未能最终解决,但找到了初步的思路,记录下来给大家提供参考.下文对很多知识的理解可能存在错误或不够精准,仅作参考. ...

  5. EBS 资源路径

    /data03/DEV4/comn/java/cmcc/upload cd  $OA_HTML /data03/DEV4/comn/html 日志 $IAS_ORACLE_HOME/Apache/Js ...

  6. WSDL Style和use的组合方式说明

    原文地址:http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing9 use属性可以为literal,encoded ...

  7. JBoss的安装与配置(对应eclipse配置)【转】

    安装JBoss纯粹是目的就是学习EJB3...至少现在是这样的 EJB需要运行在EJB容器中.每个J2EE应用服务器都含有EJB容器和Web容器.这样,既支持运行EJB,也可以运行Web应用 目前EJ ...

  8. 如何获取并分析L2CAP包

    本文中的分析与软件相关的内容,都是以WinCE中的 Microsoft Bluetooth Core Stack为例进行分析:与协议有关的内容,是基于Bluetooth Core 2.1 + EDR ...

  9. 回调的代理(delegate)实现

    1.CoreManage.h #import <Foundation/Foundation.h> @protocol SampleProtocol; //声明核心类的属性和方法 @inte ...

  10. Div自适应高度的方法

    http://www.yutheme.cn/website/index.php/content/view/39/63.html div高度自适应是个比较麻烦的问题,在朋友artery那里看到这个文章, ...