前言

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

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

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

  路漫漫其修远兮,吾将上下而求索!

  github:https://github.com/youzhibing

  码云(gitee):https://gitee.com/youzhibing

回到顶部

环境准备

  本机 + 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.orgSNS_VIP=192.168.1.200. /etc/rc.d/init.d/functionscase "$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_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>&1echo "RealServer Start OK";;
stop)ifconfig lo:0 downroute del $SNS_VIP >/dev/null 2>&1              echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/all/arp_announceecho "RealServer Stoped";;
*)echo "Usage: $0 {start|stop}"exit 1
esacexit 0

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

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

回到顶部

配置负载服务器(master)

  安装Keepalived

yum install -y keepalived

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

  配置keepalived

    ①进入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.comsmtp_server 192.168.1.114smtp_connection_timeout 30router_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 PASSauth_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            # 设置负载调度的算法为wrrlb_kind DR            # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式nat_mask 255.255.255.0persistence_timeout 0        # 同一IP 0秒内的请求都发到同个real serverprotocol TCPreal_server 192.168.1.111 8080 { # 指定real server1的ip地址weight 3        # 配置节点权值,数值越大权重越高TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}}real_server 192.168.1.115 8080 {weight 3TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}}
}    

回到顶部

配置负载服务器(slave)

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

global_defs {notification_email {997914490@qq.com}notification_email_from sns-lvs@gmail.comsmtp_server 192.168.1.112smtp_connection_timeout 30router_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 PASSauth_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            # 设置负载调度的算法为wrrlb_kind DR            # 设置lvs实现负载的机制,有NAT、TUN、DR三个模式nat_mask 255.255.255.0persistence_timeout 0        # 同一IP 0秒内的请求都发到同个real serverprotocol TCPreal_server 192.168.1.111 8080 { # 指定real server1的ip地址weight 3        # 配置节点权值,数值越大权重越高TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}}real_server 192.168.1.115 8080 {weight 3TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3}}
}    

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

service keepalived start

回到顶部

效果展示

  负载均衡演示

    这里出现了问题,发现同一个浏览器一段时间内刷新,得到的结果是同一个,也就是说同一个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的结果

  主从热备演示

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

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

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

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

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

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

回到顶部

总结

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

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

回到顶部

后话

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

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

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

转载地址:http://www.cnblogs.com/youzhibing/p/5021224.html

主从热备+负载均衡(LVS + keepalived)相关推荐

  1. njx如何实现负载均衡_LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

    前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...

  2. 双机热备+负载均衡(Heartbeat+DRBD+NFS+Keepalived+Lnmp)线上方案

    双机热备+负载均衡 线上方案 (Heartbeat+DRBD+NFS+Keepalived+Lnmp) gotop 对于网站服务器来说,可靠性之重要不用我多说,但要想做到可靠性一般需要昂贵的设备,这里 ...

  3. 双机热备+负载均衡 线上方案 (Heartbeat+DRBD+NFS+Keepalived+Lnmp)

    对于网站服务器来说,可靠性之重要不用我多说,但要想做到可靠性一般需要昂贵的设备,这里最主要是就是数据同步用的共享磁盘了,磁盘柜+磁盘一共下来是20多万,这对于追求最高性价比的双机负载热备方案来说是极其 ...

  4. 综合项目:Keepalived+Redis+Haproxy实现主从热备、负载均衡、秒级切换

    Keepalived+Redis+Haproxy 群集 一.部署 Redis 群集 1.编译安装 Redis 1)创建群集目录 2)编辑配置文件 3)复制配置文件到每个实例 4)启动 Redis 实例 ...

  5. haproxy keepalived_企业实战KeepAlived+Redis+Haproxy实现主从热备、负载均衡、秒级切换...

    最近公司生产环境需要做一个Redis+Keepalived+Haproxy的集群架构,分别用六个端口,实现多路复用,最终实现主从热备.负载均衡.秒级切换. 一,Redis6.06集群官网部署,这里不再 ...

  6. Mac内CentOS7虚拟机搭建lvs+keepalived+nginx双机主从热备

    Mac内CentOS7虚拟机搭建lvs+keepalived+nginx双机主从热备 [目前列出操作大纲,后续复习完善详细配置内容] MAC:00:50:56:38:3D:80 2核4G,硬盘20G ...

  7. Windows server 2012 R2 DHCP主从热备配合华为交换机DHCP中继配置详解(非域控版本)

    最近在给部门的Windows DHCP服务器配置主从热备,这里记录下操作过程以及一些坑和解决方法.同时因为涉及到跨网段的DHCP,还需要在三层交换机上配置DHCP中继. 我是T型人小付,一位坚持终身学 ...

  8. haproxy负载均衡_Haproxy+keepalived高可用集群实战

    随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡F5,Haproxy提供高可用性.负载均衡以及基于TCP和HT ...

  9. mysql5.6热升级_Mysql5.6主从热备配置

    数据库是应用系统的核心,为了保证数据库的安全采用主从热备是很常见的方法,也就是主数据库DDL.DML都将被同步到从数据库. 一.      实验环境 操作系统:windowsserver 2008 R ...

  10. 防火墙双机热备+负载分担

    防火墙双机热备+负载分担实验步骤 防火墙双机热备+负载分担实验以及两者之间的区别,通过实验.配置思路加深理解 负载分担: 防火墙双击热备和负载分担的区别就在于在双机热备模式下,fw1既是pc1的网关, ...

最新文章

  1. 手把手教你如何配置fiddler、并开启手机代理抓包、最详细
  2. onmouseover-onmouseout
  3. Abstract Self-Balancing Binary Search Tree
  4. api网关 android,如何通过Android上的retrofit2使用Cognito Credentials调用API网关?
  5. linux安装redis和mysql
  6. 微信防撤回是怎么实现的?
  7. word插入公式不自动斜体的解决办法
  8. kaggle员工离职预测案例(3)
  9. R语言可视化散点图、ggrepel包的geom_text_repel函数避免数据点之间的标签互相重叠(设置segment.square为假以获得斜曲线,segment.inflect设置为真以引入拐点
  10. 曝新款苹果手机将采用低功耗微处理器,Find My定位在关机状态下也能使用
  11. BAT文件的编写及使用
  12. 年轻计算机科学家,15岁最年轻科学家具体什么情况? 谈方琳个人资料介绍有何成就...
  13. “网上购车平台”又出新模式
  14. 苹果手机一卡通找不到了的解决方案 换手机 重下APP 找不到一卡通解决方案
  15. Android问题集锦之三十一:Android Studio: Plugin with id 'android-library' not found
  16. 2020年美国大学计算机科学专业排名,2020年USNews美国大学计算机工程专业研究生排名...
  17. C# 中的Tag属性
  18. css svg使用_使用CSS使SVG响应
  19. java中scanner类的常见方法用法总结
  20. 48、mmpose中hrnet关键点识别模型转ncnn和mnn,并进行训练和部署

热门文章

  1. TiDB 社区成长足迹与小红花 | TiDB DevCon 2019
  2. 视频教程-微信公众号自定义分享朋友圈、发送朋友(标题、描述、缩略图)-微信开发
  3. 【AcWing每日一题】4261. 孤独的照片
  4. 对于atomic nonatomic assign retain copy strong weak的简单理解
  5. C语言实现求字符串的长度函数(附完整源码)
  6. 程序人生 | 一名程序员十年技术之路的思考与感悟
  7. python源程序执行的方式边编译边执行_[单选] 婴幼儿特别是新生儿,保持心输出量的最重要因素是()。...
  8. 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 7月19日
  9. 计算机方向的一些顶级会议和期刊—Top Conferences and Journals in Computer Science
  10. 计算机科学技术专业毕业生自荐...,计算机科学与技术专业毕业生自荐信范文