Nginx+Keepalived实现双机主备的方法

Nginx+Keepalived实现双机主备的方法,第1张

Nginx+Keepalived实现双机主备的方法

本文主要介绍Nginx+Keepalived的方法实现双机主动待机。通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。让我们和边肖一起学习。

前言

首先,我们来介绍一下Keepalived,这是一种高性能服务器高可用或热备解决方案。起初,它是为LVS负载平衡软件设计的。Keepalived主要用于防止服务器单点故障的发生,通过与Nginx的配合,可以实现web服务器的高可用。

Keepalived基于VRRP协议,是虚拟路由器冗余协议的缩写。VRRP协议将两台或多台路由器设备虚拟化为一台设备,并向外部提供虚拟路由器IP。

VRRP的目的是解决静态路由的单点故障问题,它可以保证在单个节点宕机时整个网络能够不间断运行。

下面介绍nginxkeepalived高可用方案的部署和安装。

环境准备

在两台主机上准备以下压缩文件:

  • keepalived-2.0.20.tar.gz
  • nginx-1.16.1.tar.gz
  • 虚拟IP

    真实IP

    Nginx端口

    主要和次要

    192.168.124.20

    192.168.124.13

    80

    掌握

    192.168.124.20

    192.168.124.14

    80

    支持

    安装nginx

    创建新用户:

    useraddtianyan

    确定安装目录。我这里的安装目录是:/home/田燕/田燕_soft/nginx.install

    在这个目录下,新建两个目录安装nginx和keepalived,解压这两个压缩包。

    执行安装命令:

    ./configure--prefix=/home/tianyan/tianyan_soft/nginx.install\ --sbin-path=/home/tianyan/tianyan_soft/nginx.install/sbin/nginx--conf-path=/home/tianyan/tianyan_soft/nginx.install/conf/nginx.conf\ --error-log-path=/home/tianyan/tianyan_soft/nginx.install/error.log\ --http-log-path=/home/tianyan/tianyan_soft/nginx.install/access.log\ --pid-path=/home/tianyan/tianyan_soft/nginx.install/nginx.pid\ --lock-path=/home/tianyan/tianyan_soft/nginx.install/nginx.lock\ --user=tianyan--group=tianyan\ --with-http_stub_status_module\ --with-http_gzip_static_module\ --with-http_ssl_module\ --with-http_realip_module\ --with-threads\ --with-pcre\ --http-client-body-temp-path=/home/tianyan/tianyan_soft/nginx.install/client/\ --http-proxy-temp-path=/home/tianyan/tianyan_soft/nginx.install/proxy/\ --http-fastcgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/fcgi/\ --http-uwsgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/uwsgi\ --http-scgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/scgi

    如果您报告了错误,请记住安装相关的依赖项:

    yuminstallgccgcc-c++ nginx:[emerg]bind()to0.0.0.0:80failed(13:Permissiondenied)。

    注意:以非root权限启动时,会出现错误nginx:[emerg]bind()to0.0.0.0:80failed(13:权限被拒绝)。

    原因:在Linux中只有root用户可以使用1024以下的端口。

    解决方案:

    1.按照root权限启动。

    2.将/usr/local/nginx/conf/nginx.conf文件中的端口80更改为大于1024。

    安装keepalived

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

    执行完上述命令后,继续执行:

    make&&makeinstall

    安装后,目录如下所示:

    将配置文件复制到系统的相应目录中。

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

    编辑主节点的keepalived.conf

    vim/etc/keepalived/keepalived.conf

    内容如下:

    !ConfigurationFileforkeepalived global_defs{ #一个没重复的名字即可 router_idhyq_slave } #ng是否运行 vrrp_scriptchk_nginx{ script"/etc/keepalived/nginx_check.sh" interval2 weight-20 } vrrp_instanceVI_1{ stateBACKUP#必填,可以是MASTER或BACKUP interfaceens33 virtual_router_id101 priority90 advert_int1 #如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式 #本机ip unicast_src_ip192.168.124.14 unicast_peer{ #其他机器ip 192.168.124.13 } #设置nopreempt防止抢占资源 nopreempt authentication{ auth_typePASS auth_pass1111 } #与上方nginx运行状况检测呼应 track_script{ chk_nginx } virtual_ipaddress{ 192.168.124.20 } }

    编辑从节点的keepalived.conf

    vim/etc/keepalived/keepalived.conf !ConfigurationFileforkeepalived global_defs{ #一个没重复的名字即可 router_idhyq_slave } #ng是否运行 vrrp_scriptchk_nginx{ script"/etc/keepalived/nginx_check.sh" interval2 weight-20 } vrrp_instanceVI_1{ stateBACKUP#必填,可以是MASTER或BACKUP interfaceens33 virtual_router_id101 priority90 advert_int1 #如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式 #本机ip unicast_src_ip192.168.124.14 unicast_peer{ #其他机器ip 192.168.124.13 } #设置nopreempt防止抢占资源 nopreempt authentication{ auth_typePASS auth_pass1111 } #与上方nginx运行状况检测呼应 track_script{ chk_nginx } virtual_ipaddress{ 192.168.124.20 } }

    编写nginx_check.sh脚本

    在/etc/keepalived目录下创建一个新的nginx_check.sh脚本。

    touchnginx_check.sh

    编辑内容是:

    #!/bin/sh A=`ps-Cnginx--no-header|wc-l` if[$A-eq0] then /usr/sbin/nginx sleep1 A2=`ps-Cnginx--no-header|wc-l` if[$A2-eq0] then systemctlstopkeepalived fi fi

    含义:如果nginx停止运行,尝试启动,但如果无法启动,就杀死本机的keepalived进程,keepalived会将虚拟ip绑定到备份机。注意:/usr/sbin/nginx是nginx的启动命令。如果安装到另一个目录,请相应地替换它。

    保存已激活的日志

    Keepalived日志的默认位置在/var/log/messages目录中。我们来修改一下。

    由于系统为centos7,修改位置为:/lib/systemd/system/keepalived.service。

    原始内容:

    environmentfile=-/usr/local/KEEPALIVED/etc/sysconfig/KEEPALIVED
    ExecStart=/usr/local/KEEPALIVED/sbin/KEEPALIVED$KEEPALIVED_OPTIONS

    修改为:

    修改后重新加载服务。

    systemctldaemon-reload

    创建命令软连接:

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

    执行:

    keepalived-D-f/etc/keepalived/keepalived.conf

    -D将日志输出到messagelog,默认日志也在message
    -f是指定的配置文件。

    修改/etc/sysconfig/keepalived

    将KEEPALIVED_OPTIONS="-D"修改为:KEEPALIVED_OPTIONS="-D-d-S0"

    添加到/etc/rsyslog.conf的末尾。

    local0.*/var/log/keepalived.log

    最后执行命令:

    servicersyslogrestart

    重新启动keepalived后,可以在/var/var/log/keepalived.log下看到日志

    测试并验证VIP

    当keepalived和nginx都启动后,我们来测试一下。

    首先,在浏览器中访问三个地址。

  • http://192.168.124.20(vip)
  • http://192.168.124.13(主)
  • http://192.168.124.14(从属)
  • 我修改了nginx的index.html,可以看到当前的vip指向13:

    然后,我们在13上手动停止nginx,再次访问http://192.168.124.20。

    说明安装是成功的。

    网卡的变化可以通过ip地址命令观察到。

    实验进行到这里,我们已经完成了keepalived+nginx主从配置的安装和部署。

    思考:如何开启双主模式

    什么是双主模式?

    分别介绍两种配置。

    1.nginx+保持主从配置

    上面介绍了这个方案。使用一个vip地址,前端使用两台机器,一台为主,一台备用。但同时只有一台机器工作,另一台备份机器在主机器不出故障的情况下一直处于废机状态。只用于灾难恢复,通常空空闲。

    2.nginx+保持激活的双主配置

    该方案使用两个vip地址,前端使用两台机器,各为主备。两台机器同时工作。当其中一台失败时,两台机器的请求转移到一台机器上,如下图所示:

    【实战】elasticsearch写作速度提升案例分享

    用java(PC协议)做一个赚钱的微信群聊机器人

    将数百万Mysql数据高效导入Redis

    Java在线故障分析+性能调优

    关于用Nginx+Keepalived实现双机主从的方法这篇文章到此为止。更多关于NginxKeepalived的双机主从,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/zz/774579.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-03
    下一篇 2022-05-03

    发表评论

    登录后才能评论

    评论列表(0条)

    保存