keepalived工作原理和使用方式
创始人
2024-09-25 12:48:48
0
keepalived是什么
  • keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
keepalived主要有三个模块
  • 分别是core、check和vrrp。
  • core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
  • check负责健康检查,包括常见的各种检查方式。
  • vrrp模块是来实现VRRP协议的。
案例1
  • 环境:

    • 初识keepalived,实现web服务器的高可用集群。
    • ​ Server1: 192.168.145.15
    • ​ Server2: 192.168.145.16
    • ​ VIP: 192.168.145.100 对外的虚拟ip
    • 拓扑
    • 注意:
      • 关闭防火墙、selinux
      • 配置yum源
  • server1

    • 创建etc下的keepalived目录,编辑配置文件

      • yum -y install keepalived

      • vi /etc/keepalived/keepalived.conf

        • ! Configuration File for keepalived global_defs {  router_id 1                            #设备在组中的标识,设置不一样即可  }  #vrrp_script chk_nginx {                        #健康检查 # script "/etc/keepalived/ck_ng.sh"     #检查脚本 # interval 2                            #检查频率.秒 # weight -5                             #priority减5 # fall 3                                        #失败三次 # }  #高可用集群的组员设置 vrrp_instance VI_1 {               #VI_1。实例名两台路由器相同。同学们要注意区分。     state MASTER                        #主或者从状态     interface ens33                     #监控网卡     mcast_src_ip 192.168.229.11         #心跳源IP,当前主机的ip     virtual_router_id 55                #虚拟路由编号,主备要一致。同学们注意区分     priority 100                        #优先级 数值越大优先级越高     advert_int 1                        #心跳间隔 单位是秒      authentication {                    #秘钥认证(1-8位)         auth_type PASS         auth_pass 123456     }      virtual_ipaddress {                 #VIP 虚拟ip     192.168.229.100/24         }  #  track_script {                       #引用脚本 #       chk_nginx #    }  }  
        • 把当前服务器的keepalived的配置,传给另外一台服务器

        • #scp -r /etc/keepalived/keepalived.conf 192.168.145.16:/etc/keepalived/

        • systemctl enable keepalived.service

          • 开机启动keepalived
      • 安装Nginx

        • rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
        • yum -y install nginx
        • systemctl enable nginx.service
        • systemctl start nginx.service
        • vi /usr/share/nginx/html/index.html
        • curl -i localhost
          • -i 显示目标地址返回的响应头信息
        • systemctl start keepalived.service
        • 在这里插入图片描述
  • server2

    • BACKUP服务器的配置需要几处修改

      • yum -y install keepalived

      • vi /etc/keepalived/keepalived.conf

        • state MASTER改为  state BACKUP mcast_src_ip 192.168.145.15改为backup服务器实际的IP mcast_src_ip 192.168.145.16 priority 100改为priority 99 
          • 配置文件示例

            • ! Configuration File for keepalived global_defs {  router_id 2  }  #vrrp_script chk_nginx { # script "/etc/keepalived/ck_ng.sh" # interval 2 # weight -5 # fall 3 # }  vrrp_instance VI_1 {     state BACKUP     interface ens33     mcast_src_ip 192.168.229.12     virtual_router_id 55     priority 99     advert_int 1      authentication {         auth_type PASS         auth_pass 123456     }      virtual_ipaddress {     192.168.229.100/24         }  #  track_script { #       chk_nginx #    }  }  
        • systemctl enable keepalived.service

      • 安装Nginx

        • rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
        • yum -y install nginx
        • systemctl enable nginx.service
        • systemctl start nginx.service
        • vi /usr/share/nginx/html/index.html
        • curl -i localhost
        • systemctl start keepalived.service

        在这里插入图片描述

  • client

    • 访问VIP http://192.168.145.100

    • 拔掉master(server1)的网线。

      ![- 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://i-blog.csdnimg.cn/direct/a27500ab8b5c4c7cbcce5ffdd840b267.png) 
    • 访问VIP http://192.168.145.100,观察网页已经切换

      • 在这里插入图片描述
  • 关于keepalived对nginx状态未知的问题

    • 恢复之前的实验。启动两台主机的keepalived和nginx。确保页面访问正常。 关闭master的nginx服务 。systemctl stop nginx 继续访问VIP,请问页面是否会切换到slave呢?

    • 请思考,nginx服务的状态和keepalived的关系。

      • 原因是keepalived监控的是接口IP状态。无法监控nginx服务状态

      • 编辑监控脚本。

        • server1

          • 添加Nginx监控脚本

            • vi /etc/keepalived/ck_ng.sh

              • #!/bin/bash #检查nginx进程是否存在 counter=$(ps -C nginx --no-heading|wc -l) if [ "${counter}" = "0" ]; then #尝试启动一次nginx,停止5秒后再次检测     systemctl start nginx     sleep 5     counter=$(ps -C nginx --no-heading|wc -l)     if [ "${counter}" = "0" ]; then #如果启动没成功,就杀掉keepalive触发主备切换         systemctl stop keepalived      fi fi 
            • chmod +x /etc/keepalived/ck_ng.sh

        • server2

          • 添加Nginx监控脚本

            • vi /etc/keepalived/ck_ng.sh

              • #!/bin/bash #检查nginx进程是否存在 counter=$(ps -C nginx --no-heading|wc -l) if [ "${counter}" = "0" ]; then #尝试启动一次nginx,停止5秒后再次检测     systemctl start nginx     sleep 5     counter=$(ps -C nginx --no-heading|wc -l)     if [ "${counter}" = "0" ]; then #如果启动没成功,就杀掉keepalive触发主备切换         service keepalived stop     fi fi 
            • chmod +x /etc/keepalived/ck_ng.sh

      • 启动监控脚本

        • 清除掉配置文件中的注释。

        • 在这里插入图片描述

        • 重启keepalived即可

    • nginx状态测试

      • 因为脚本中有拉起nginx的语句,测试时可以将脚本文件位置进行改变。观察脚本的效果
案例2
  • keepalived+lvs集群

  • 环境

    • 192.168.145.15 dr1 负载均衡器 master
    • 192.168.145.16 dr2 负载均衡器 backup
    • 192.168.145.136 rs1 web1
    • 192.168.145.137 rs2 web2
    • 拓扑
      • 请添加图片描述
  • 1.在master上安装配置Keepalived:

    • # yum install keepalived ipvsadm -y
      • ipvsadm安装并不启动
  • 2.在master上修改配置文件

    • # vim /etc/keepalived/keepalived.conf

      • ! Configuration File for keepalived global_defs {						 	router_id Director1    #两边不一样。 	} 	 vrrp_instance VI_1 {				 	state MASTER				#另外一台机器是BACKUP	 	interface ens33				#心跳网卡	 	virtual_router_id 51			#虚拟路由编号,主备要一致 	priority 150				#优先级	 	advert_int 1				#检查间隔,单位秒	 	authentication { 		auth_type PASS 		auth_pass 1111 		} 	virtual_ipaddress { 		192.168.229.100/24       dev      ens33   	#VIP和工作接口 		} 	} 	 virtual_server 192.168.229.100 80 {		#LVS 配置,VIP,就是keepalived配置的对外地址 	delay_loop 3				#服务论询的时间间隔,#每隔3秒检查一次real_server状态 	lb_algo rr				#LVS 调度算法 	lb_kind DR	 			#LVS 集群模式 	protocol TCP 	real_server 192.168.229.13 80 { 		weight 1                    #权重 		TCP_CHECK { 			connect_timeout 3       #健康检查方式,连接超时时间 			} 		} 	real_server 192.168.229.14 80 { 		weight 1 		TCP_CHECK { 			connect_timeout 3    #设定连接超时时间为3秒 超过视为掉线 			} 		} }  
  • 3.在backup上安装keepalived:

    • # yum install keepalived ipvsadm -y
      • ipvsadm安装并不启动
  • 4.拷贝master上的keepalived.conf到backup上:

    • # scp  192.168.229.11:/etc/keepalived/keepalived.conf 192.168.229.12:/etc/keepalived/ 
  • 5.拷贝后,修改配置文件

    • router_id Director2

    • state BACKUP

    • priority 100

    • 配置示例

      • # vim /etc/keepalived/keepalived.conf

      • ! Configuration File for keepalived global_defs {         router_id Director2         }  vrrp_instance VI_1 {         state BACKUP                            #另外一台机器是BACKUP         interface ens33                         #心跳网卡         virtual_router_id 51         priority 100                            #优先级         advert_int 1                            #检查间隔,单位秒         authentication {                 auth_type PASS                 auth_pass 1111                 }         virtual_ipaddress {                 192.168.229.100/24 dev ens33       #VIP和工作端口                 }         }  virtual_server 192.168.229.100 80 {                #LVS 配置,VIP         delay_loop 3                            #服务论询的时间间隔         lb_algo rr                              #LVS 调度算法         lb_kind DR                              #LVS 集群模式         protocol TCP         real_server 192.168.229.13 80 {                 weight 1                 TCP_CHECK {                         connect_timeout 3                         }                 }         real_server 192.168.229.14 80 {                 weight 1                 TCP_CHECK {                         connect_timeout 3                         }                 } }  

  • 6.master和backup上启动服务:

    • #systemctl enable keepalived
    • # systemctl start keepalived
    • #reboot
  • 7.web服务器配置

    • web1和web2同配置

      • 安装web测试站点

        • yum install -y httpd && systemctl start httpd && systemctl enable httpd
        • netstat -antp | grep httpd
        • # elinks 127.0.0.1
        • vim /var/www/html/index.html
        • 自定义web主页,以便观察负载均衡结果
      • 配置虚拟地址

        • #cp /etc/sysconfig/network-scripts/{ifcfg-lo,ifcfg-lo:0} #vim /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.229.100   #对外提供服务的地址 NETMASK=255.255.255.255 ONBOOT=yes 其他行注释掉 
      • 配置路由

        • route add 192.168.145.100 dev lo
        • 在两台机器(RS)上,添加一个路由:route add -host 192.168.145.100 dev lo 确保如果请求的目标IP是 V I P ,那么让出去的数据包的源地址也显示为 VIP,那么让出去的数据包的源地址也显示为 VIP,那么让出去的数据包的源地址也显示为VIP
      • 配置ARP

        • # vim /etc/sysctl.conf

          • net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 
            • 忽略arp请求 可以回复
      • reboot

  • 8.测试:

    • 1)观察lvs路由条目

      • master上 查询 # ipvsadm -Ln

        • [root@dr1 ~]# 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.229.100:80 rr   -> 192.168.229.13:80            Route   1      0          0   -> 192.168.229.14:80            Route   1      0          0  
    • 2)观察vip地址在哪台机器上

      • master上 查询 # ip a

        • ens33:  inet 192.168.229.11/24 brd 192.168.229.255 scope global noprefixroute ens33 inet 192.168.229.100/24 scope global secondary ens33 
    • 3)客户端浏览器访问vip

    • 4)关闭master上的keepalived服务,再次访问vip

      • master上 关闭 # systemctl stop keepalived.service
    • 5)关闭web1站点服务,再次访问VIP

      • web1 # systemctl stop httpd

相关内容

热门资讯

安卓系统为什么没网络,探究原因... 手机没网络,这可真是让人头疼的小麻烦!你有没有遇到过这种情况:手机屏幕上显示着“无网络连接”,而你明...
安卓苹果换系统安装教程,安卓与... 亲爱的手机控们,是不是觉得手机用久了,系统卡得像蜗牛爬?别急,今天就来教你怎么给安卓和苹果手机换上全...
魅族安卓系统下载软件,尽享智能... 你有没有发现,最近手机圈里又掀起了一股热潮?没错,就是魅族的新款手机!这款手机不仅外观时尚,性能强大...
平板电脑安卓系统12墨,平板电... 亲爱的读者们,你是否也和我一样,对科技新品的到来充满期待?今天,我要和你聊聊一款让人眼前一亮的新品—...
荣耀畅玩刷安卓系统,解锁更多可... 你有没有想过,你的荣耀畅玩手机,其实可以焕发第二春呢?没错,就是刷上全新的安卓系统!想象你的手机瞬间...
为什么安卓系统老是卡机,性能瓶... 手机卡顿真是让人头疼!尤其是安卓系统,有时候用着用着就突然卡住了,让人忍不住想摔手机。那么,为什么安...
哪款盒子是安卓系统,智能娱乐新... 你有没有想过,在这个智能设备横行的时代,哪款盒子是安卓系统最让人心动呢?安卓系统以其开放性和强大的兼...
安卓Q删除系统文件,安全操作与... 亲爱的安卓用户们,你是否曾在使用安卓手机时,不小心误删了重要的系统文件,心里直发慌?别担心,今天就来...
安卓12系统怎么下载谷歌,安卓... 你有没有听说安卓12系统已经发布了?是不是也想赶紧升级体验一下新系统的魅力呢?不过,别急,升级之前你...
安卓系统怎么清除后台,安卓系统... 手机后台程序太多,是不是感觉手机越来越卡?别急,今天就来教你怎么轻松清除安卓系统的后台程序,让你的手...
ios和安卓重置系统,轻松恢复... 手机用久了是不是感觉卡得要命?别急,今天就来给你揭秘如何给iOS和安卓手机来个彻底的重置,让它焕发新...
华为的手机系统与安卓,融合与创... 亲爱的读者们,你是否曾好奇过,为什么华为的手机系统能在众多安卓手机中独树一帜?今天,就让我们一起揭开...
安卓系统如何加通知声音,安卓系... 你有没有发现,手机上的通知声音有时候就像是个小闹钟,总是不请自来地提醒你各种信息。不过,有时候这个“...
安卓系统怎么锁定主屏,安卓系统... 你是不是也和我一样,手机里藏着不少小秘密,不想让别人轻易窥探呢?别急,今天就来教你怎么给安卓手机的主...
安卓系统激活提示谷歌,谷歌助你... 你刚刚入手了一台全新的安卓手机,是不是兴奋得手舞足蹈?不过,别急着高兴,激活手机之前,可别忘了谷歌的...
缤越导航安卓系统,智能出行新体... 你有没有发现,现在汽车导航系统越来越智能了?这不,缤越导航安卓系统就让我眼前一亮。想象坐在车里,手指...
安卓系统好的阅读软件,精选阅读... 你有没有发现,手机里装了那么多应用,阅读软件可是占据了我们日常使用时间的大头呢!安卓系统上的阅读软件...
统信安卓系统下载,下载与体验新... 你有没有想过,手机系统也能像换衣服一样随心所欲地换?没错,今天就要给你揭秘一个超级实用的秘密——统信...
华为新系统鸿蒙安卓,华为安卓融... 你知道吗?最近科技圈可是炸开了锅,华为的新操作系统鸿蒙系统,竟然和安卓系统来了个亲密接触!这可不是一...
安卓系统拍证件照,轻松搞定 你有没有发现,现在拍照已经成为我们生活中不可或缺的一部分?无论是记录生活点滴,还是办理各种证件,拍照...