【图文教程】Keepalived + LVS集群架构

1. 集群介绍

集群,简单地说是指一组(若干个)相互独立的计算机,利用高速通信网络组成一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。

集群的特点:高性能(Performance)、价格有效(Cost-effectiveness)、可伸缩性(Scalability)、高可用性(Availability)、透明性(Traansparency)、可管理性(Manageability)、可编程性(Programmability)

什么是集群

多台机器一起提供服务,这些机器的集合就是集群。
集群分类

高可用   
	
	不存在单点,即,如果一个机器宕机不影响服务。
	常见开源软件:keepalived  heartbeat 

负载均衡   

	把负载均衡地分担到多台机器上。论坛服务器1台不够了,我们再加1台,用户请求会分摊到这两台机器上。
	常见开源软件:LVS  Nginx  haproxy

分布式集群

	它实际上是集合了高可用和负载均衡为一体的一种集群。它的特点是,可以无限制的横向扩容。

2. keepalived集群介绍

使用 keepalived 来实现高可用集群,因为 heartbeat 在 centos6 上有一些问题,影响实验效果,而且 heartbeat 软件在2010年停止更新;因此着重讲解 keepalived

keepalived 通过 VRRP(Virtual Router Redundancy Protocl)来实现高可用。

在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里会有 1 个 master 角色和NN>=1)个backup 角色。

master 会通过组播的形式向各个 backup 发送 VRRP 协议的数据包,当 backup 收不到 master 发来的 VRRP 数据包时,就会认为 maste r宕机了。此时就需要根据各个 backup 的优先级来决定谁成为新的 mater 

Keepalived 要有三个模块,分别是 core、check 和 vrrp。其中 core 模块为 keepalived 的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check 模块负责健康检查,vrrp 模块是来实现 VRRP 协议的。

3. 用keepalived配置高可用集群

实验准备

准备两台机器 test01 作为 master,test02 作为 backup
两台机器都执行 yum install -y keepalived
两台机器都需要安装 nginx

1. 在 MASTER 上配置:

  • 给 master、slave 两台机器都安装 Keepalived,安装命令如下
yum install -y keepalived
  • 把 keepalived 原配置文件清空,并添加新配置
[root@test01 ~]# ls /etc/keepalived/keepalived.conf     #查看keepalived配置文件路径
/etc/keepalived/keepalived.conf

[root@test01 ~]# > /etc/keepalived/keepalived.conf      #清空原有内容

[root@test01 ~]# vim /etc/keepalived/keepalived.conf    #编辑新内容

global_defs {
   
   notification_email {
   
     sunchen88vip@163.com                  #定义接收邮件人
   }
   notification_email_from                 #定义发邮件地址(实际没有)
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
   
    script "/usr/local/sbin/check_ng.sh"   #此脚本为检查nginx服务的是否正常
    interval 3
}
vrrp_instance VI_1 {
                          #定义相关 master 的信息
    state MASTER                           #角色叫 master  从机上叫 backup
    interface ens33                        #网卡的名称
    virtual_router_id 51                   #定义路由器的 id
    priority 100                           #权重,主角色和从角色的权重是不一样的
    advert_int 1
    authentication {
   
        auth_type PASS                     #认证相关信息
        auth_pass 123                      #定义密码
    }
    virtual_ipaddress {
   
        192.168.85.100                     #定义 一个公有的 vip 
    }
    track_script {
   
        chk_nginx                          #定义监控脚本,这里和上面 vrr_script 后面的字符串保持一致
    }
}
  • 定义监控 nginx 的脚本

这是检查 Nginx 是否正常的一个 shell 脚本

[root@test01 ~]# vim /usr/local/sbin/check_ng.sh      

#!/bin/bash  
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`  
#计算 nginx 进程数量 
n=`ps -C nginx --no-heading|wc -l`
#如果进程为 0,则启动 nginx,并且再次检测 nginx 进程数量,
#如果还为 0,说明 nginx 无法启动,此时需要关闭 keepalived     
if [ $n -eq "0" ]; then
       /etc/init.d/nginx start
       n2=`ps -C nginx --no-heading|wc -l`
       if [ $n2 -eq "0"  ]; then
               echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
               systemctl stop keepalived
       fi
fi
  • 给 nginx 脚本赋予 755 权限
[root@test01 ~]# ls -l /usr/local/sbin/check_ng.sh
-rw-r--r--. 1 root root 575 Jun  4 10:24 /usr/local/sbin/check_ng.sh
[root@test01 ~]# chmod 755 /usr/local/sbin/check_ng.sh  #赋予权限,否则无法被 keepalived 调用
[root@test01 ~]# ls -l /usr/local/sbin/check_ng.sh
-rwxr-xr-x. 1 root root 575 Jun  4 10:24 /usr/local/sbin/check_ng.sh
  • 开启 keepalived 服务,查看日志,查看网卡,停止防火墙,关闭 SElinux
1. systemctl start keepalived     #启动keepalived

2. ps aux |grep keep              #查看keepalived的进程

3. /etc/init.d/nginx stop         #暂停nginx

4. ps aux |grep nginx             #nginx的进程还是会启动

5. less /var/log/messages         #查看日志内容

6. ip add                         #查看网卡有没有vip 

7. systemctl stop firewalld       #关闭防火墙

8. getenforce 0                   #关闭SELinux

9. iptables -nvL                  #查看表

在这里插入图片描述

在这里插入图片描述

  • 修改 nginx 启动页面
[root@test01 ~]# cd /usr/local/nginx/html/
[root@test01 html]# mv index.html index.html.1
[root@test01 html]# vim index.html

MASTER!

2. 在 BACKUP 上配置:

  • 把 keepalived 原配置文件清空,并添加新配置
[root@test02 ~]# > /etc/keepalived/keepalived.conf
[root@test02 ~]# vim /etc/keepalived/keepalived.conf 

global_defs {
   
   notification_email {
   
     sunchen88vip@163.com                  
   }
   notification_email_from                 
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
   
    script "/usr/local/sbin/check_ng.sh"   
    interval 3
}
vrrp_instance VI_1 {
                         
    state BACKUP                            #从机是 backup
    interface ens33                       
    virtual_router_id 51                   
    priority 90                             #比主的权重少一些
    advert_int 1
    authentication {
   
        auth_type PASS                    
        auth_pass 123                     
    }
    virtual_ipaddress {
   
        192.168.85.100                     
    }
    track_script {
   
        chk_nginx                        
    }
}
  • 定义监控 nginx 的脚本
[root@test02 ~]# vim /usr/local/sbin/check_ng.sh      

#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算 nginx 进程数量 
n=`ps -C nginx --no-heading|wc -l`
#如果进程为 0,则启动 nginx,并且再次检测 nginx 进程数量,
#如果还为 0,说明 nginx 无法启动,此时需要关闭 keepalived     
if [ $n -eq "0" ]; then
       systemctl start nginx
       n2=`ps -C nginx --no-heading|wc -l`
       if [ $n2 -eq "0"  ]; then
               echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
               systemctl stop keepalived
       fi
fi
  • 给 nginx 脚本赋予 755 权限
[root@test02 ~]# chmod 755 /usr/local/sbin/check_ng.sh
[root@test02 ~]# ll /usr/local/sbin/check_ng.sh 
-rwxr-xr-x. 1 root root 635 Jun  4 11:13 /usr/local/sbin/check_ng.sh
  • 开启 keepalived 服务,停止防火墙,关闭 SElinux
[root@test01 ~]# systemctl start keepalived  #启动 keepalived
[root@test01 ~]# ps aux |grep keep           #查看 keepalived 的进程
[root@test01 ~]# /etc/init.d/nginx stop      #暂停 nginx
[root@test01 ~]# ps aux |grep nginx          # nginx 的进程还是会启动
[root@test01 ~]# systemctl stop firewalld    #关闭防火墙
[root@test01 ~]# getenforce 0                #关闭 SELinux
[root@test01 ~]# iptables -nvL               #查看表
  • 修改 nginx 启动页面
[root@test02 ~]# cd /usr/local/nginx/html/
[root@test02 html]# mv index.html index.html.1
[root@test02 html]# vim index.html

BACKUP!

3. 测试阶段:

现在把个机器梳理一下:

192.168.85.130 为 master 机,test01
192.168.85.131 为 backup 机,test02

192.168.85.100VIP
  • 用 ip add 命令查看,此时 VIP 192.168.85.100 在 test01 上

在这里插入图片描述

  • 分别测试 test01 (master) 和 test02 (backup) 是否可以运行,并且测试 vip 是否可以运行

master 使用 ens33 ip 访问

在这里插入图片描述

backup 端访问页面

在这里插入图片描述

master 使用虚拟 vip 测试访问

在这里插入图片描述

  • master 停止 keepalived 服务

实验让 test01 (master) 宕机; 关闭 keepalived 服务,在 masters 查看 VIP 是否还存在

[root@test01 ~]# systemctl stop keepalived
[root@test01 ~]# ps aux |grep keep
root     17406  0.0  0.0   9088   672 pts/1    S+   14:39   0:00 grep --color=auto keep
[root@test01 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:88:e3:ff brd ff:ff:ff:ff:ff:ff
    inet 192.168.85.130/24 brd 192.168.85.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.94.150/24 brd 192.168.94.255 scope global noprefixroute ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::67cd:2d8d:3614:6d99/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:88:e3:09 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::7c5b:18cc:d832:7525/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

显示已经不存在 虚拟 ip 了
  • 在 backup 上查看,此时 VIP 完美转移到 backup 上面

在这里插入图片描述

4. 负载均衡集群介绍

在这里插入图片描述

首先我们先介绍一下什么是负载均衡: 负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。这是来自维基百科的介绍。负载均衡的目的,就在于平衡计算机的负载,给用户提供优质,可靠,稳定的服务。日常生活中到处都能看到“负载均衡”,一个超市的收营员高峰期只能服务10位顾客,当做活动时有20位顾客需要服务的话可能就会排长队,这样购物体验将会很差(就像客户抱怨系统/网站访问太慢)。最简单的办法就是再招个营业员,重新开通一个出口。负载均衡的核心就是“分摊压力”。

应用服务器并不直接与用户相连, 用户连接负载均衡服务器,然后由负载均衡服务器把消息转发给实际应用服务器。负载均衡器内部会根据应用服务器的负载情况,决定把消息转发给哪台服务器处理。同时负载均衡器还可以对用户屏蔽应用服务器失效,只要把用户的消息转发到非失效服务器即可。

提到负载均衡,就不能不介绍另外一个概念: 集群。集群就是一组部署有相同应用的服务器。例如web 服务器。用户的请求无论连接到哪台服务器上,都能得到相同的处理。这样我们实现一种服务器,可以将用户的请求根据特定规则转发到应用服务器上进行处理。就实现了完整的集群处理系统。这个服务器如果实现了后台服务器感知和配置功能,能够了解后台服务器的可用情况。就可以被称作为负载均衡器。

负载均衡在目前网络服务规模越来越庞大的情况下,成为一个大型服务器系统必须要面对的问题。随着用户和业务的增多,来自用户的访问量和数据流量不断增大,对服务器的计算能力和储存要求也在不断增加,单台服务器根本无法承担这么庞大的数据处理请求。这个时候,我们必须利用集群技术,采用一组服务器对来自用户的请求进行处理,服务器的数量要能够不断的扩充。在集群的前端,我们采用负载均衡技术,平均分散用户的请求到不同的处理服务器,并且能够在集群中某个服务失效时,即时感知,屏蔽,将消息转发到其他可用服务器上。

可以实现负载均衡集群的开源软件有:LVS、keepalived、haproxy、nginx等,其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用。

LVS在第四层,所以可以通过TCP/IP协议,与其他端口进行通信。而在第七层的nginx只能支持http,https,mail等协议,不能自由地与其他端口进行通信。这两种类型的软件都各有优点,例如LVS比较稳定能承载的并发量比较高,而nginx则是灵活,由于在第七层所以能够实现一些复杂的功能,能实现更多的个性化需求。

1. LVS集群介绍

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。使用LVS可以达到的技术目标是:通过LVS达到的负载均衡技术和Linux操作系统实现一个高性能高可用的Linux服务器群集,它具有良好的可靠性,可拓展性和可操作性。从而以低廉的成本实现最优的性能。现在LVS已经是Linux内核标准的一部分了,LVS从1998年开始,发展到现在已经是一个比较成熟的项目了。利用LVS技术可以实现高性能,高可压缩的网路服务,例如WWW服务,FTP服务,MAIL服务等。比较著名的就是www.linux.com以及www.real.com。

LVS的官方网站: http://www.linuxvirtualserver.org/

特点:
可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值