keepalived+Nginx实现高可用主从集群

keepalived+Nginx实现高可用主从集群

keepalived+Nginx【主从】集群架构图:

在这里插入图片描述

环境准备:


ip 备注
192.168.1.10 nginx+keepalived(主)
192.168.1.20 nginx+keepalived(从)
192.168.1.30 nginx/tomcat
192.168.1.40 nginx/tomcat
192.168.1.200 VIP

关闭防火墙沙盒

systemctl stop firewalld && systemctl disable firewalld && setenforce 0

安装nginx

192.168.1.10/20

`安装依赖`
yum -y install openssl openssl-devel zlib zlib-devel pcre pcre-devel gcc gcc-c++ make cmake
`解压并安装`
tar -zxf nginx-1.6.2.tar.gz
cd nginx-1.6.2 && ./configure && make && make install
`软连接`
ln -s /usr/local/nginx/sbin/nginx  /usr/sbin/

安装tomcat

此次实验web采用的是tomcat
192.168.1.30/40

`安装java环境`
yum -y install java-1.8.0-openjdk
`解压并安装`
tar -zxf apache-tomcat-8.5.42.tar.gz
`修改默认页面`
rm -rf /root/apache-tomcat-8.5.42/webapps/ROOT/index.jsp
echo 'web1/2' > /root/apache-tomcat-8.5.42/webapps/ROOT/index.html
`启动`
/root/apache-tomcat-8.5.42/bin/startup.sh

测试访问
在这里插入图片描述
在这里插入图片描述

Nginx配置反向代理轮询

192.168.1.10/20

vi /usr/local/nginx/conf/nginx.conf
####配置内容#####

    #gzip on;
    upstream web {
   
      server 192.168.1.30:8080 weight=1 max_fails=3 fail_timeout=10s;
      server 192.168.1.40:8080 weight=1 max_fails=3 fail_timeout=10s;
}
    server {
   
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log logs/host.access.log main;

        location / {
   
          proxy_pass http://web/;
        }

        #error_page 404 /404.html;

`` ``
nginx #启动
nginx -t #文件检查
nginx -s stop  #停止
nginx -s reload #重启

在这里插入图片描述
在这里插入图片描述

安装keepalived

本次实验直接使用yum安装

yum install keepalived -y

查看服务器使用的网卡名称:ens33
在这里插入图片描述

配置keepalived文件

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
     #keepalived节点出现故障,给管理员发送消息
   notification_email {
    # 管理员的邮箱
     123@qq.com
   }
   notification_email_from abc@qq.com #邮箱的发件者
   smtp_server 192.168.1.200 #邮箱服务器的ip
   smtp_connect_timeout 30 #邮件服务器连接的超时时间
   router_id LVS_DEVEL #节点的标识符(hostname)
}

vrrp_instance VI_1 {
    #vrrp协议组的名称
    state MASTER # 节点的状态 主(master)
    interface ens33  #用来发送vrrp的网卡
    virtual_router_id 66 #server_id 一个组的ip必须一致
    priority 100 #当前节点的优先级 1-255
    advert_int 1 #vrrp通告的间隔时间,单位为s
    authentication {
    #认证主和备之间的通讯
        auth_type PASS #认证类型
        auth_pass 1111 #使用的密钥
    }
    virtual_ipaddress {
    #vip的地址
        192.168.1.200
    }
}

virtual_server 192.168.1.200 80 {
    
    delay_loop 6 #对后端的健康检查间隔的时间
    lb_algo rr  #调度算法rr
    lb_kind DR   #调度模式 DR
    net_mask 255.255.255.0  #netmask
    persistence_timeout 0 #会话保持时间
    protocol TCP #使用传输协议时tcp

    real_server 192.168.1.10 80 {
    #后端真实节点 ip端口
        weight 1 #节点的权重
        connect_port 80 #连接节点的端口
        connect_timeout 3 #节点连接等待的时间
        nb_get_retry 3 #节点连接的次数
        delay_before_retry 3 #每隔多久和节点建立连接
}
    real_server 192.168.1.20 80 {
   
        weight 1
        connect_port 80
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
}
}

! Configuration File for keepalived

global_defs {
   
   notification_email {
   
     123@qq.com
   }
   notification_email_from abc@qq.com
   smtp_server 192.168.1.200
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
   
    state BACKUP
    interface ens33
    virtual_router_id 66
    priority 90
    advert_int 1
    authentication {
   
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
   
        192.168.1.200
    }
}

virtual_server 192.168.1.200 80 {
   
    delay_loop 6
    lb_algo rr
    lb_kind DR
    net_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP

    real_server 192.168.1.10 80 {
   
        weight 1
        connect_port 80
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
}
    real_server 192.168.1.20 80 {
   
        weight 1
        connect_port 80
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
}
}

启动keepalived

systemctl start keepalived

master先启动slave后启动
可以看到master节点出现了vip
在这里插入图片描述

修改nginx配置文件&server_name为vip

在这里插入图片描述
重启nginx

nginx  -s reload

测试

访问vip

在这里插入图片描述
查看master节点上的nginx:
在这里插入图片描述
slave节点上的nginx未输出:
在这里插入图片描述

模拟master节点宕机

[root@SLBmaster ~]# systemctl stop keepalived

此时VIP漂移到了slave节点
在这里插入图片描述
测试访问:
在这里插入图片描述
slave节点nginx日志输出
在这里插入图片描述
master节点nginx日志未输出
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101801.html原文链接:https://javaforall.net

(0)
上一篇 2021年6月3日 下午5:00
下一篇 2021年6月3日 下午6:00


相关推荐

  • contentWindow的使用

    contentWindow的使用contentWindo 属性是指指定的 frame 或者 iframe 所在的 window 对象 functionfnNa for i 0 i if document all i tagName IFRAME document all i contentWindo location http www msn com

    2026年3月26日
    1
  • phpstorm2021激活码3月最新在线激活[通俗易懂]

    phpstorm2021激活码3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    46
  • php表单加入Token防止重复提交的方法分析

    php表单加入Token防止重复提交的方法分析

    2021年10月18日
    41
  • 如何查看redis版本号[通俗易懂]

    如何查看redis版本号[通俗易懂]Windows下查看redis版本号1、打开redis所在目录启动redis-server服务器端。2、启动redis-cli客户端。3、客户端输入:info结果如下:linux下查看redis的版本号linux下查看redis的版本有两种方式:1、查看服务端版本**二者都可以**redis-server–versionredis-server-v输出:2、查看客户端版本**二者都可以**redis-cli-vredis-cli–versio.

    2022年6月12日
    65
  • python编手机程序_python程序设计

    python编手机程序_python程序设计手机编程软件有很多,大部分都很难使用,操作不灵活,甚至不能安装第三方库。尝试安装了很多Python移动编程软件,发现了很多问题,不是编码效率低就是各种bug。今天,来自一位python编程小哥指导,向大家推荐两款精心挑选的手机编程软件,它们也是非常成熟的手机编程工具。QPythonOHQpython是一个轻量级的、成熟的python编程工具。它配有终端和简单的代码编辑器。它支持安装第三方库。目…

    2022年8月12日
    10
  • ubuntu修改hostname

    在Ubuntu系统中,快速查看主机名有多种方法:其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后;其二,在终端窗口中输入命令:hostname或uname–

    2021年12月23日
    80

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号