LVS+Keepalived DR模式负载均衡+高可用集群架构图

工作原理:

Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能。

VRRP,虚拟路由冗余协议,是针对路由器的一种备份解决方案。由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务。每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态。若当前在线的路由器失败,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务。

实验环境:

主机名 IP地址 VIP 软件名
LB-M  192.168.1.11 192.168.1.100  ipvsadm  keepalived
LB-S  192.168.1.22 192.168.1.100  ipvsadm  keepalived
WEB1  192.168.1.33 192.168.1.100  httpd
WEB2  192.168.1.44 192.168.1.100  httpd

nfs共享存储本实验不再重复做,需要的看LVS基于DR模式搭建负载均衡群集

搭建

 WEB1、WEB2  (操作相同)

 [root@WEB1~]#systemctl stop firewalld
[root@WEB1~]#setenforce
[root@WEB1~]#yum -y install httpd
[root@WEB1~]#sed -i '/#S/ s/#//' /etc/httpd/conf/httpd.conf
[root@WEB1~]#systemctl start httpd && systemctl enable httpd
[root@WEB1~]#echo "WEB1" > /var/www/html/index.html
[root@WEB2~]#echo "WEB2" > /var/www/html/index.html [root@WEB1~]#cat > /opt/lvs-dr <<EOF
#!/bin/bash
# lvs-dr
VIP="192.168.1.100"
/sbin/ifconfig lo: $VIP broadcast $VIP netmask 255.255.255.255
/sbin/route add -host $VIP dev lo:
echo > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo > /proc/sys/net/ipv4/conf/lo/arp_announce
echo >/proc/sys/net/ipv4/conf/all/arp_ignore
echo >/proc/sys/net/ipv4/conf/all/arp_announce"
EOF [root@WEB1~]#chmod +x /opt/lvs-dr
[root@WEB1~]#/opt/lvs-dr
[root@WEB1~]#ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet 192.168.1.100/32 brd 192.168.1.100 scope global lo:0
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :::::bf brd ff:ff:ff:ff:ff:ff
inet 192.168.1.33/ brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::e07f::ee11:41de/ scope link
valid_lft forever preferred_lft forever

负载均衡主(LB-M)(标红地方需要注意)

 [root@LB-M~]#systemctl stop firewalld
[root@LB-M~]#setenforce
[root@LB-M~]#modprobe ip_vs
[root@LB-M~]#cat /proc/net/ip_vs #查看Linux内核lvs版本
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@LB-M~]#yum -y install ipvsadm keepalived
[root@LB-M~]#cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.old
[root@LB-M~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { #全局配置
notification_email {
smbands@.com #邮件告警配置,写你的邮箱地址,一行一个
}
notification_email_from root@LVS-master
smtp_server 127.0.0.1 #邮件服务器地址,这个写个本地回环就行,其他不用动
smtp_connect_timeout
router_id LVS_DEVEL_1 #路由ID,必须唯一
22 ! vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播,全局配置下vrrp开头用叹号注释掉,不然每次启动iptables防火墙会自动添加drop

} vrrp_instance VI_1 {
state MASTER #主就写MASTER 从的话就写BACKUP或SLAVE
interface ens33 #注意看好自己的网卡名称
virtual_router_id
priority 180 #优先级,这个选项是区分主备的,数值高的优先为主,为外部提供服务
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.1.100 #设置好虚拟IP
}
} virtual_server 192.168.1.100 80 { #这个段是虚拟服务段,里面包括realserver,就是WEB服务器,
delay_loop
lb_algo rr
lb_kind DR #DR为直接路由模式
nat_mask 255.255.255.0
persistence_timeout 300 #会话保持时间配置,默认为300,但是测试时不易看出轮询结果是否成功,测试轮询时设置为0
protocol TCP real_server 192.168.1.33 80 { #WEB服务器的IP+端口,隔一个空格键
weight 1 #设置权重,一般性能高的服务器权重相对其他性能一般的服务器权重高,性能高,处理能力强,权重可以分配高一点
TCP_CHECK {
connect_timeout
connect_port
nb_get_retry
delay_before_retry
}
} real_server 192.168.1.44 80 { #同上
weight
TCP_CHECK {
connect_timeout
connect_port
nb_get_retry
delay_before_retry
}
} } [root@LB-M~]#systemctl start keepalived
[root@LB-M~]#ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :::::c6 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/ brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.1.100/32 scope global ens33 #keepalived启动后,就会出现一个虚拟IP,但是从服务器不会有,除非主服务器挂掉,从服务器升为主服务器。
valid_lft forever preferred_lft forever
inet6 fe80::59d8:c166::687a/ scope link
valid_lft forever preferred_lft forever
88[root@LB-M~]#ipvsadm -ln
89 IP Virtual Server version 1.2.1 (size=4096)
90 Prot LocalAddress:Port Scheduler Flags
91  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
92 TCP  192.168.1.100:80 rr
93  -> 192.168.1.33:80              Route   1      0          0         
94  -> 192.168.1.44:80              Route   1      0          0         

负载均衡从(LB-S)(标红地方需要注意)

 [root@LB-S~]#systemctl stop firewalld
[root@LB-S~]#setenforce
[root@LB-S~]#modprobe ip_vs
[root@LB-S~]#cat /proc/net/ip_vs
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@LB-S~]#yum -y install ipvsadm keepalived
[root@LB-S~]#scp 192.168.1.11:/etc/keepalived/keepalived.conf /etc/keepalived/
[root@LB-S~]#vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { #全局配置
notification_email {
smbands@163.com #邮件告警配置,写你的邮箱地址,一行一个
}
notification_email_from root@LVS-master
smtp_server 127.0.0.1
smtp_connect_timeout
router_id LVS_DEVEL_2 #路由ID必须唯一
! vrrp_strict #全局配置下vrrp开头加叹号注释
} vrrp_instance VI_1 {
state SLAVE #从服务器写SLAVE或BACKUP
interface ens33 #看好网卡名称
virtual_router_id
priority 100 #从服务器上的优先级不能高于主
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.1.100 #配好虚拟IP
}
} virtual_server 192.168.1.100 80 { #虚拟服务器段
delay_loop
lb_algo rr
lb_kind DR #直接路由模式
nat_mask 255.255.255.0
persistence_timeout 300 #会话保持时间配置,默认为300,但是测试时不易看出轮询结果是否成功,测试轮询时设置为0
protocol TCP real_server 192.168.1.33 80 { #web1的IP
weight 1 #权重
TCP_CHECK {
connect_timeout
connect_port
nb_get_retry
delay_before_retry
}
} real_server 192.168.1.44 80 { #web2的IP
weight 1 #权重
TCP_CHECK {
connect_timeout
connect_port
nb_get_retry
delay_before_retry
}
} } [root@LB-S~]#systemctl start keepalived && systemctl enable keepalived
[root@LB-S~]#ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether ::::3a:1e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.22/ brd 192.168.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::e344:79a9:d402:a812/ scope link
valid_lft forever preferred_lft forever [root@LB-S~]#ipvsadm -ln
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.100:80 rr
-> 192.168.1.33:80 Route
-> 192.168.1.44:80 Route

测试

多刷新几次

若没有轮询效果 (以下资源来源于https://blog.csdn.net/Juwenzhe_HEBUT/article/details/85254953)(感谢博主分享,侵删)

为什么LVS设置了轮询,浏览器测试还是不能轮询?这关系到两个地方的配置:
   一 ./etc/keepalived/keepalived.conf的persistence_timeout会话保持时间配置,测试轮询时设置为0;
   二 .查看ipvsadm默认超时时间(一直在浏览器刷不出LVS轮询)
      [root@LB-M~]# ipvsadm -L --timeout
      Timeout (tcp tcpfin udp): 900 120 300
      900 120 300这三个数值分别是TCP TCPFINUDP的时间.也就是说一条tcp的连接经过lvs后,lvs会把这台记录保存15分钟,就是因为这个时间过长,所以很多人都会发现做好LVS DR之后轮询现象并没有发生,实践中将此数值调整很小小,使用以下命令调整:
      [root@LB-M ~]# ipvsadm --set 1 2 1
    再次测试轮询效果,就可以了!而实际配置中还是按照默认配置,那么在大量IP访问VIP时,就有轮询效果?有待验证
  1.NG节点配置nginx.conf error-log日志级别为info,再reload一下,可以发现两台LVS的keepalived都在定是检测HG健康(注:记得将error-log级别改回来,不然日志很多,遗留问题:21:19:17 [info] 109687#0: *15087 recv() failed (104: Connection reset by peer) while waiting for request, client: 192.168.31.141, server: 0.0.0.0:18081 原因:这是正常的请求INFO日志,keepalive的tcp_cheack心跳检测,在nginx的配置中error.log输出级别为被设置为info,keepalived与MG只做了两次握手,所以NG一直包这个'错误')
  2.遇到的问题Received advert with lower priority 80, ours 100, forcing new election 原因:备机上防火墙开着(要关掉)

高可用

模拟主负载均衡器宕机

LVS+Keepalived-DR模式负载均衡高可用集群的更多相关文章

  1. linux系统下对网站实施负载均衡+高可用集群需要考虑的几点

    随着linux系统的成熟和广泛普及,linux运维技术越来越受到企业的关注和追捧.在一些中小企业,尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案. 那么如何实 ...

  2. Linux下"负载均衡+高可用"集群的考虑点 以及 高可用方案说明(Keepalive/Heartbeat)

    当下Linux运维技术越来越受到企业的关注和追捧, 在某些企业, 尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案.那么如何实施Llinux集群架构,才能既有效 ...

  3. Lvs+keepAlived实现负载均衡高可用集群(DR实现)

    第1章 LVS 简介 1.1 LVS介绍 LVS是Linux Virtual Server的简写,意为Linux虚拟服务器,是虚拟的服务器集群系统,可在UNIX/LINUX平台下实现负载均衡集群功能. ...

  4. lvs+keepalived+bind实现负载均衡高可用智能dns【转】

    转:https://www.cnblogs.com/mikeluwen/p/7068356.html 整体架构: 1.IP地址规划: Dns1:172.28.0.54 Dns2:172.28.0.55 ...

  5. lvs+keepalived+bind实现负载均衡高可用智能dns

    整体架构: 1.IP地址规划: Dns1:172.28.0.54 Dns2:172.28.0.55 Dr服务器主:172.28.0.57 Dr服务器从:172.28.0.67 Vip:172.28.0 ...

  6. 手把手教程: CentOS 6.5 LVS + KeepAlived 搭建 负载均衡 高可用 集群

    为了实现服务的高可用和可扩展,在网上找了几天的资料,现在终于配置完毕,现将心得公布处理,希望对和我一样刚入门的菜鸟能有一些帮助. 一.理论知识(原理) 我们不仅要知其然,而且要知其所以然,所以先给大家 ...

  7. lvs+heartbeat搭建负载均衡高可用集群

    [172.25.48.1]vm1.example.com [172.25.48.4]vm4.example.com 集群依赖软件:

  8. Keepalived+Nginx实现负载均衡高可用

    一.负载均衡高可用 Nginx作为负载均衡器,所有请求都到了Nginx,可见Nginx处于非常重点的位置,如果Nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了避免负载均衡服务器的宕机 ...

  9. LVS的DR模式负载均衡

    参考项目:http://www.cnblogs.com/along21/p/7833261.html#auto_id_3 LVS的DR模式实现负载均衡 1.环境 lvs-server :192.168 ...

随机推荐

  1. 根据时间显示不同的问候语的JavaScript代码

    对于最近有许多的初学开发者问我关于根据时间显示不同的问候语的JavaScript代码问题,所以今天将自己整理的一些代码在这里分享出来,供初学者参考,如果在运行过程中有问题,可以给我在下方留言. < ...

  2. .NET面试题2

    常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum.int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆 ...

  3. Javascript 学习 Boolean

    构造函数 new Boolean(value) //构造函数 Boolean(value) //转换函数 参数 value 由布尔对象存放的值或者要转换成布尔值的值 返回值 当作为一个构造函数(带有运 ...

  4. Oracle入门基础(1)

    1.数据库系统和数据管理系统的区别? 数据库系统=数据库的管理系统+oper操作员+硬件 2.Oracle的版本   8i /9i   10g/11g   12c(cloud) 3.Oracle主要组 ...

  5. 【转载】了解CSS/CSS3原生变量var

    文章转载自:鑫空间鑫生活(https://www.zhangxinxu.com/) 原文链接:http://www.zhangxinxu.com/wordpress/?p=5804 内容摘要: 在任何 ...

  6. Hive总结

    一.什么是Hive 1.Hive 由 Facebook 实现并开源 2.是基于 Hadoop 的一个数据仓库 3.可以将结构化的数据映射为一张数据库表 4.并提供 HQL(Hive SQL)查询功能 ...

  7. 位运算(2)——Number of 1 Bits

    Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also know ...

  8. springmvc源码分析上之HandlerMapping

    现在企业开发中,必不可少的管理框架就是spring,而与之搭配的也是企业开发中用的最多的MVC框架:Springmvc 关于springmvc原理,请自行百度 HandlerMapping是sprin ...

  9. 零基础逆向工程38_Win32_12_信号量_线程控制小结

    1 信号量 信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用.[百度百科] 1.1 创建信号量 HANDLE Create ...

  10. jquery-ui sortable 排序

      https://blog.csdn.net/u013066244/article/details/51954198 <link ref="stylesheet" href ...