设为首页 收藏本站
查看: 1040|回复: 0

[经验分享] keepalived 高可用集权

[复制链接]

尚未签到

发表于 2018-12-28 11:17:56 | 显示全部楼层 |阅读模式
  keepalived 高可用软件
keepalived 介绍
  keepalived 软件期初是专为LVS负载均衡软件而设计的、用来管理并监控LVS集群系统中各个服务器的节点状态、后来加入的VRRP功能。现在除了可以管理LVS之外也可以做成Nginx,Haproxy,mysql等
  keepalived 软件主要通过VRRP协议来实现高可用(思科的虚拟路由冗余协议)
Keepalived 服务的三个重要功能

  •   1、管理LVS负载均衡软件
    早期的LVS软件、需要通过命令和脚本来实现管理,并没有针对的LVS节点的健康检查功能。为了解决这和问题keepalived诞生了
  •   2、实现对LVS节点的健康检查
  •   3、作为网络服务的高可用功能
Keepalived 高可用原理
  Keepalived 高可用服务之所以能在服务器之间完成故障切换转移是通过VRRP协议来实现的。
  VRRP协议(虚拟路由冗余协议),是生成一个虚拟的可以随意切换的虚拟ip,正常请求访问这个虚拟IP,这个虚拟IP附着的服务器则提供服务,其他服务器作为备份。当服务器出现故障的时候,虚拟IP自动切换到另外一台服务器上继续提供服务。主服务器一直发送ip多播的广播包来宣告自己的“主权”,备份服务器接收这写广播包。当不在收到广播包的、更换“角色”1秒内完成。
  原理图:

  当主服务器出现问题的时候:

Keepalived 高可用搭建
安装Keepalived 环境说明
  架构图
部署基本环境
web节点服务器已经搭建好
LB01--负载均衡已经搭建完毕
  上述搭建过程参考《NGINX反向代理与负载均衡应用实战》
搭建LB02的负载均衡

  •   第一步:搭建nginx环境
过程略[root@LB02 tools]# /application/nginx/sbin/nginx -Vnginx version: nginx/1.10.3
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/application/nginx-1.10.3 --with-http_stub_status_module --with-http_ssl_module[root@LB02 tools]#

  •   第二步:配置nginx 负载均衡
拷贝LB01的配置文件到LB02上在做微调、就可以使用[root@LB02 tools]# cat /application/nginx/conf/nginx.confworker_processes  1;
events {
    worker_connections  1024;
}
http {    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream static_pools {
server 10.0.0.8:80 weight=1;
server 10.0.0.9:80 weight=1;
#check interval=3000 rise=2 fall=5 timeout=1000 type=http;
}
   upstream default_pools {
                server 10.0.0.9:80 weight=1;
        }
    server {
        listen       80;
        server_name  www.peng.com;
        location / {
       proxy_pass http://default_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location ~ .*.(gif|jpg|jpeg|png|swf|css|js|html|htm)$ {
proxy_pass http://static_pools;
proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $remote_addr;
}
#location /status {
#check_status;
#access_log off;
#}
        }
    }
[root@LB02 tools]#
[root@LB02 tools]# nginx -t
nginx: the configuration file /application/nginx-1.10.3/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.10.3/conf/nginx.conf test is successful
[root@LB02 tools]# nginx -s reload

  •   第三部:测试访问
[root@LB02 tools]# curl www.peng.com/web.htmlthe is web_nginx02 IE,www.peng.com
/application/nginx/html/www/default/default.html
[root@LB02 tools]# curl www.peng.com/web.htmlthe is web_nginx01 chrome,www.peng.com#the fine is [root@LB02 tools]#搭建Keepalived高可用环境
安装Keepalived软件--使用yum安装
  LB01 TO LB02
[root@LB01 conf]# yum -y install keepalived...Installed:  keepalived.x86_64 0:1.2.13-5.el6_6                                                                                     Dependency Installed:  lm_sensors-libs.x86_64 0:3.1.1-17.el6                         net-snmp-libs.x86_64 1:5.5-60.el6                        Complete!启动Keepalived服务
[root@LB01 /]# /etc/init.d/keepalived startStarting keepalived:                                      [  OK  ]
[root@LB01 /]# ------------------------------------------------------------------------------
[root@LB02 /]# /etc/init.d/keepalived startStarting keepalived:                                      [  OK  ]
[root@LB02 /]#  查看网卡是否都多出一个虚拟网卡
[root@LB02 /]# ip add1: lo:  mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b2:3a:f4 brd ff:ff:ff:ff:ff:ff    inet 10.0.0.101/24 brd 10.0.0.255 scope global eth0    inet 192.168.200.16/32 scope global eth0    inet 192.168.200.17/32 scope global eth0    inet 192.168.200.18/32 scope global eth0    inet6 fe80::20c:29ff:feb2:3af4/64 scope link
       valid_lft forever preferred_lft forever配置文件说明
  路径:/etc/keepalived/keepalived.conf
  配置文件分为三个区块
行号介绍Global Definitions全局定义部分VRRP instanceVRRP实例区块  默认配置文档:
[root@LB01 etc]# cat -n /etc/keepalived/keepalived.conf
     1! Configuration File for keepalived                                     #注释
     2
     3global_defs {                        #定义报警Email地址信息,在服务器发生切换的时候发送报警邮件。该模块可以有多个
     4   notification_email {     5     acassen@firewall.loc     6     failover@firewall.loc     7     sysadmin@firewall.loc     8   }     9   notification_email_from Alexandre.Cassen@firewall.loc                #指定发件人,明确使用哪个模块
    10   smtp_server 192.168.200.1                                            #指定smtp地址
    11   smtp_connect_timeout 30                                              #smtp超时时间
    12   router_id LVS_DEVEL                                                  #唯一路由标识     
    13}    14
    15vrrp_instance VI_1 {                       #VRRP实例定义区块,表示定义一个vrrp实例名称为V1_1    16    state MASTER                           #定义实例的状态,MASTER(工作状态)、BACKUP(备用状态)
    17    interface eth0                         #定义通讯接口(网卡名称)
    18    virtual_router_id 51                   #定义虚拟路由ID标识、最好为数字且全网唯一(与备份的vrrp实例的ID一样)
    19    priority 100                           #优先级、数值越大优先级越高
    20    advert_int 1                           #MASTER 与 BACKUP之间通讯检查时间间隔、单位秒
    21    authentication {                       #权限认证模块、包含认证类型和认证口令(官网建议使用类型PASS、口令为明文,建议使用4位)主备实例中通过口令来验证,才能互相通讯
    22        auth_type PASS    23        auth_pass 1111
    24    }    25    virtual_ipaddress {                     #定义虚拟IP地址,可以配置多个IP。每个ip占一行。
    26        192.168.200.16
    27        192.168.200.17
    28        192.168.200.18
    29    }    30}    31
    32virtual_server 192.168.200.100 443 {                #以下的内容均为、实例模板了,可供参考。
    33    delay_loop 6
    34    lb_algo rr    35    lb_kind NAT    36    nat_mask 255.255.255.0
    37    persistence_timeout 50
    38    protocol TCP    39
    40    real_server 192.168.201.100 443 {    41        weight 1
    42        SSL_GET {    43            url {    44              path /    45              digest ff20ad2481f97b1754ef3e12ecd3a9cc    46            }    47            url {    48              path /mrtg/    49              digest 9b3a0c85a887a256d6939da88aabd8cd    50            }    51            connect_timeout 3
    52            nb_get_retry 3
    53            delay_before_retry 3
    54        }    55    }    56}    57
    58virtual_server 10.10.10.2 1358 {    59    delay_loop 6
    60    lb_algo rr
    61    lb_kind NAT    62    persistence_timeout 50
    63    protocol TCP    64
    65    sorry_server 192.168.200.200 1358
    66
    67    real_server 192.168.200.2 1358 {    68        weight 1
    69        HTTP_GET {    70            url {
    71              path /testurl/test.jsp    72              digest 640205b7b0fc66c1ea91c463fac6334d    73            }    74            url {
    75              path /testurl2/test.jsp    76              digest 640205b7b0fc66c1ea91c463fac6334d    77            }    78            url {
    79              path /testurl3/test.jsp    80              digest 640205b7b0fc66c1ea91c463fac6334d    81            }    82            connect_timeout 3
    83            nb_get_retry 3
    84            delay_before_retry 3
    85        }    86    }    87
    88    real_server 192.168.200.3 1358 {    89        weight 1
    90        HTTP_GET {    91            url {
    92              path /testurl/test.jsp    93              digest 640205b7b0fc66c1ea91c463fac6334c    94            }    95            url {
    96              path /testurl2/test.jsp    97              digest 640205b7b0fc66c1ea91c463fac6334c    98            }    99            connect_timeout 3
   100            nb_get_retry 3
   101            delay_before_retry 3
   102        }   103    }   104}   105
   106virtual_server 10.10.10.3 1358 {   107    delay_loop 3
   108    lb_algo rr
   109    lb_kind NAT   110    nat_mask 255.255.255.0
   111    persistence_timeout 50
   112    protocol TCP   113
   114    real_server 192.168.200.4 1358 {   115        weight 1
   116        HTTP_GET {   117            url {
   118              path /testurl/test.jsp   119              digest 640205b7b0fc66c1ea91c463fac6334d   120            }   121            url {
   122              path /testurl2/test.jsp   123              digest 640205b7b0fc66c1ea91c463fac6334d   124            }   125            url {
   126              path /testurl3/test.jsp   127              digest 640205b7b0fc66c1ea91c463fac6334d   128            }   129            connect_timeout 3
   130            nb_get_retry 3
   131            delay_before_retry 3
   132        }   133    }   134
   135    real_server 192.168.200.5 1358 {   136        weight 1
   137        HTTP_GET {   138            url {
   139              path /testurl/test.jsp   140              digest 640205b7b0fc66c1ea91c463fac6334d   141            }   142            url {
   143              path /testurl2/test.jsp   144              digest 640205b7b0fc66c1ea91c463fac6334d   145            }   146            url {
   147              path /testurl3/test.jsp   148              digest 640205b7b0fc66c1ea91c463fac6334d   149            }   150            connect_timeout 3
   151            nb_get_retry 3
   152            delay_before_retry 3
   153        }   154    }   155}Keepalived单实例服务高可用实战
第一步 配置keeplived实现主服务器LB01 MASTER
  第一步:修改Keepalived的配置文件
使用简易版的Keepalived配置文件
[root@LB01 keepalived]# cat keepalived.conf! keepalived 2018.09.12global_defs {               
   router_id LVS_01                 #ID为LVS_01      }
vrrp_instance VI_1 {    state MASTER                    #设定为主服务器
    interface eth0                  #通讯接口为eth0
    virtual_router_id 50            #实例ID为50
    priority 150                    #优先级为150
    advert_int 1                    #检查时间为1秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {     10.0.0.3/24 broadcast 10.0.0.255 dev eth0 label eth0:1
    }
}
[root@LB01 keepalived]#第二步配置LB02的配置文件 backup
  使用简易版模板
[root@LB02 keepalived]# cat keepalived.conf
! keepalived 2018.09.12
global_defs {               
   router_id LVS_02         
}
vrrp_instance VI_1 {
    state BACKUP    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24 broadcast 10.0.0.255 dev eth0 label eth0:1
    }
}第三步检查IP

模拟测试、当MASTER出现故障的时候、是否会自动切换
  当停掉MASTER服务的时候、查看ip变化

  当主服务器恢复后、会再次接管IP、提供服务

小结
  主备之间的配置文件的差异
配置参数主服务器备份服务器router_id(唯一标识)router_id LV01router_id LV02state(角色)state MASTERstate BACKUPpriority(竞选优先级)priority 150priority 100

  至此Keepalived高可用搭建完成
keepaliced 高可用服务器的的“脑裂”问题
什么是“脑裂”
  由于突发原因、导致两台高可用服务器的指定时间内、无法检测到对方状态。然后各自取得资源及服务器的所有权,而此时两台高可用服务器都存活并运行,这样就导致一个IP在两端同时存在,而发生冲突。最严重两台服务器占用一个VIP,当用户写入数据的时候可能会分别写入两端,导致服务器数据不一致。
“脑裂”发生的原因
  一般有以下几种情况:
  1、线路故障


  •   心跳线故障
  •   网卡故障
  •   网络传输设备故障
  防火墙拦截(开启防火墙后、不配置放行规则会自动拦截心跳检测广播包)
配置文件错误
广播冲突、软件bug
解决“脑裂”的常见方案

  •   采用双线检测方式、避免单线故障
  •   做好监控、报警
  •   测试环境测试好了在上线上环境、不要轻易修改线上环境配置
Keepalived双实例双主模式配置
  keepalived 多实例双主模式是指:A业务是LB01上的主模式、在LB02上面是备模式。B业务在LB01上面是备模式、在LB02上面是主模式。

  将LB01上增加一个 bbs.peng.com 的备模式、在LB02上增加一个bbs.peng.com的主模式
LB01的配置
[root@LB01 keepalived]# cat keepalived.conf
! keepalived 2018.09.12
global_defs {               
   router_id LVS_01         
}
vrrp_instance VI_1 {
    state MASTER    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24 broadcast 10.0.0.255 dev eth0 label eth0:1
    }
}
vrrp_instance VI_2 {
    state BACKUP    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.5/24 broadcast 10.0.0.255 dev eth0 label eth0:2
    }
[root@LB01 keepalived]#LB02上配置
[root@LB02 keepalived]# cat keepalived.conf
! keepalived 2018.09.12
global_defs {               
   router_id LVS_02         
}
vrrp_instance VI_1 {
    state BACKUP    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.3/24 broadcast 10.0.0.255 dev eth0 label eth0:1
    }
}
vrrp_instance VI_2 {
    state MASTER    interface eth0
    virtual_router_id 100
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
     10.0.0.5/24 broadcast 10.0.0.255 dev eth0 label eth0:2
    }
[root@LB02 keepalived]#  测试过程、停掉任意一端的Keepalived服务、VIP地址会自动漂移到另外一端,不会影响访问。
配置指定文件接受 keepalived 服务日志
  默认Keepalived 的服务日志会输出/var/log/messages,和其他信息混合在一起。将其调整成独立的文件记录Keepalived服务日志。
第一步:编辑配置文件/etc/sysconfig/keepalived,将第14行的“KEEPALIVED_OPTIONS="-D"”修改为 KEEPALIVED_OPTIONS="-D -d -S 0"

  相关参数说明:

  •   -d --dump-conf    导出备份配置数据
  •   -D --log-detail   详细日志
  •   -S --log-facility     设置本地的syslog设备,编号0-7
  •   -S 0 表示指定为local0设备
第二步:修改rsyslog的配置文件/etc/rsyslog.conf,追加以下内容:

  •   在文件行尾追加
local0.*                /var/log/keepalived.log

  •   在文件第42行、末尾加入“;local0.none”
42 *.info;mail.none;authpriv.none;cron.none;local0.none                /var/log/messages第三步:重启Keepalived服务、检查日志输出
[root@LB01 log]# /etc/init.d/keepalived restart
Stopping keepalived:                                       [  OK  ]
Starting keepalived:                                       [  OK  ]
[root@LB01 log]# tail -f keepalived.log
Sep 12 02:50:22 LB01 Keepalived_healthcheckers[33491]:  SNMP Trap disabled
Sep 12 02:50:22 LB01 Keepalived_healthcheckers[33491]: ------< SSL definitions >------
Sep 12 02:50:22 LB01 Keepalived_healthcheckers[33491]:  Using autogen SSL context
Sep 12 02:50:22 LB01 Keepalived_healthcheckers[33491]: Using LinkWatch kernel netlink reflector...
Sep 12 02:50:23 LB01 Keepalived_vrrp[33492]: VRRP_Instance(VI_1) Transition to MASTER STATE解决多组Keepalived服务器在一个局域网的广播冲突问题
  当一个局域网中部署多组Keepalived服务器的时候,各自在发送付广播包的时候会造成IP广播地址冲突,造成接管错乱。Keepalived默认使用的广播地址就是224.0.0.18作为多播地址。
  解决方案: 不同的Keepalived组之间使用不用的多播地址、同组之间使用相同的多播地址
  配置如下:
global_defs {
   router_id LVS_01
   vrrp_mcast_group4 224.0.0.19}



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-656818-1-1.html 上篇帖子: keepalived编译安装 下篇帖子: 初识keepalived(一)——keepalived介绍与安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表