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日志未输出
在这里插入图片描述

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Android ListView 分组效果实现「建议收藏」

    Android ListView 分组效果实现「建议收藏」AndroidListView实现分组的功能,并且点击相应的分组可以对相应的分组展开和收缩。

  • python:类基础「建议收藏」

    python:类基础「建议收藏」1、面向对象编程(oop)是一种程序设计思想。oop把对象作为程序的基本单元,一个对象包含数据和操作数据的函数2、在python中,所有数据类型都被视为对象,也可以自定义对象。自定义对象数据类型就是面向对象中类的概念1、类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例2、方法:类中定义的函数3、类变量(属性):类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体(方法)之外。类变量通常不作为实例变量使用,类变量也称作属性4、数

  • Android启动模式FLAG_ACTIVITY_CLEAR_TOP

    Android启动模式FLAG_ACTIVITY_CLEAR_TOP关于这个问题,我试了一下。例:A,B,C,D四个Activity,启动模式均为默认,依次启动,在D中启动B。添加intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)效果:C会被清除出栈;然后B被finish掉,重新启动;D被销毁。重走生命周期,不会走onNewIntent()方法Intentintent=newIntent(this,TestBActivity.class);intent.setFlags(Intent.FLAG_AC

  • Echarts整合(前后端、数据库)

    Echarts整合(前后端、数据库)

    2021年11月12日
  • Linux系统时间和硬件时间设置[通俗易懂]

    Linux系统时间和硬件时间设置[通俗易懂]Linux系统时间和硬件时间设置

  • 4.4.2分类模型评判指标(一) – 混淆矩阵(Confusion Matrix)

    4.4.2分类模型评判指标(一) – 混淆矩阵(Confusion Matrix)简介混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法。一句话解释版本:混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。数据分析与挖掘体系位置混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外,混淆矩阵多用于判断分类器(Classifier)的优劣,适用于…

发表回复

您的电子邮箱地址不会被公开。

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