主从热备+负载均衡(LVS + keepalived)

前言

  淘宝架构师李智慧大牛的书籍《大型网站技术架构》以及旭龙兄的博客 ---》【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

  从上参考而得来本文,本文旨在记录自己的学习过程,同时给大家参考,不对的地方欢迎大家拍砖,拍砖的同时也希望甚至恳请大家能写出原因,让大家都有所明白和收获!

  相关的概念我这里就不多讲了,可以从如上的书籍和旭龙兄的博客中去了解,那么下面直接开始我们的实践!

环境准备

  本机 + virtualBox + 4台centOs虚拟机,如下图

  virtualBox安装以及CentOS安装这里就不再演示,大家自行搭建;本机在本次试验中扮演的角色就是客户端,起到一个发送请求的作用,两台CentOS做负载均衡服务器(一台为主机,一台为备机),另外两台作为真实的Web服务器(安装有tomcat)。

  本次实验基于DR负载均衡模式(直接路由,旭龙兄的博客有讲解),设置一个VIP(Virtual IP)为192.168.1.200,用户只需要访问这个IP地址即可获得网页服务。其中,负载均衡主机为192.168.1.114(master),备机为 192.168.1.112(brucelee)。Web服务器A为192.168.1.111(youzhibing),Web服务器B为192.168.1.115(youzhibing03),四台机器命名除了master外都不太规范,但不影响实验。四台CentOS的防火墙都需要关闭。利用Xshell链接CentOS,如下图

配置两台web服务器

  和本地部署web项目一样,将myWeb部署到tomcat中,开启tomcat,宿主机访问(virtualBox安装linux,并搭建tomcat请点这),如下图

  将这两台web服务器都配置成lvs的real server,编辑realserver脚本文件,进入指定文件夹:cd /etc/init.d/,编辑脚本文件:vim realserver,如下图

  /etc/init.d/realserver 内容如下

#vi /usr/local/sbin/realserver.sh
#!/bin/bash
# description: Config realserver lo and apply noarp
#Written by :NetSeek http://www.linuxtone.org

SNS_VIP=192.168.1.200

. /etc/rc.d/init.d/functions

case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
      echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

exit 0

  保存脚本文件后更改该文件权限:chmod 755 realserver,开启realserver服务:service realserver start;

  注意:配置real server是web服务器都需要配置的,有多少台就配置多少台!

配置主负载服务器

  1.安装Keepalived相关包

yum install -y keepalived

  在CentOS下,通过yum install命令可以很方便地安装软件包,但是前提是你的虚拟机要联网,若没有联网则先从有网的地方下载压缩包,然后拷贝或者上传到linux系统,再进行安装;

  2.编辑keepalived.conf配置文件

    ①进入keepalived.conf所在目录:cd /etc/keepalived

    ②首先清除掉keepalived原有配置:> keepalived.conf

    ③重新编辑keepalived配置文件:vi keepalived.conf

    内容如下:

global_defs {
    notification_email {
        997914490@qq.com
    }
    notification_email_from sns-lvs@gmail.com
    smtp_server 192.168.1.114
    smtp_connection_timeout 30
    router_id LVS_MASTER         # 设置lvs的id,在一个网络应该是唯一的
}
vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface eth0            # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
    virtual_router_id 66        # 虚拟路由编号,主从要一直
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.200        # 定义虚拟ip(VIP),可多设,每行一个
    }
}
# 定义对外提供的LVS的VIP以及port
virtual_server 192.168.1.200 8080 {
    delay_loop 6             # 设置健康检查时间,单位为秒
    lb_algo wrr            # 设置负载调度的算法为wrr
    lb_kind DR            # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
    nat_mask 255.255.255.0
    persistence_timeout 0        # 同一IP 0秒内的请求都发到同个real server
    protocol TCP
    real_server 192.168.1.111 8080 { # 指定real server1的ip地址
        weight 3        # 配置节点权值,数值越大权重越高
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.115 8080 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}    

配置从负载服务器

  和主负载服务器一样,先安装keepalived,然后编辑keepalived.conf,内容如下,与主负载服务器有些许差别

global_defs {
    notification_email {
        997914490@qq.com
    }
    notification_email_from sns-lvs@gmail.com
    smtp_server 192.168.1.112
    smtp_connection_timeout 30
    router_id LVS_BACKUP         # 设置lvs的id,在一个网络应该是唯一的
}
vrrp_instance VI_1 {
    state BACKUP            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface eth0            # 当前进行vrrp通讯的网络接口卡(当前进行vrrp通讯的网络接口卡)
    virtual_router_id 66        # 虚拟路由编号,主从要一致
    priority 99            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.200        # 定义虚拟ip(VIP),可多设,每行一个
    }
}
# 定义对外提供的LVS的VIP以及port
virtual_server 192.168.1.200 8080 {
    delay_loop 6             # 设置健康检查时间,单位为秒
    lb_algo wrr            # 设置负载调度的算法为wrr
    lb_kind DR            # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式
    nat_mask 255.255.255.0
    persistence_timeout 0        # 同一IP 0秒内的请求都发到同个real server
    protocol TCP
    real_server 192.168.1.111 8080 { # 指定real server1的ip地址
        weight 3        # 配置节点权值,数值越大权重越高
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.115 8080 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}    

  启动keepalive服务,主从都要启动!

service keepalived start

效果展示

  1.负载均衡演示

    这里出现了问题,发现同一个浏览器一段时间内刷新,得到的结果是同一个,也就是说同一个ip某一段时间内的请求交给了同一台real server处理,用centos上的浏览器测试也是一段时间内的请求得到的是同一个结果,但是与宿主机却有所不同,比如宿主机得到的是相同的192.168.1.115,而centos上得到的却是192.168.1.111,,可明明我配置了persistence_timeout 0,找了不少资料,还是没能解决!希望知道的朋友可以不吝赐教,在评论区进行留言,谢谢了!

  a.web服务器出现故障

    192.168.1.115发生故障,关闭115也就是youzhibing03的tomcat服务

      那么宿主机与虚拟机上的结果都只有一个,都得到如下结果

  b.web服务器修复,重新启动115的tomcat服务

      宿主机得到如下结果

      可虚拟机上显示的却还是192.168.111的结果

  2.主从热备演示

    a.关闭主负载服务器的keepalived服务

      刷新页面,依然能得到如下结果

      那么也就说明从负载服务器(brucelee)接管了,我们来看下日志

      发现从负载服务器确实接管了主负载服务器的任务

    b.当之前的主负载服务器(master)修复后,日志文件如下

      主负载服务器恢复后,从负载服务器让出位置,回到最初的主从状态了!

总结

  总的来说,最终的效果还是符合标题的,虽然在负载均衡那一块有些许疑问,好像没有达到负载均衡的目的,但是也确实只是好像,因为总体而言还是有负载均衡效果的,比如宿主机的得到的是115的结果,而虚拟机上的得到的是111的结果;

  目前流行的LVS解决方案中,在Web服务器端也有采用了Nginx+Tomcat这样的搭配类型,静态文件和动态文件分开进行处理,也不失为一种有效的尝试。在以后的日子里,我会陆续进行实践,并分享给大家!

后话

  这篇博客其实周六就写好了,但是一直纠结负载均衡那个位置,迟迟没有发表出来,也是希望对自己和对大家负责吧;但是有好心不一定就有好的结果,查阅了不少资料,也进行了不少修改,可负载均衡的效果一直没有改变(不是没有哦!),离我预期的有些出入,虽然有出入,但我认为负载均衡的效果是存在的,只是与单个浏览器刷新而得到两个效果之间轮流切换有一些不同罢了!

  另外提一点,如果大家想亲手实践下的话,我建议大家的硬件不要太低了,我的i7处理器 + 4G内存,运行主机 +4台虚拟机有点卡,建议大家内存上大点,最好8G以上;

  最后强调一点:实践是检验真理的唯一标准! 有些许的冲动就赶快去实践!

时间: 2024-10-27 00:57:23

主从热备+负载均衡(LVS + keepalived)的相关文章

keepalived+nginx双机热备+负载均衡

keepalived+nginx双机热备+负载均衡 最近因业务扩展,需要将当前的apache 转为nginx(web), 再在web前端放置nginx(负载均衡).同时结合keepalived 对前端nginx实现HA. nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都

Nginx+keepalived双机热备+负载均衡 ???待续

keepalived+nginx双机热备+负载均衡 最近因业务扩展,需要将当前的apache 转为nginx(web), 再在web前端放置nginx(负载均衡).同时结合keepalived 对前端nginx实现HA.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由

负载均衡--LVS+Keepalived

利用LVS+Keepalived 实现高性能高可用负载均衡    背景: 随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时实现商业硬件一样的高性能高可用的功能?有什么好的负载均衡可伸张可扩展的方案吗?答案是肯定的!有!我们利用LVS+Keepalived基于完整开源软件的架构可以为你提供一个负载均衡及高可用的服务器. 一.LVS+Keepalived 介绍 1. LVS LVS是Linux

Linux学习总结(五十四)keepalived+lvs 双机热备负载均衡架构

一 LVS IP tunnel 模式介绍 IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址.IP隧道技术亦称为IP封装技术(IP encapsulation).IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址.它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同.调度器

centos7部署负载均衡LVS+keepalived

LVS集群的组成 利用LVS架设的服务器集群系统由3个部分组成:最前端的是负载均衡层(HA Load Balance),中间是服务器群组层(Server Array),底端是数据共享存储层(Shared Storage). LVS集群的特点 LVS提供负载均衡,keepalived提供健康检查,故障转移,提供高可用性! LVS的IP负载均衡技术是通过VIP模块来实现的.IPVS是LVS集群系统的核心软件,它主要作用是:安装在Director Server上,同时在Director Server上

Linux集群之高可用负载均衡lvs+keepalived

LVS简介 LVS介绍 LVS是Linux Virtual Server的缩写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,属于4层负载均衡 ipvs和ipvsadm的关系 我们使用配置LVS的时候,不能直接配置内核中的ipvs,需要使用ipvs的管理工具ipvsadm进行管理 LVS术语 LVS转发原理 LVS负载均衡器接受所有入站请求,并根据调度算法决定哪个realserver处理该请求 LVS调度算法 轮询(rr):按照请求顺序轮流分发到后端RS 加权轮询(wrr):权值高的获得

非常强悍并实用的双机热备+负载均衡线上方案

Heartbeat+DRBD+NFS+Keepalived+Lnmp 对于网站服务器来说,可靠性之重要不用我多说,但要想做到可靠性一般需要昂贵的设备,这里最主要是就是数据同步用的共享磁盘了,磁盘柜+磁盘一共下来是20多万,这对于追求最高性价比的双机负载热备方案来说是极其不靠谱的,尤其是中小型企业,私有企业,一般经理是不会考虑这么高的成本的.我们通常做都是四台服务器+一个磁盘柜子+千兆交换机,那么这个成本下来将近30万了,而且这个方案有个弊端就是 存储依然存在单点故障,除非使用双控制+双电源+双主

Lvs+keepalived+mysql主从热备

p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Calibri", "sans-serif" } h1 { margin-top: 17.0pt; margin-right: 0cm; margin-bottom: 16.5pt; margin-left

企业实战-KeepAlived+Redis实现主从热备、秒级切换

最近公司生产环境需要做一个Redis+Keepalived的集群架构,分别用六个端口,实现多路复用,最终实现主从热备.秒级切换. 一.部署Redis集群 首先用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环 境.然后模拟成功,方可去线上生产服务器部署. redis 采用 redis-3.2.4 版本. 两台虚拟机都是 CentOS ,一台 CentOS6.5 (IP:192.168.31.245),一台 CentOS7(IP:192.168.31.210)