企业级运维——lvs+keepalived实现高可用(HA)

keepalived概念及原理

具体原理查看:https://blog.csdn.net/weixin_38044888/article/details/96898461

lvs+keepalived实现高可用

实验环境准备

主机服务
真实主机localhost客户端
server1主备master DS(Director Sever——LVS调度器)
server4辅备backup 当master宕机成为DS(Director Sever——LVS调度器)
server2RS(Real Server——后端真实提供服务的虚拟机)
server3RS(Real Server——后端真实提供服务的虚拟机)

注意:我们所有的虚拟机server1-4的实验环境都是rhel7.5版本。

主备server1(DS)

  • 从keepalived官网下载对应系统版本的安装包,楼主这里下载的是2.0.17版本。
    在这里插入图片描述
  • 解压安装包,安装keepalived相关依赖。
解压:tar -zxf keepalived-2.0.17.tar.gz
安装依赖:yum install -y gcc openssl-devel 
  • 编译keepalived源码包。
cd keepalived-2.0.17/			# 进入keepalived目录
./configure --prefix=/usr/local/keepalived --with-init=systemd  # 配置
make && make install		#编译
  • 创建软连接方便使用
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
  • 关闭之前启动的ldirectord服务,设置为开机不启动,否则,可能影响实验效果。
systemctl stop ldirectord.service
chkconfig ldirectord off
  • 编辑keepalived配置文件
    注意:keepalived所有的配置都在一个文件里设置,主要分为三类:
    • 全局配置:作用于整个keepalived服务
    • vrrpd配置:keepalived高可用核心部分,主备切换的功能
    • 虚拟服务配置:负载均衡的功能模块(lvs模式指定)
 vim /etc/keepalived/keepalived.conf
 修改内容:
 ! Configuration File for keepalived              

global_defs {                        #全局定义部分
   notification_email {              #设置警报邮箱
     root@localhost            #邮箱设置为本地
   }
   notification_email_from keepalived@localhost      #设置发件人地址
   smtp_server 127.0.0.1       #设置smtp server地址,为lo接口
   smtp_connect_timeout 30          #设置smtp超时连接时间    以上参数可以不配置
   router_id LVS_DEVEL               #是Keepalived服务器的路由标识在一个局域网内,这个标识(router_id)是唯一的
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 
}

vrrp_instance VI_1 {      #VRRP实例定义区块名字是VI_1
    state MASTER          #表示当前实例VI_1的角色状态这个状态只能有MASTER和BACKUP两种状态,并且需要大写这些字符ASTER为正式工作的状态,BACKUP为备用的状态
    interface eth0       
    virtual_router_id 51 #虚拟路由ID标识,这个标识最好是一个数字,在一个keepalived.conf配置中是唯一的, MASTER和BACKUP配置中相同实例的virtual_router_id必须是一致的.
    priority 100                #priority为优先级 越大越优先
    advert_int 1               #为同步通知间隔。MASTER与BACKUP之间通信检查的时间间隔,单位为秒,默认为1.
    authentication {           #authentication为权限认证配置不要改动,同一vrrp实例的MASTER与BACKUP使用相同的密码才能正常通信。
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {         #设置虚拟IP地址
        172.25.66.100        #此格式ip a显示 ifconfig不显示
   }
#至此为止以上为实现高可用配置,如只需使用高可用功能下边配置可删除
#以下为虚拟服务器定义部分
virtual_server 172.25.66.100 80 {      #设置虚拟服务器,指定虚拟IP和端口
    delay_loop 6                           #健康检查时间为6秒
    lb_algo rr                               #设置负载调度算法 rr算法
    lb_kind DR                            #设置负载均衡机制 #有NAT,TUN和DR三种模式可选
    #persistence_timeout 50           #连接保留时间,50秒无响应则重新分配节点
    protocol TCP                           #指定转发协议为TCP 
    real_server 192.168.5.150 80 {      #RS节点1
        weight 1                #权重
        TCP_CHECK {             #节点健康检查
        connect_timeout 3       #延迟超时时间
        retry 3          #重试次数
        delay_before_retry 3    #延迟重试次数
    }
    }
    real_server 192.168.50.149 80 {      #RS节点2
		TCP_CHECK {
        weight 1
            connect_timeout 3
            retry 3
            delay_before_retry 3

    }
    }
}  
  • 开启keepalived服务
systemctl start keepalived.service

辅备backup Server4(备用DS)

  • 解压安装包,安装keepalived相关依赖。
解压:tar -zxf keepalived-2.0.17.tar.gz
安装依赖:yum install -y gcc openssl-devel 
  • 编译keepalived源码包。
cd keepalived-2.0.17/			# 进入keepalived目录
./configure --prefix=/usr/local/keepalived --with-init=systemd  # 配置
make && make install		#编译
  • 创建软连接方便使用
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
  • 关闭之前启动的ldirectord服务,设置为开机不启动,否则,可能影响实验效果。
systemctl stop ldirectord.service
chkconfig ldirectord off
  • 编辑keepalived配置文件
    与主备master基本一致,主要区别是中间的高可用模块vrrpd模块:
vrrp_instance VI_1 {
    state BACKUP		# 改为backup
    interface eth0
    virtual_router_id 51
    priority 50			#  优先级低于master
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       172.25.66.100
    }
}
  • 开启服务systemctl start keepalived.service

Real Server(server2、server3)

因为我们采用的是lvs的DR模式,所以,需要在RS上添加VIP,否则RS无法将数据包直接回给客户端。

[root@server2 ~]# ip addr add 172.25.66.100/24 dev eth0
[root@server2 ~]# ip a
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:79:d7:d9 brd ff:ff:ff:ff:ff:ff
    inet 172.25.66.2/24 brd 172.25.66.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 172.25.66.100/24 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe79:d7d9/64 scope link 
       valid_lft forever preferred_lft forever

server3上也要添加VIP。

[root@server3 ~]# ip addr add 172.25.66.100/24 dev eth0172.25.66.100

同时,我们需要在RS上使用arptables设置策略,拒绝接受想要访问VIP的请求。

yum install arptables -y
arptables -A INPUT -d 172.25.66.100 -j DROP
arptables -A OUTPUT -s 172.25.66.100 -j mangle --mangle-ip-s 172.25.66.2
arptables -nL

物理机测试

我们可以尝试删除master server1上的VIP,可以发现删除后又出现了。

[root@server1 keepalive_ldirectord]# ip addr del 172.25.66.100/24 dev eth0
[root@server1 keepalive_ldirectord]# ip a
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:cc:84:9c brd ff:ff:ff:ff:ff:ff
    inet 172.25.66.1/24 brd 172.25.66.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 172.25.66.100/24 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fecc:849c/64 scope link 
       valid_lft forever preferred_lft forever

在这里插入图片描述
可以清晰的看到发生的过程,因为master上VIP掉了,所以切换到BACKUP,但是此时检测优先级,因为master并没有宕机,所以又切换回master上创建VIP。

现在,我们可以在真实主机测试,访问VIP,然后故意让masterDS宕机,观察访问是否还正常。

一开始确实利用keepalived实现了lvs的DR模式,因为指定的是rr,所以,效果如下:

[root@localhost rht6.5]# curl 172.25.66.100
server2
[root@localhost rht6.5]# arp -d 172.25.66.100
[root@localhost rht6.5]# curl 172.25.66.100
server3
[root@localhost rht6.5]# curl 172.25.66.100
server2
[root@localhost rht6.5]# curl 172.25.66.100
server3
[root@localhost rht6.5]# curl 172.25.66.100

此时,我们模拟keepalived的masterDS宕机,观测是否影响我们的服务请求。

  • 我们首先在masterDS上关闭keepalived
systemctl stop keepalived.service
  • 然后再次请求VIP,发现服务并未中断。
[root@localhost rht6.5]# curl 172.25.66.100
server2
[root@localhost rht6.5]# curl 172.25.66.100
server3
[root@localhost rht6.5]# curl 172.25.66.100
server2
[root@localhost rht6.5]# curl 172.25.66.100
server3
  • 此时我们发现,在备用DS上,已经生成了VIP。

在这里插入图片描述

  • 当主DS重启后,VIP又迁移回masterDS,因为其优先级更高,且配置文件中有说明。我们可以分析日志,里面详细的记录了相关改变。
    在这里插入图片描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值