一、 简介 

1. 负载均衡的类型 

  • 负载均衡可以采用硬件设备(例如常常听见的 F5),也可以采用软件负载
  • 商用硬件负载设备成本通常较高(一台几十万甚至上百万),所以一般 情况下会采用软件负载
  • 软件负载解决的两个核心问题是:选谁、转发,其中最著名的是 lvs

2. lvs 负载均衡机制 

lvs 是四层负载均衡,也就是说建立在 OSI 模型的第四层——传输层之 上
传输层上有 TCP/UDP,lvs 支持 TCP/UDP 的负载均衡
因为 LVS 是四层负载均衡,因此它相对于其它高层负载均衡的解决办法, 比如 DNS 域名轮流解析、应用层负载的调度、客户端的调度等,它的效 率是非常高的
lvs 的转发可以通过修改 IP 地址实现(NAT 模式)
lvs 的转发还可以通过修改直接路由实现(DR 模式) 
3、 lvs+keepAlived 的应用场景? 

  • 大型网站负载均衡

Keepavlied双机热备

                                  HA(高可用)

Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点

==================================================================================================

一.lvs搭建

1、环境

名称                                         IP 
LVS-DR-Master                192.168.200.111 
LVS-DR-BACKUP            192.168.200.112
LVS-DR-VIP                      192.168.200.254 
WEB1                                192.168.200.113
WEB2                                192.168.200.114

二.  LVS-DR-Master/LVS-DR-BACKUP 安装 LVS和 Keepalvied软件包

[root@localhost ~]# yum install ipvsadm kernel-devel openssl-devel keepalived -y
注:一定要与当前的运行的内核一致,因为 /usr/src/kernels目录下可有多个内核。否则在编译 keepalived 时会出错,
从而不能继续进行安装外,还会使keepalived 启动后功能失效
三.  配置 LVS实现负载均衡 
1. LVS-DR-Master 配置
设置网卡IP地址

[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=none


2、配置Keepalived

[root@master ~]# cd /etc/keepalived/
[root@masterkeepalived]# cp keepalived.conf keepalived.conf.bak

keepalived配置文件详情

! Configuration File for keepalived
global_defs {
notification_email {
crushlinux@163.com #设置报警邮件地址,可以设置多个,每行一个。注意,如果要开启邮件报警,需要开启本机的sendmail服务
}
notification_email_from root@example.com #设置邮件的发送地址
smtp_server 127.0.0.1 #设置smtp服务器地址
smtp_connect_timeout 30 #设置连接 smtp 服务器超时时间
router_id LVS_MASTER #运行 Keepalived服务器的一个标识。发邮件时显示在邮件标题中的信息
}
vrrp_instance VI_1 { #vrrp实例定义部分
state MASTER #指定 Keepalived 的角色,MASTER表示此主机是主用服务器,BACKUP表示是备用服务器。备份服务器上将 MASTER 改为 BACKUP。
interface eth0 #指定 HA监测网络的接口
virtual_router_id 51 虚拟路由标识,这个标识是一个数字,并且同一个 vrrp 实例使用唯一的标识,即同一个 vrrp_instance下,MASTER 和 BACKUP必须是一致的。(0-255)
priority 100 #定义优先级,数字越大,优先级越高,在一个 vrrp_instance下,MASTER的优先级必须大于 BACKUP 的优先级。备份服务上将 100 改为 50
advert_int 1 #设定MASTER 与 BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设定验证类型和密码
auth_type PASS #设置验证类型,主要有 PASS和 AH 两种
auth_pass 1111 #设置验证密码,在一个 vrrp_instance下,MASTER 与 BACKUP必须使用相同的密码才能正常通信。
}
virtual_ipaddress { #设置虚拟 IP地址,可以设置多个虚拟IP地址,每行一个
192.168.200.254
}
}
#虚拟服务器定义部分
virtual_server 192.168.200.254 80 { #设置虚拟服务器,需要指定虚拟 ip 地址和服务端口,ip 与
端口之间用空格隔开。
delay_loop 6 #设置健康检查时间,单位是秒
lb_algo rr #设置负载调度算法,这里设置为 rr,即轮询算法,rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #设置 LVS实现负载均衡的机制,可以有 NAT、TUN 和 DR三个模式可选。
protocol TCP #指定转发协议类型,有 tcp和 udp 两种
real_server 192.168.200.113 80 { #配置服务节点 1,需要指定 real server 的真实IP地址和端口,ip 与端口之间用空格隔开。
weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的
权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源
TCP_CHECK { #realserve 的状态检测设置部分,单位是秒
connect_timeout 10 #10秒无响应超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80 #测试连接的端口
}
}
real_server 192.168.200.114 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
Master配置

[root@master keepalived]# cat keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
crushlinux@163.com
}
notification_email_from root@example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.254
}
}
virtual_server 192.168.200.254 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
real_server 192.168.200.113 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.200.114 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

[root@localhost keepalived]# systemctl restart keepalived
[root@localhost keepalived]# chkconfig keepalived on

SALVE备配置

1. LVS-DR-salve 配置

设置网卡IP地址

[root@salve  ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO=none

2、配置Keepalived

[root@salve  ~]# cd /etc/keepalived/
[root@salve keepalived]# cp keepalived.conf keepalived.conf.bak
[root@salve  keepalived]# vim keepalived.conf
[root@salve  keepalived]# cat keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
crushlinux@163.com
}
notification_email_from root@example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.254
}
}
virtual_server 192.168.200.254 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
real_server 192.168.200.113 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.200.114 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

[root@localhost keepalived]# systemctl restart keepalived
[root@localhost keepalived]# chkconfig keepalived on

四.  配置WEB1和WEB2操作一致

[root@web1 ~]# cat realserver.sh

#!/bin/bash
SNS_VIP=192.168.200.254
. /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

[root@web1 ~]# chmod +x realserver.sh

[root@web1 ~]# ./realserver.sh start
RealServer Start OK
[root@web1 ~]# yum install httpd -y

[root@web1 ~]# systemctl restart httpd
[root@web1 ~]# systemctl stop firewalld
[root@web1 ~]# iptables -F
[root@web1 ~]# setenforce 0

五、配置两台WEB中的index.html测试页面用于区分

[root@web1 ~]# cd /var/www/html/
[root@web1 html]# echo '192.168.200.113' > index.html

[root@web2 ~]# cd /var/www/html/
[root@web2 html]# echo '192.168.200.114' > index.html

六、测试LVS

[root@master ~]# ip a | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.200.111/24 brd 192.168.200.255 scope global noprefixroute ens33
inet 192.168.200.254/32 scope global ens33

[root@salve ~]# ip a | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.200.112/24 brd 192.168.200.255 scope global noprefixroute ens33

多刷新几次页面

[root@master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.200.254:80 wrr
-> 192.168.200.113:80             Route     1   1     2
-> 192.168.200.114:80             Route     1   1     2

LVS+Keepalived -----> 效率最高的负载均衡器的更多相关文章

  1. lvs(+keepalived)、haproxy(+heartbeat)、nginx 负载均衡的比较分析

    目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实现的负载均衡的作用,keepalived和heartbeat都是提高高可用性的,避免单点故障.那么他们为什么这么搭配,而又有什么 ...

  2. Mysql双主热备+LVS+Keepalived高可用操作记录

    MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...

  3. Linux实战教学笔记33:lvs+keepalived集群架构服务

    一,LVS功能详解 1.1 LVS(Linux Virtual Server)介绍 LVS是Linux Virtual Server 的简写(也叫做IPVS),意即Linux虚拟服务器,是一个虚拟的服 ...

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

    LVS简介 LVS介绍 LVS是Linux Virtual Server的缩写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,属于4层负载均衡 ipvs和ipvsadm的关系 我们使用配置LV ...

  5. Linux学习系列之lvs+keepalived

    LVS简介 LVS介绍 LVS是Linux Virtual Server的缩写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,属于4层负载均衡 ipvs和ipvsadm的关系 我们使用配置LV ...

  6. 【Nginx】(主从热备)LVS+Keepalived+Nginx实现高性能负载均衡集群

    一.LVS 1.1 概述 1.2 Nginx与LVS区别什么 二.Keepalived 2.1 概述 2.2 keepalived和其工作原理 三.LVS+Keepalived+Nginx 搭建双机主 ...

  7. lvs+keepalived集群架构服务

    一,LVS功能详解 1.1 LVS(Linux Virtual Server)介绍 LVS是Linux Virtual Server 的简写(也叫做IPVS),意即Linux虚拟服务器,是一个虚拟的服 ...

  8. lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(一) 简介

    一. 为什么这样构架 1. 系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,keepalived提供健康检查,故障转移,提高系统的可用性!采用 ...

  9. 【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

    一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务 ...

随机推荐

  1. Laravel中如何做数据库迁移

    总的来说,做一次独立数据库迁移只需要三步,分别是创建迁移文件.修改迁移文件.运行迁移 1.创建数据库迁移文件php artisan make:migration create_articles_tab ...

  2. jmeter 登陆--查询存在否-->新建客户-->查询存在否 + 压测

    1.登陆 正则表达式提取器和json提取器,都是后置处理器提取token(都可以在响应中以regexp tester 和 json path tester查看提取的对不对) beanshell 后置处 ...

  3. php基础系列之 数据的存储和读取

    ·文件处理 ·写入一个文件 1,打开这个文件.如果这个文件不存在,需要先创建它 2,将数据写入这个文件 3,关闭这个文件 ·从一个文件读出数据 1,打开这个文件.如果这个文件不能打开(例如,文件不存在 ...

  4. spring(六):事务

    事务特性ACID 原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做: 一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行 ...

  5. AcWing 4. 多重背包问题

    朴素 数据范围小 //数据范围小 #include<iostream> #include<algorithm> using namespace std ; ; int n,m; ...

  6. python 批量编译 批量删除

    把项目的py文件变异成pyc文件,好处是可以保护源码不泄露. 假如一个工程文件夹有1000个py文件,这个时候怎样快速处理 ? 两步走: ①  py--->pyc python -m compi ...

  7. python接口自动化测试 - requests库的post请求进行文件下载

    前言 之前讲了文件上传,当然就有文件下载啦 文件下载操作步骤 极其简单,将二进制格式的响应内容存进本地文件中,根据需要下载的文件的格式来写文件名即可 down_url = 'https://www.i ...

  8. 【 Hibernate 】Hibernate的session更新和删除失败问题

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  9. URLEncode和URLDecode

    URLEncode.encode(String s,String utf-8) 编码 URLDEcode.decode(String %2b%,String utf-8) 解码 用法: String ...

  10. centos 6.10 安装mysql 5.7.27 出现缺少libnuma.so.1的问题

    centos 6.10安装mysql 5.7.27出现以下报错: [root@localhost /]# /usr/local/mysql/app/mysql/bin/mysqld --default ...