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


相关推荐

  • Python 中return用法及意义「建议收藏」

    Python 中return用法及意义「建议收藏」return意义其实说白了,函数就是个你招来的工人。你给他一些材料,告诉他怎么用这些材料拼装,然后他负责把拼装好的成品交给你。材料就是函数的参数,成品是函数的输出,而怎么拼装就是你写的函数体代码了。比如这段代码defworker(a,b,c):x=a+by=x*c这个工人worker在你的指导下,用abc三个材料,装配出了x和y两个成品。但是程…

    2025年7月7日
    4
  • cubieboard mysql_Cubieboard A10 安装Nand系统,配置nginx,php,mysql,samba详细教程[通俗易懂]

    cubieboard mysql_Cubieboard A10 安装Nand系统,配置nginx,php,mysql,samba详细教程[通俗易懂]安装前置条件1.下载win32diskimager-v0.7-binary.zip2.下载debian_wheezy_armhf_v1_mele.zip3.下载cubie_nand_uboot_partition_image.zip4.下载FlashFXP.zip5.下载PanasonicSDFormatter.zip6.下载puttyfile_0.62cn.zip以上文件下载地址:http://…

    2022年7月22日
    11
  • 推荐 四种优秀的数据库设计工具[通俗易懂]

    推荐 四种优秀的数据库设计工具[通俗易懂]点击“终码一生”,关注,置顶公众号每日技术干货,第一时间送达!众所周知,良好的数据库设计能够大幅减少后期的运维工作,同时也能最大程度地减少软件项目出错的可能。由于我们所面临的真实项目需求往往五花八门,因此需要找到合适的设计工具,来实现事半功倍的效果。本文将从如下四个方面和您一起比较四种优秀数据库设计工具的各自优缺点。 用户界面 可支持的数据库 数据工具 售价 1、DbSchema官网:https://dbschema.com

    2022年7月11日
    41
  • cefsharp设置cookie,CefSharp如何存储Cookie

    cefsharp设置cookie,CefSharp如何存储CookieIcan’tgetcookiestosaveinCefSharp.HereiswhatItried:CefSettingssettings=newCefSettings();stringpath=Environment.GetFolderPath(Environment.SpecialFolder.Desktop);Cef.Initialize(newCefS…

    2026年1月21日
    3
  • 微信支付与支付宝钱包的竞争分析

    微信支付与支付宝钱包的竞争分析微信支付与支付宝钱包的竞争分析NO1:2013年8月,微信5.0上线,其中附加了一个功能叫做微信支付,当时的微信用户已经超过了4亿,活跃用户1.94亿,估计不少人在看微信支付同支付老大哥支付包的大战。说起微信支付和支付宝的大战,先来说说他们背景,微信支付是社交软件巨头腾讯公司旗下的微信中的附加功能,而支付宝是电商巨头阿里巴巴旗下的支付理财软件。两家都有超过2万的顶级互联网员工,兵强马壮…

    2022年5月14日
    61
  • android 创建数组

    android 创建数组一:privateString[]data=newString[]{“Hello”,”jike”,”world”};二:创建数组对象:privateCellData[]data=newCellData[]{newCellData(“jike”,”world”),newCellData(“title”,”content”)};publiccl…

    2022年6月1日
    32

发表回复

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

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