使用keepalived全面实现高可用

启迪云计算
关注

为什么要用Keepalived来实现负载均衡器高可用,这里只拿HaProxy负载均衡器来进行说明:

对于所有懂运维的小伙伴来说,都应该知道,无论后端的服务器都强大,这里的后端服务器说的是真正提供服务的主机,负载均衡器后面有缓存服务器,缓存服务器后面才是真正提供服务的服务器。而这个服务器小编称它为"后端服务器",而在这后端服务器后面是我们的数据缓存服务器,之后是数据库,也是整个企业的命脉。这整个架构是非常庞大的,其中的每一个角色都很重要而且必不可少,所以,这里的每一个角色都不可能只是一台服务器,它们会是多台服务器组成的集群,通过集群技术可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益。

当集群组成之后,它们不可能一台一台的开放给用户,若真要这么做,那么每一台后端服务器都要配一个公网地址,并且拿web网站来说,用户访问网站要么是输入网站的域名跳转进来,要么就是通过点击其他页面中的内容跳转进来,而为每一台主机配置一个公网地址,要在DNS解析上把这些公网地址都配置成一个域名,这操作是非常非常可怕的,公网地址是有限的并且是收费的;我们且不谈DNS解析及公网地址费用,就拿某猫、某云来说,他们的后端服务器可不仅仅只有上万台,甚至多达千万台,这让每台提供服务的机器都有一个公网IP是不现实的。

因此,在这种情况下,我们可以想象,若是能有一台服务器只负责转发用户的访问请求,而转发的时候通过一定的算法来判断用哪个后端server来提供服务,而后端的所有机器全部用私有IP,并且真正提供服务的后端机器只需要处理请求就可以,无需与用户直接交互,也减少了服务器的压力,一方面也能提升性能。那么这台服务器就是

我们的负载均衡器

而这个负载均衡器只需要负责接收请求并转发即可,所以,通常一个负载均衡器所能处理的并发请求已经足以满足绝大部分企业的要求。但是,若这个负载均衡器宕机了呢?即便负载均衡器后面的服务器再强大,缓存命中率再高,web服务器(就是小编说的后端服务器)处理能力再强、性能再好,数据缓存命中再高,数据库的读写、并发等...哪怕后面的服务器能上天都将无法继续提供服务。所以,基于这种问题,我们势必要对负载均衡器来做高可用。

简单来讲,指由两台服务器运行某种同样的应用,为用户提供服务,当某一台出现问题时,用户的请求将由另一台服务器继续提供,从而实现高可用性。

HA的三种工作方式

(1)主从模式(主机和备机)

(2)双机双工

(3)集群模式

keepalived

(1)keepalived 基于vrrp协议来实现HA 的。

vrrp 协议,可以实现服务的切换。

(2)keepalived 启动后会有三个进程:

父进程: 内存管理,子进程管理等等

子进程:VRRP 子进程

子进程:healthchecker 子进程

注:healthchecker 子进程负责检查各主机间的主机状态,当发现某台主机上的

服务不可用时,将通知vrrp 子进程,由vrrp 子进程来完成服务的切换。

keepalived+lvs

网络拓扑

五台虚拟机在同一网络段

安装软件

client:yum install elinks -y

lvs1 和lvs2:yum install keepalived ipvsadm -y

web1 和web2:yum install httpd -y

在lvs1 上编辑配置文件

(1)vim /etc/keepalived/keepalived.conf

global_defs {

notification_email {                #发邮件给谁

eroot@localhost

notification_email_from root@localhost        #谁发邮件

smtp_server 127.0.0.1           #简单邮件传输协议服务器IP

smtp_connect_timeout 30

router_id node1                   #服务器路由标识

vrrp_instance VI_1 {           #实例(instance)

state MASTER                   #状态:主机

interface eno33554976    #虚拟IP 使用的网卡

virtual_router_id 51            #虚拟路由ID 标识

priority 100                        #优先级

advert_int 1                   #组播信息发送间隔

authentication {                #验证信息

auth_type PASS

auth_pass 1111

virtual_ipaddress {              #虚拟IP(VIP)

192.168.0.254

(1)vim dr.sh(LVS 采用DR 模式)

#!/bin/bash

ipvsadm -C

ipvsadm -A -t 192.168.0.254:80 -s rr

ipvsadm -a -t 192.168.0.254:80 -r 192.168.0.2:80 -g

ipvsadm -a -t 192.168.0.254:80 -r 192.168.0.4:80 -g

在lvs2 上编辑配置文件

(1)vim /etc/keepalived/keepalived.conf

global_defs {

notification_email {

root@localhost

notification_email_from root@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id node2

vrrp_instance VI_1 {

state BACKUP

interface eno33554976

virtual_router_id 51

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

virtual_ipaddress {

192.168.0.254

(2)vim dr.sh(LVS 采用DR 模式)

#!/bin/bash

ipvsadm -C

ipvsadm -A -t 192.168.0.254:80 -s rr

ipvsadm -a -t 192.168.0.254:80 -r 192.168.0.2:80 -g

ipvsadm -a -t 192.168.0.254:80 -r 192.168.0.4:80 -g

在web1、web2 上

(1)配置httpd

(2)编辑web.sh 脚本:

vim web.sh

#!/bin/bash

ifconfig lo:0 192.168.0.254 netmask 255.255.255.255 up

route add -host 192.168.0.254 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

在lvs1 和lvs2 上运行:systemctl restart keepalived

bash dr.sh

在web1 和web2 上:systemctl restart httpd

bash web.sh

客户端测试:elinks http://192.168.0.254

可以看到web1 和web2 上的网页交替出现。

互动区

* 你对以上内容有什么看法?你最关注云计算哪个趋势?如果你还有想了解的技术话题,欢迎留言分享。

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存