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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python3基础:操作xml

    python3基础:操作xmlXML指的是可扩展标记语言(eXtensibleMarkupLanguage),和json类似也是用于存储和传输数据,还可以用作配置文件。类似于HTML超文本标记语言,但是HTML所有的标签都是预定义的,而xml的标签可以随便定义。XML元素指从开始标签到结束标签的部分(均包括开始和结束)一个元素可以包括:其它元素<aa> <bb></bb&gt…

    2022年7月12日
    20
  • offes破解2022激活码(注册激活)「建议收藏」

    (offes破解2022激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年4月1日
    91
  • LSD_SLAM编译之一气呵成法

    LSD_SLAM编译之一气呵成法LSD_SLAM编译之平台信息本LSD_SLAM编译平台信息:ubuntu16.04LSopencv3.XROS—kinetic其他的都不重要…ROS_kinetic的安装参考点击此处准备及安装注意:一定要下载此处的LSD_SLAM官方的lsd_slam一直没有编译成功,此LSD_SLAM已经被该作者fixedbugs.所以我们直接下载该git。…

    2022年5月7日
    47
  • Privoxy教程使用详解

    转载自品略图书馆http://www.pinlue.com/article/2020/04/0204/1610102129640.html简介Privoxy是一个代理软件简单说,就是进出你电脑的流量守门人。借由Privoxy,我们可以控制出去的请求,还可以改写返回的响应。不必要的请求–比如视频广告的地址、图片广告的地址,我们可以直接block掉;不必要的响应内容…

    2022年4月5日
    63
  • idea2021.11激活(注册激活)

    (idea2021.11激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1M3Q9SD5XW-eyJsaWN…

    2022年3月28日
    88
  • JS 获取浏览器窗口大小clientWidth、offsetWidth、scrollWidth「建议收藏」

    JS 获取浏览器窗口大小clientWidth、offsetWidth、scrollWidth「建议收藏」常用:JS获取浏览器窗口大小//获取窗口宽度if(window.innerWidth)winWidth=window.innerWidth;elseif((document.body)&&(document.body.clientWidth))winWidth=document.body.clientWidth;//获取窗口高度if(…

    2022年7月22日
    11

发表回复

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

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