蓝易云

Docker 搭建 keepalived 主备节点

591次阅读
没有评论

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

一、Keepalived 简介

Keepalived 是 Linux 下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管,

它与 HeartBeat RoseHA 实现相同类似的功能,都可以实现服务或者网络的高可用,但是又有差别,HeartBeat 是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦,

与 HeartBeat 相比,Keepalived 主要是通过虚拟路由冗余来实现高可用功能,虽然它没有 HeartBeat 功能强大,但是 Keepalived 部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。

Keepalived 的高可用通过虚拟ip(vip)来实现,虚拟 ip 可以漂移。

Docker 搭建 keepalived 主备节点

二、Keepalived 配置文件

global_defs {                                     #全局定义部分
    notification_email {                          #设置报警邮件地址,可设置多个
        acassen@firewall.loc                      #接收通知的邮件地址
    }
    notification_email_from test0@163.com         #设置 发送邮件通知的地址
    smtp_server smtp.163.com                      #设置 smtp server 地址,可是ip或域名.可选端口号 (默认25)
    smtp_connect_timeout 30                       #设置 连接 smtp server的超时时间
    router_id LVS_DEVEL                           #主机标识,用于邮件通知
    vrrp_skip_check_adv_addr
    vrrp_strict                                   #严格执行VRRP协议规范,此模式不支持节点单播
    vrrp_garp_interval 0
    vrrp_gna_interval 0
    script_user keepalived_script                 #指定运行脚本的用户名和组。默认使用用户的默认组。如未指定,默认为keepalived_script 用户,如无此用户,则使用root
    enable_script_security                        #如果路径为非root可写,不要配置脚本为root用户执行。
}

vrrp_script chk_nginx_service {                   #VRRP 脚本声明
    script "/etc/keepalived/chk_nginx.sh"         #周期性执行的脚本
    interval 3                                    #运行脚本的间隔时间,秒
    weight -20                                    #权重,priority值减去此值要小于备服务的priority值
    fall 3                                        #检测几次失败才为失败,整数
    rise 2                                        #检测几次状态为正常的,才确认正常,整数
    user keepalived_script                        #执行脚本的用户或组
}

vrrp_instance VI_1 {                              #vrrp 实例部分定义,VI_1自定义名称
    state MASTER                                  #指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP
    interface ens33                               #网卡设置,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息
    virtual_router_id 51                          #虚拟路由标识,是一个数字,同一个vrrp 实例使用唯一的标识,MASTER和BACKUP 的 同一个 vrrp_instance 下 这个标识必须保持一致
    priority 100                                  #定义优先级,数字越大,优先级越高。
    advert_int 1                                  #设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样
    authentication {                              #设置验证类型和密码,两个节点必须一致
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {                           #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        192.168.119.130
    }
    track_script {                                #脚本监控状态
        chk_nginx_service                         #可加权重,但会覆盖声明的脚本权重值。chk_nginx_service weight -20
    }
    notify_master "/etc/keepalived/start_haproxy.sh start"  #当前节点成为master时,通知脚本执行任务
    notify_backup "/etc/keepalived/start_haproxy.sh stop"   #当前节点成为backup时,通知脚本执行任务
    notify_fault  "/etc/keepalived/start_haproxy.sh stop"   #当当前节点出现故障,执行的任务;
}

## 虚拟服务器virtual_server定义块 ,虚拟服务器定义是keepalived框架最重要的项目了,是keepalived.conf必不可少的部分。 该部分是用来管理LVS的,是实现keepalive和LVS相结合的模块。
virtual_server 192.168.119.130 80  {          #定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开
    delay_loop 6                              #每隔6秒查询realserver状态
    lb_algo rr                                #后端调试算法(load balancing algorithm)
    lb_kind DR                                #LVS调度类型NAT/DR/TUN
    #persistence_timeout 60                   同一IP的连接60秒内被分配到同一台realserver
    protocol TCP                              #用TCP协议检查realserver状态
    real_server 192.168.119.120 80 {
        weight 1                              #权重,最大越高,lvs就越优先访问
        TCP_CHECK {                           #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
            connect_timeout 10                #10秒无响应超时
            retry 3                           #重连次数3次
            delay_before_retry 3              #重连间隔时间
            connect_port 80                   #健康检查realserver的端口
        }
    }
    real_server 192.168.119.121 80 {
        weight 1                              #权重,最大越高,lvs就越优先访问
        TCP_CHECK {                           #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
            connect_timeout 10                #10秒无响应超时
            retry 3                           #重连次数3次
            delay_before_retry 3              #重连间隔时间
            connect_port 80                   #健康检查realserver的端口
        }
    }
}

二、Keepalived 搭建

节点 网卡 主备节点 Vip
172.21.9.203 eth0 主节点 172.21.9.251
172.21.9.202 eth0 备用节点 172.21.9.251

1. 简单搭建

1.1 主节点搭建

docker run -d \
--name keepalived-master \
--net=host \
-e KEEPALIVED_INTERFACE="eth0" \
-e KEEPALIVED_PRIORITY=100 \
-e KEEPALIVED_UNICAST_PEERS="#PYTHON2BASH:['172.21.9.203', '172.21.9.202']" \
-e KEEPALIVED_VIRTUAL_IPS="172.21.9.251" \
-e KEEPALIVED_STATE="MASTER" \
--privileged=true \
osixia/keepalived --loglevel debug

1.2 备用节点搭建

docker run -d \
--name keepalived-backup \
--net=host \
-e KEEPALIVED_PRIORITY=50 \
-e KEEPALIVED_UNICAST_PEERS="#PYTHON2BASH:['172.21.9.203', '172.21.9.202']" \
-e KEEPALIVED_VIRTUAL_IPS="172.21.9.251" \
-e KEEPALIVED_STATE="BACKUP" \
--privileged=true \
osixia/keepalived --loglevel debug

2. 创建配置文件搭建

2.1 主节点搭建

# 1. 创建配置文件
mkdir -p /home/docker/keepalived/conf/ && \
cat > /home/docker/keepalived/conf/my-keepalived.conf<<EOF
global_defs {
  default_interface eth0
}

vrrp_instance VI_1 {
  interface eth0

  state MASTER
  virtual_router_id 51
  priority 100
  nopreempt

  unicast_peer {
    172.21.9.203
    172.21.9.202
  }

  virtual_ipaddress {
    172.21.9.251
  }

  authentication {
    auth_type PASS
    auth_pass d0cker
  }

  notify "/container/service/keepalived/assets/notify.sh"
}
EOF

# 2. docker启动
docker run -d \
--name keepalived-master \
-v /home/docker/keepalived/conf/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \
--net=host \
--privileged=true \
osixia/keepalived --loglevel debug --copy-service

使用 ip a 命令,发现 eth0 网卡多了个 ip。

Docker 搭建 keepalived 主备节点

2.2 备用节点搭建

# 1. 创建配置文件
mkdir -p /home/docker/keepalived/conf/ && \
cat > /home/docker/keepalived/conf/keepalived.conf<<EOF
lobal_defs {
  default_interface eth0
}

vrrp_instance VI_1 {
  interface eth0

  state BACKUP
  virtual_router_id 51
  priority 50
  nopreempt

  unicast_peer {
    172.21.9.203
    172.21.9.202
  }

  virtual_ipaddress {
    172.21.9.251
  }

  authentication {
    auth_type PASS
    auth_pass d0cker
  }

  notify "/container/service/keepalived/assets/notify.sh"
}
EOF

# 2. docker启动
docker run -d \
--name keepalived-backup \
-v /home/docker/keepalived/conf/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \
--net=host \
--privileged=true \
osixia/keepalived --loglevel debug --copy-service

此时通过 ip a 命令查看,发现并没有 vip。
Docker 搭建 keepalived 主备节点

3. 故障模拟

通过在主节点上模拟 keepalived 故障,使用命令 docker stop keepalived-master,可以看见 vip 漂移到备用节点。

Docker 搭建 keepalived 主备节点

在主节点上再次模拟故障恢复,使用命令 docker stop keepalived-master,发现 vip 再次漂移到主节点

此时如果两台机器上都有 nginx,那么此时就可以通过虚拟节点来访问了,并可以通过 nginx 负载均衡到业务服务上。

三、其他说明

  • 镜像说明

osixia/keepalived 镜像的源码地址:docker-keepalived

  • vip 不释放问题

如果出现两个节点都存在 vip ,且程序退出后都不自动释放 vip,使用命令 ip addr del 172.21.9.251/32 dev eth0 进行删除。

提醒:本文发布于706天前,文中所关联的信息可能已发生改变,请知悉!

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
 0
阿蛮君
版权声明:本站原创文章,由 阿蛮君 于2023-01-06发表,共计5021字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
Copyright © 2022-2024 阿蛮君博客 湘ICP备2023001393号
本网站由 亿信互联 提供云计算服务 | 蓝易云CDN 提供安全防护和加速服务
Powered by Wordpress  Theme by Puock