keepalived + lvs(DR)实现高可用与负载均衡

keepalived

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

keepalived工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级选举一个backup当master。这样的话就可以保证路由器的高可用了。

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

Layer3,4,5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:

Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。

Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

Layer5:Layer5对指定的URL执行HTTP GET。然后使用MD5算法对HTTP GET结果进行求和。如果这个总数与预期值不符,那么测试是错误的,服务器将从服务器池中移除。该模块对同一服务实施多URL获取检查。如果您使用承载多个应用程序服务器的服务器,则此功能很有用。此功能使您能够检查应用程序服务器是否正常工作。MD5摘要是使用genhash实用程序(包含在keepalived软件包中)生成的

环境配置

server1 172.25.1.1 ipvsadm,keepalived master
server2 172.25.1.2 httpd,arptables_jf  
server3 172.25.1.3 httpd,arptables_jf  
server4 172.25.1.4 ipvsadm,keepalived backup

keepalived源码安装

server1中keepalived的配置安装

[root@server1 ~]# yum install libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm -y
[root@server1 ~]# tar zxf keepalived-2.0.6.tar.gz 
[root@server1 ~]# cd keepalived-2.0.6
[root@server1 keepalived-2.0.6]# vim INSTALL
[root@server1 ~]# yum install -y openssl-devel libnl3-devel ipset-devel iptables-devel libnfnetlink-devel    #一些依赖性软件,在文档中可以看到
[root@server1 ~]# yum install -y libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm
[root@server1 ~]# yum install -y libnl-devel
[root@server1 ~]# ./configure --prefix=/usr/local/keepalived --with-init=SYSV     #源码安装三部曲   (1)
[root@server1 ~]# make     (2)
[root@server1 ~]# make install (3)

创建软链接

因为该软件的家目录和电脑的家目录不一致,需要设置软链接
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
chmod +x /etc/init.d/keepalived #给启动脚本添加执行权限

修改keepalived配置文件:

! Configuration File for keepalived

global_defs {
   notification_email {
        root@localhost    #接收报警的邮箱
   }
   notification_email_from keepalived@localhost  ##设置邮箱的发送地址
   smtp_server 127.0.0.1   ##设置 smtp server 地址
   smtp_connect_timeout 30  ##设置连接smtp服务器超时时间
   router_id LVS_DEVEL  ##设置连接smtp服务器超时时间
   vrrp_skip_check_adv_addr
  # vrrp_strict         ##必须注释
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER  ##备机改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那
    interface eth0  #HA监测网络接口
    virtual_router_id 7  #主、备机的 virtual_router_id 必须相同,取值 0-255
    priority 100   ## 权重
    advert_int 1  #主备之间的通告间隔秒数
    authentication {  #主备切换时的验证
        auth_type PASS  #设置验证类型,主要有 PASS 和 AH 两种
        auth_pass 1111  #设置验证密码,在一个 vrrp_instance 下,MASTER 与 BACKUP 必须使用相同的密码才能正常通信
    }
    virtual_ipaddress {  #设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个
        172.25.1.100
    }
}
virtual_server 172.25.1.100 80 {   #定义虚拟服务器
    delay_loop 3   #每隔 3 秒查询 realserver 状态
    lb_algo rr   #lvs 调度算法,这里使用轮叫
    lb_kind DR   #LVS 是用 DR 模式
    #persistence_timeout 50
    protocol TCP  #指定转发协议类型,有 tcp 和 udp 两种     

    real_server 172.25.7.2 80 {  #配置服务节点
        weight 1  #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源
        TCP_CHECK {   #realserve 的状态检测设置部分,单位是秒
            connect_timeout 3   #3 秒无响应超时
            retry 3   #重试次数
            delay_before_retry 3   #重试间隔
        }
    }

    real_server 172.25.1.3 80 {  #RS
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}
[root@server1 keepalived]# /etc/init.d/keepalived start 

 server4中keepalived的配置与安装

[root@server1 ~]# scp -r /usr/local/keepalived/ server4:/usr/local/
#将server1中的keepalived安装文件传到server4中

   在server4中添加软链接

[root@server4 ~]# ln -s /usr/local/keepalived/etc/keepalived/ /etc/
[root@server4 ~]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@server4 ~]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@server4 ~]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/

 修改配置文件

[root@server1 ~]# scp -r /etc/keepalived/keepalived.conf server4:/etc/keepalived/
#在server4中将上传的配置文件修改这两处
state BACKUP   #backup为备用机
priority 50   #优先级为50
[root@server4 keepalived]# /etc/init.d/keepalived start

安装ipvsadm

ipvsadm 的安装需要配置高可用yum源
yum install -y ipvsadm   #安装ipvsadm
ipvsadm -ln    #查看集群状态
#配置好keepalived以后不需要再给ipvsadm中添加规则,keepalived会自动给其添加规则

 关于RS的配置

server*  #在各个RS中添加ip
ip addr add 172.25.1.100/24 dev eth0

yum install -y arptables_jf
arptables -A IN -d 172.25.1.100 -j DROP   #对通过100进入的数据进行丢弃
arptables -A OUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.*  #将出去的数据通过172.25.1.*出去
/etc/init.d/arptables_jf save     #永久保存设置

 测试

猜你喜欢

转载自blog.csdn.net/u010489158/article/details/82698658
今日推荐