热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx+keepalived实现高可用

前两天成功配置了用nginx做负载均衡,此时nginx服务器存在单点故障的问题。可以通过使用keepalived实现高可用。网上搜了几篇文章,貌似都很简单,可是照着做时却遇

        前两天成功配置了用 nginx 做负载均衡,此时 nginx 服务器存在单点故障的问题。可以通过使用 keepalived 实现高可用。网上搜了几篇文章,貌似都很简单,可是照着做时却遇到了不少问题。我的虚拟机是 ubuntu 16.04,碰到问题也许是别人的机器不是 ubuntu 吧。

IP 分配:  

IP 地址 安装软件
192.168.137.47(主) Nginx + keepalived
192.168.137.48 (备) Nginx + keepalived
192.168.137.11 Tomcat
192.168.137.12 Tomcat

在 192.168.137.47 上:

       1. 安装 keepalived:   apt-get install keepalived

       2. 修改 /etc/keepalived/keepalived.conf 这个配置文件(我安装完后,这个配置文件并不存在,连 /etc/keepalived 这个文件夹都不存在,自己创建了),在文件里添加了如下内容:

    ! Configuration File for keepalived

global_defs {
   notification_email {
     zonghsh001@126.com
   }
   notification_email_from zonghsh007@126.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_Master   # 随便取一个唯一的标识符,主机和备机需要用不同的值
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_http_port {
   script "/opt/programs/keepalived/etc/keepalived/check_nginx_pid.sh"
   interval 2
   weight 2
}

vrrp_instance VI_1 {
    #state MASTER
    state BACKUP # 主、备都设成 BACKUP,主机的配置里再加下面 nopreempt 的配置,这样主机 down 掉后,原来的备机(192.168.137.48)就成了新的主机,本机再启动起来后,不会迫使 192.168.137.48 重新成为备机。192.168.137.48 在正常工作着,完全没必要做这样的切换
    nopreempt  #备机上不需要此配置
    interface ens33 # 通过 ifconfig 得到的本机的网卡
    virtual_router_id 51
    #mcast_src_ip 192.168.137.48
    priority 100  # 主机的 priority 的值需要比备机的值至少大50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
        chk_http_port
    }

    virtual_ipaddress {
        192.168.200.88/24 dev ens33 scope global  # 192.168.200.88 就是虚拟出来的 IP 地址,主机启动后,通过 ip a 就可以看到这个IP 地址绑定在了 ens33 这样网卡上,如果主机 down 了,备机就会拥有这个IP。
    }
}

上面的配置中,大括号前面都要有空格,一开始有几个地方我没有放空格,结果,怎么都出现不了那个虚拟的IP 地址。搞了好几个小时。。。。。。

另外,用到的 check_nginx_pid.sh 内容如下(自己创建完后需要加上执行权限):

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then                            
      /opt/programs/tengine/sbin/nginx
      sleep 4       
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then  
              killall keepalived                    
      fi
fi

        3. 为了查看 keepalived 的日志,网上搜了一下,好像没有简单的方式,只有通过复杂的方式。如下:

            (1)在 /etc/rsyslog.conf 文件末尾添加如下一行:

                       local0.*       /var/log/keepalived.log

            (2)重启日志服务:    /etc/init.d/rsyslog restart

            (3)启动时添加参数:  -D -S 0

        4. 启动 keepalived:      keepalived -D -S 0 -f /etc/keepalived/keepalived.conf

网上好多都说默认的配置文件地址是 /etc/keepalived/keepalived.conf, 但是我的好像不是,不指定的话,没有用到这个配置文件。对 ubuntu 不熟,上面的命令能执行,但是不知道它到底执行的是哪个目录下的 keepalived 执行文件。

        5. 启动成功后,在主机上运行 ip a 命令,可以发现类似下面的输出,出现了我们上面配置的 192.168.200.88 这个虚拟 IP 地址

           2: ens33: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:d7:c0:62 brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.48/24 brd 192.168.137.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.200.88/24 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fed7:c062/64 scope link

       6. 在主机上运行  killall keepalived,这样原来的副机就变成的主机,在原来的副机上运行第5步中的命令,可以看到 192.168.200.88 这个虚拟IP 地址。

 

诡异的事情来了,在别的机器竟然 ping 不通 192.168.200.88!! 网上搜了一下,可以主要检查的几点就是 http://zk2052041.blog.163.com/blog/static/1377237201533287298 里说的几点,可是我的问题依然存在,后来在搜索引擎里翻了几页,才看到有人说虚拟 IP 的网段应该设置成和真实 IP 同一个网段。我真实IP的网段是 192.168.137.XXX,我把上面的192.168.200.88 改成 192.168.137.88 后,终于成功了。

 

另外, nginx 的配置文件中的 server_name 应该配置成上面的虚拟 IP 的地址,别人的教程是这么写的,但是奇怪的是我本机配成不一样的地址,仍然可以正常工作,这是因为这里的 server_name 可以看作仅仅是别名,nginx 想要监听某台机器的某个端口,   listen 的值应该配置成  192.168.137.88:80,只写端口号的话,表示的是本机。

server {
        listen       80;
        server_name  192.168.137.88;

        location / {
            proxy_pass http://loadbalance;
            root   html;
            index  index.html index.htm;
        }

        location /status {
            check_status;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }


推荐阅读
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
author-avatar
手机用户2602905773
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有