阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Keepalive配置文件说明和实现高可用

107次阅读
没有评论

共计 4306 个字符,预计需要花费 11 分钟才能阅读完成。

Keepalive 概述:

Keepalived 是一个免费开源的, 用 C 编写的, 具备第 3 层、第 4 层和第 7 层交换机的功能。主要提供 loadbalancing(负载均衡)和 high-availability(高可用)功能, 负载均衡实现需要依赖 Linux 的虚拟服务内核模块(ipvs), 而高可用是通过 VRRP 协议实现多台机器之间的故障转移服务。

Keepalive 配置文件说明和实现高可用

上图是 Keepalived 的功能体系结构, 大致分两层: 用户空间 (user space) 和内核空间 (kernel space)。内核空间: 主要包括 IPVS(IP 虚拟服务器, 用于实现网络服务的负载均衡) 和 NETLINK(提供高级路由及其他相关的网络功能)两个部分。
用户空间:

WatchDog: 负载监控 checkers 和 VRRP 进程的状况
VRRP Stack: 负载负载均衡器之间的失败切换 FailOver, 如果只用一个负载均稀器, 则 VRRP 不是必须的。
Checkers: 负责真实服务器的健康检查 healthchecking, 是 keepalived 最主要的功能。换言之, 可以没有
VRRP Stack, 但健康检查 healthchecking 是一定要有的。
IPVS wrapper: 用户发送设定的规则到内核 ipvs 代码
Netlink Reflector: 用来设定 vrrp 的 vip 地址等。

Keepalived 的所有功能是配置 keepalived.conf 文件来实现的。

安装

[root@localhost ~]# yum install keepalived ipvsadm
[root@localhost ~]# rpm -ql keepalived
/etc/keepalived/keepalived.conf 主配置文件
/etc/sysconfig/keepalived
/usr/bin/genhash
/usr/lib/systemd/system/keepalived.service 启动脚本

配置文件说明

[root@localhost ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
router_id maiya      #路由 id, 不能重复
}

vrrp_instance lvs_inst {#定义 vrrp 实例名
              state BACKUP            #定义 vrrp 角色, 分为 MASTER/BACKUP 两种
              interface ens33            #指定网络接口名
              virtual_router_id 51        #同一组的 vrrp 成员, 该 id 需要一致
              priority 150                      #优先级, 范围(0-255)
              nopreempt                        #不抢占(只针对 BACKUP 生效)
              advert_int 1                      #发送 hello 的时间间隔
              authentication {#通过密码身份验证
              auth_type PASS
              auth_pass 1111
        }
            virtual_ipaddress {#定义虚拟 IP(VIP)
                    10.18.42.123
          }
}

virtual_server 10.18.42.123 80 {#定义 VIP 相关配置
              delay_loop 6
              lb_algo rr                  #使用 rr 调度算法(rr|wrr|lc |wlc|lblc|sh|dh)
              lb_kind DR                #使用 DR 模式 (DR/NAT/TUN)
              persistence_timeout 50      #定义 persistence 保持时间
              protocol TCP                          #tcp 协议

real_server 10.18.42.42 80 {#定义 real_server
              weight 1              #weight 权重为 1
              TCP_CHECK {#定义 checker 的方法(TCP/HTTP/SSL/MISC)
                        connect_port 80              #定义 tcp 的 port
                        connect_timeout 3            #定义本次连接的超时时长为 3s
                        nb_get_retry 3              #定义尝试 3 次, 如果 3 次都失败则宣告本 real_server 失效
                        delay_before_retry 3        #定义重连接间隔时间为 3s

              }
}
real_server 10.18.42.6 80 {
              weight 1
              TCP_CHECK {
                        connect_port 80
                        connect_timeout 3
                        nb_get_retry 3
                          delay_before_retry 3
                    }
          }
}

关于配置文件中的其它项:

HTTP_GET | SSL_GET{
url{#根据 url check, 可以指定多个
path /            #定义要检查的 URI 地址
digest <string>            #检查后的摘要信息
#(可以使用 genhash -s 目标服务器 ip  -p 端口号  status_code 200  -u  uri 地址得到摘要信息)
status_code 200                          #检查的返回状态码
}
}
notify_master /path/xx.sh                    #指定当切换到 master 时执行的脚本
notify_backup /path/xx.sh                  #指定当切换到 backup 时执行的脚本
notify_fault “path/xx.sh VG_1”            #故障时执行的脚本
notify  /path/xx.sh

virtualhost <string>                    #检查的 web 服务器的虚拟主机
sorry_server <IPADDR> <port>        #备用机的 IP, 所有的 realserver 失效后启用
notify_up <string>                        #检测到服务器 up 后执行的脚本
notify_down <string>                #检测到服务器 down 后执行的脚本

实现 MySQL 的故障转移

1)、实现 master 与 slave1 两台主机的复制(AA 复制)
2)、利用 keepalived 的健康检查功能, 检测本机的 3306 端口是否存活, 如果端口失效, 则自动执行自定义脚本
3)、自定义脚本的内容为:kill 本机的 keepalived 进程, 并删除本机 VIP; 当本机 keepalived 进程被 kill 掉之后, 另一台主机的 keepalived 进程即可获得虚拟 IP, 实现的故障转移
4)、测试: 客户端连接 keepalived 提供的虚拟 IP(mysql 需要事先授权 grant 连接)

[root@localhost ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
          router_id teacher
}
vrrp_instance lvs_inst {
          state MASTER
          interface ens33
          virtual_router_id 51
          priority 250
          nopreempt
          advert_int 1
          authentication {
                  auth_type PASS
                  auth_pass 1111
}
          virtual_ipaddress {
                      10.18.42.123
          }
}
virtual_server 10.18.42.123 3306 {
            delay_loop 6
            lb_algo rr
            lb_kind DR
            #persistence_timeout 50
            protocol TCP

real_server 10.18.42.251 3306 {
        weight 1
        notify_down /etc/keepalived/kill.sh
        TCP_CHECK {
                  connect_port 3306
                  connect_timeout 3
                  nb_get_retry 3
                  delay_before_retry 3
                  }
        }
}

[root@localhost ~]# cat /etc/keepalived/kill.sh
#!/bin/bash
pkill keepalived
#systemctl stop keepalived #尽量使用此方式关闭 keepalived
ip addr del dev ens33 10.18.42.123/32

haproxy 的故障转移

[root@localhost ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
    router_id teacher
}
vrrp_script chk_haproxy {
    script “lsof -i:80 | grep haproxy || exit 1”
    interval 2
    fail 1
}
vrrp_instance lvs_inst {
  state MASTER
  interface ens33
      virtual_router_id 51
      priority 250
      nopreempt
      advert_int 1
authentication {
            auth_type PASS
            auth_pass 1111
}
track_script {
          chk_haproxy
}
virtual_ipaddress {
          10.18.42.124
          }
}

本���永久更新链接地址:https://www.linuxidc.com/Linux/2018-05/152149.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4306字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中