Linux—keepalived高可用软件详解

先上两张图,回顾use_agent(用户代理)以及新增keepalived原理图

Linux—keepalived高可用软件详解

http_user_agent(看图理解是不是更简单?)

Linux—keepalived高可用软件详解

keeplived书写vrrp协议原理

Keepalived的主要功能作用

  • keepalived软件能干什么?
  • Keepalived软件起初是专为LVS负载均衡软件设计的,

    用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能

  • keepalived软件主要功能?
  • ① 管理LVS负载均衡软件

    ② 实现对LVS集群节点健康检查功能

    ③ 作为系统网络服务的高可用功能

  • keepalived软件工作原理(重点)
  • ① VRRP协议,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。

    ② VRRP是用过IP多播的方式(默认多播地址(224.0.0.18))实现高可用对之间通信的。

    ③ 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。

    备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对。

    man keepalived.conf —获取keepalived软件功能说明信息

    keepalived高可用集群部署统一规划

  • 环境准备说明
  • lb01 10.0.0.5

    lb02 10.0.0.6

    web01 10.0.0.8

    web02 10.0.0.7

    web03 10.0.0.9

  • web集群服务器配置文件环境统一(web01 web02 web03 配置均一致)
  • server {

    listen 80;

    server_name www.etiantian.org;

    location / {

    root html/www;

    index index.html index.htm;

    }

    }

    server {

    listen 80;

    server_name bbs.etiantian.org;

    location / {

    root html/bbs;

    index index.html index.htm;

    }

    }

    同步三台web服务器配置:

    scp -rp {www.conf,bbs.conf} 172.16.1.8:/application/nginx/conf/extra/

    scp -rp {www.conf,bbs.conf} 172.16.1.9:/application/nginx/conf/extra/

    Linux—keepalived高可用软件详解

    确保nginx.conf配置文件统一

    Linux—keepalived高可用软件详解

    统一环境

    Linux—keepalived高可用软件详解

    推送统一配置文件到web02、web03服务器

  • nginx反向代理负载均衡集群服务器配置文件环境统一
  • [root@lb01 conf]# cat nginx.conf

    ####lb01和lb02 nginx.conf ——两台负载均衡的配置都要统一

    worker_processes 1;

    events {

    worker_connections 1024;

    }

    http {

    include mime.types;

    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

    upstream server_pools {

    server 10.0.0.7:80;

    server 10.0.0.8:80;

    server 10.0.0.9:80;

    }

    server {

    listen 80;

    server_name www.etiantian.org;

    location / {

    proxy_pass http://server_pools;

    proxy_set_header Host $host;

    proxy_set_header X-Forwarded-For $remote_addr;

    }

    }

    server {

    listen 80;

    server_name bbs.etiantian.org;

    location / {

    proxy_pass http://server_pools;

    proxy_set_header Host $host;

    proxy_set_header X-Forwarded-For $remote_addr;

    }

    }

    }

    Linux—keepalived高可用软件详解

    统一两台负载的配置文件信息如上面内容

    把配置好的lb01 nginx.conf配置文件推送到lb02(负载)。 ——利用 scp 命令 -rp 参数 递归复制,不改变属性。


    /application/nginx/sbin/nginx -t ——语法检查,检查配置文件是否有误。

    keepalived服务部署过程

  • 第一步:keepalived软件安装部署
  • lb01和lb02两个负载服务器都安装

    yum install -y keepalived

    rpm -qa keepalived

    rpm -ql keepalived

    [root@lb01 conf]# rpm -ql keepalived

    /etc/keepalived


    /etc/keepalived/keepalived.conf — keepalived服务主配置文件


    /etc/rc.d/init.d/keepalived — keepalived服务启动脚本文件

    Linux—keepalived高可用软件详解

    lb01

    Linux—keepalived高可用软件详解

    lb02

    第二步:进行默认配置测试

    # 启动lb01 lb02# 的keepalived服务

    Linux—keepalived高可用软件详解

    Linux—keepalived高可用软件详解

    说明:存在默认配置虚IP地址信息

    通过抓包可以看到vrrp数据包信息

    # 搭建基础的keepalived配置文件

    #lb01#

    global_defs {

    router_id LVS_01

    }

    vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 150

    advert_int 1

    authentication {

    auth_type PASS

    auth_pass 1111

    }

    virtual_ipaddress {

    10.0.0.3/24 dev eth0 label eth0:1

    }

    }

    Linux—keepalived高可用软件详解

    lb01的配置文件修改的内容

    虚拟IP地址显示信息:

    默认显示信息:inet 10.0.0.3/32 scope global eth0

    修改显示信息:inet 10.0.0.3/24 scope global secondary eth0:1

    #lb02 #

    global_defs {

    router_id LVS_02

    }

    vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

    auth_type PASS

    auth_pass 1111

    }

    virtual_ipaddress {

    10.0.0.3/24 dev eth0 label eth0:1

    }

    }

    Linux—keepalived高可用软件详解

    lb02的配置文件修改的内容

    说明:主备服务器配置文件区别

    01. router_id 不同

    02. state BACKUP 不同

    03. priority 不同

    说明:进行抓包观察配置效果;并且对比两个负载均衡服务器的配置文件

    配置完后重启keepalived。利用 ip addr 查看配置虚拟IP是否生效

    Linux—keepalived高可用软件详解

    未配置前启动keepalied没生效

    Linux—keepalived高可用软件详解

    配置后重启keepalived生效,出现VIP(虚拟IP)

    lb02不会出现VIP,因为暂时可以用到的是lb01这台负载(只要不挂VIP就在lb01)

    lb01是主负载服务器 优先级大于lb02,默认先使用lb01这台负载

    keepalived软件脑裂概念说明

    由于某些原因,导致两台高可用服务器在指定时间内,无法检测到对方的心跳线消息,各自取得资源及服务的所有权,而此时的两台高可用服务器对都还活着并在正常运行,这样就会导致同一个IP或者服务在两端同时存在而发生冲突,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两端的数据不一致或者造成数据丢失,这种情况就被成为脑裂。

  • 脑裂发生的原因
  • 一般来说脑裂发生,有以下几种原因:

    Linux—keepalived高可用软件详解
  • 解决裂脑的常见方法
  • Linux—keepalived高可用软件详解
  • 解决keepalived裂脑的常见方案
  • Linux—keepalived高可用软件详解
  • 制作监控脚本—lb02
  • 报警的条件:只要lb02 上面有vip

    1.lb01 挂了

    2.心碎

    #!/bin/bash

    #desc: jiankong lb02 vip

    if [ `ip a s eth0 |grep -c “10.0.0.3”` == 1 ];then

    echo “baojing”

    fi #lb02负载均衡出现脑裂的条件脚本出现10.0.0.3

    Nginx反向代理——负载均衡+高可用

  • 统一 lb01 lb02 反向代理 配置文件
  • #lb01 or lb02#

    worker_processes 1;

    events {

    worker_connections 1024;

    }

    http {

    include mime.types;

    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

    log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘

    ‘$status $body_bytes_sent “$http_referer” ‘

    ‘”$http_user_agent” “$http_x_forwarded_for”‘;

    upstream server_pools {

    server 10.0.0.7;

    server 10.0.0.8;

    server 10.0.0.9;

    }

    server {

    listen 80;

    server_name bbs.etiantian.org;

    location / {

    proxy_pass http://server_pools;

    proxy_set_header Host $host;

    proxy_set_header X-Forwarded-For $remote_addr;

    }

    access_log logs/access_www.log main;

    }

    server {

    listen 80;

    server_name www.etiantian.org;

    location / {

    proxy_pass http://server_pools;

    proxy_set_header Host $host;

    proxy_set_header X-Forwarded-For $remote_addr;

    }

    access_log logs/access_blog.log main;

    }

    }

  • 进行测试
  • ## 01 测试10.0.0.5 lb01服务器

    curl -H Host:www.etiantian.org 10.0.0.5/nana.html

    curl -H Host:bbs.etiantian.org 10.0.0.5/nana.html

    ## 01 测试10.0.0.6 lb02 服务器

    curl -H Host:www.etiantian.org 10.0.0.6/nana.html

    curl -H Host:bbs.etiantian.org 10.0.0.6/nana.html

    说明:通过以上测试,确认两台lb服务器,均可实现负载调度功能

    Linux—keepalived高可用软件详解

    测试成功

    Linux—keepalived高可用软件详解

    测试成功

  • 把域名解析到 vip上面
  • 10.0.0.3 www.etiantian.org blog.etiantian.org bbs.etiantian.org

    编写/etc/hosts文件把上面的内容加到里面去

    window的hosts文件自行添加

  • 运维必须要懂的拍错过程
  • 1.是否解析 ping

    2.浏览器缓存

    3.服务没重启(平滑重启/重启)

    排错过程:

    01:利用负载服务器,在服务器上curl所有节点信息(web服务器配置有问题)

    02;curl 负载均衡服务器地址,可以实现负载均衡

    03:windows绑定虚拟IP,浏览器上进行测试

    keepalived日志文件(运维能力:看日志)

    tail -f /var/log/messages

    企业keepalived配置案例

  • 更改nginx反向代理只监听vip地址
  • 10.0.0.3/bingbing.html 可以使用

    10.0.0.5/bingbing.html 不可以使用

    10.0.0.6/bingbing.html 不可以使用

  • 第一步:修改反向代理服务配置文件,只监听vip地址
  • ####lb01 lb02 nginx.conf

    worker_processes 1;

    events {

    worker_connections 1024;

    }

    http {

    include mime.types;

    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

    log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘

    ‘$status $body_bytes_sent “$http_referer” ‘

    ‘”$http_user_agent” “$http_x_forwarded_for”‘;

    upstream server_pools {

    server 10.0.0.7;

    server 10.0.0.8;

    server 10.0.0.9;

    }

    server {

    listen 10.0.0.3:80; #在这里配置只监听虚拟VIP

    server_name www.etiantian.org;

    location / {

    proxy_pass http://server_pools;

    proxy_set_header Host $host;

    proxy_set_header X-Forwarded-For $remote_addr;

    }

    access_log logs/access_www.log main;

    }

    server {

    listen 10.0.0.3:80; #在这里配置只监听虚拟VIP

    server_name blog.etiantian.org;

    location / {

    proxy_pass http://server_pools;

    proxy_set_header Host $host;

    proxy_set_header X-Forwarded-For $remote_addr;

    }

    access_log logs/access_blog.log main;

    }

    }

    说明:在修改反向代理服务器配置文件监听地址时,多个server都需要配置监听地址,否则仍旧使用默认监听所有

  • 第二步:lb02上不存在vip地址,无法监听,需要修改内核文件
  • [root@lb01 conf]# /application/nginx/sbin/nginx -t

    nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok

    nginx: [emerg] bind() to 10.0.0.3:80 failed (99: )

    nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test failed

    [root@lb02 conf]# ip a s eth0

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:27:4e:e9 brd ff:ff:ff:ff:ff:ff

    inet 10.0.0.5/24 brd 10.0.0.255 scope global eth0

    inet6 fe80::20c:29ff:fe27:4ee9/64 scope link

    valid_lft forever preferred_lft forever

    [root@lb01 conf]# ###nginx 没有办法 监听 本地不存在的ip地址

    解决方法——在lb02上执行以下操作

    echo ‘net.ipv4.ip_nonlocal_bind = 1’ >>/etc/sysctl.conf —实现监听本地不存在的ip地址

    ##/etc/sysctl.conf 加上

    sysctl -p

    echo “1” >/proc/sys/net/ipv4/ip_nonlocal_bind

  • 第三步:进行测试
  • [root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.5/bingbing.html

    curl: (7) couldn’t connect to host

    [root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.6/bingbing.html

    curl: (7) couldn’t connect to host

    [root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.3/bingbing.html

    www web01

    [root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.3/bingbing.html

    www web02

    只监听虚拟VIP,其他的例如负载10.0.0.5和10.0.0.6都无法连接主机。只有10.0.0.3可以进行后端代理web服务器的请求。

    实践案例——让keepalived监控nginx反向代理服务

    #vip什么时候 什么条件 才会飘走 ?#

    1.当服务器宕机

    2.防火墙

    #### nginx挂了###

    如何让keepalived监控nginx nginx挂了,keepalived跟着殉情

  • 第一步:keepalived监控nginx条件
  • 1.如果nginx挂了—我如何知道nginx挂了?

    1)端口

    2)进程

    ps -ef |grep nginx |grep -v grep |wc -l

    2.keepalived挂了

    /etc/init.d/keepalived stop

    ##> -gt greater than

    ##>= -ge greater equal

    ##< -lt less than

    ##<= -le less equal

    ##== -eq equal

    ##!= -ne no equal

  • 第二步:根据条件-书写脚本
  • #!/bin/bash

    #name: check_web.sh

    #desc: check nginx and kill keepalived

    if [ `ps -ef |grep nginx |grep -v grep |wc -l` -lt 2 ];then

    /etc/init.d/keepalived stop

    fi

  • 第三步:添加权限
  • [root@lb02 conf]# chmod +x /server/scripts/check_web.sh

    [root@lb02 conf]# ll /server/scripts/check_web.sh

    -rwxr-xr-x 1 root root 174 Mar 30 17:47 /server/scripts/check_web.sh

  • 第四步:进行测试
  • 第五步:1.1.1 放入到keepalived.conf
  • Linux—keepalived高可用软件详解

    Linux—keepalived高可用软件详解

    ####下面是lb02的配置文件 lb01上面自己修改下。

    global_defs {

    router_id LVS_02

    }

    vrrp_script check_web {

    script “
    /server/scripts/check_web.sh” — 表示将一个脚本信息赋值给变量check_web

    interval 2 — 执行监控脚本的间隔时间

    weight 50 — 利用权重值和优先级进行运算,从而降低主服务优先级

    使之变为备服务器(建议先忽略)

    }

    说明:定义的监控脚本必须有执行权限

    chmod +x web_jiankong.sh

    vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

    auth_type PASS

    auth_pass 1111

    }

    virtual_ipaddress {

    10.0.0.3/24 dev eth0 label eth0:1

    }

    track_script {

    check_web

    }

    }

  • 第六步:请自己自行测试
  • 实践案例三:keepalived多实例配置

  • 第一步:配置keepalived-配置双主
  • Linux—keepalived高可用软件详解

    如图配置双主拓扑图

    解决多组keepalived服务器在一个局域网的冲突问题

    当在一个局域网内部署了多组keepalived服务器,而又未使用专门的心跳线通讯时,可能会发生高可用接管的严重故障问题。前文已经讲过keepalived高可能功能是通过VRRP协议实现的,VRRP协议默认通过Ip多组播的形式实现高可用对之间的通讯,如果同一个局域网存在多组keepalived服务器对,就会造成IP多播地址冲突问题,导致接管错乱,不同组的keepalived都会使用默认的224.0.0.18组为多播地址。此时的解决办法是,在同组的keepalived服务器所有的配置文件里指定独一无二的多播地址,配置如下图

    Linux—keepalived高可用软件详解

    #lb01

    global_defs {

    router_id LVS_01

    }

    vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 150

    advert_int 1

    authentication {

    auth_type PASS

    auth_pass 1111

    }

    virtual_ipaddress {

    10.0.0.3/24 dev eth0 label eth0:1

    }

    }

    vrrp_instance VI_2 {

    state BACKUP

    interface eth0

    virtual_router_id 52

    priority 100

    advert_int 1

    authentication {

    auth_type PASS

    auth_pass 1111

    }

    virtual_ipaddress {

    10.0.0.4/24 dev eth0 label eth0:2

    }

    }

    #lb02

    global_defs {

    router_id LVS_02

    }

    vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

    auth_ty

    来源:King代号K

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2019年7月10日
    下一篇 2019年7月10日

    相关推荐