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

[经验分享] keepalived高可用部署

[复制链接]

尚未签到

发表于 2018-12-28 10:57:57 | 显示全部楼层 |阅读模式
keepalived介绍
  Keepalived软件期初是专为LVS负载均衡软件设计的,用来管理并监控LVS几区系统汇总各个服务节点的状态,后来油加入了可以实现高可用的VRRP功能。因此Keepalived除了能管理LVS软件外,还可以作为其他服务(例如:NginxHaproxyMysql等)的高可用解决方案软件。
  Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRPVirtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP协议出现的目的就是为了解决静态路由单点故障问题的。它能够保证当个别节点宕机时,整个网络可以不间断的运行。所以,Keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
  Keepalived软件的官方站点为http://www.keepalived.org
  
1.1 通过keepalived软件可实现的功能
1) 管理LVS负载均衡软件keep和lvs配合
2) 实现对LVS集群节点健康检查lvs没有健康检查,需要keep
3) 作为系统网络服务的高可用功能
4) 注意通过man keepalived.conf  ---获取keepalived软件功能功能说明信息
1.2 keepalived软件工作原理(如何实现一台负载坏了,keepalived自动切换
  
  vip地址将多台主机逻辑组成一台客户端访问逻辑vip地址
  VRRP协议全称是Virtual router redundancy protocol)中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由单点故障
  VRRP是用ip播的方式(默认播地址224.0.0.18)实现高可用对之间通信的
  工作时主节点发包备节点接包当备节点接收不到主节点发的数据包的时候就启动接管程序接管主节点的资源备节点可以有多个通过优先级竞选但一般keepalived系统运维工作中都是一对的
  
  
keepalived软件配置过程
1.3 环境准备说明
  主机名
  ip地址
  lb01
  10.0.0.5
  lb02
  10.0.0.6
  web01
  10.0.0.82
  web02
  10.0.0.83
  web03
  10.0.0.9
1.4 web集群服务器配置文件环境web01,web02,web03配置均一致
1.4.1 web集群配置如下
  1.web01 web02 web03 配置相同
  [root@ks_web01 conf]# vim nginx.conf
  worker_processes  1;
  events {
      worker_connections  1024;
  }
  http {
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
  
      server {
      listen       80;
      server_name  bbs.etiantian.org;
      root   html/bbs;
      index  index.html index.htm;
      access_log   logs/www_access.log main;
  }
  server {
      listen       80;
      server_name  www.etiantian.org;
      root   html/www;
      index  index.html index.htm;
      access_log   logs/www_access.log main;
  }
  }
  
  同步web02上的配置文件
  同步web03上的配置文件
scp -rp /application/nginx/conf/nginx.conf 172.16.1.8:/application/nginx/conf/nginx.conf

  scp -rp /application/nginx/conf/nginx.conf 172.16.1.9:/application/nginx/conf/nginx.conf
  
  测试结果:
  [root@bl01 conf]# curl -H host:www.etiantian.org 10.0.0.83/bingbing.html
  www web02
  [root@bl01 conf]# curl -H host:www.etiantian.org 10.0.0.82/bingbing.html
  www web01
1.4.2 nginx反向代理负载均衡集群服务器配置文件环境统一
  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;
          }
      }
  }
  
  
  同步bl02 的nginx.conf配置文件
  [root@bl01 conf]# scp -rp nginx.conf 172.16.1.6:/application/nginx/conf/nginx.conf
  172.16.1.6:/application/nginx/conf/nginx.conf
  测试访问bl01和bl02实现负载均衡:
  [root@bl01 conf]# curl -H host:www.etiantian.org 10.0.0.5/bingbing.html
  [root@bl01 conf]# curl -H host:www.etiantian.org 10.0.0.6/bingbing.html
                                                                      
部署Keepalived软件
1.5 keepalived软件安装部署
  1. keepalived软件安装部署
  ### lb01 lb02负载服务器上均安装
  yum install -y keepalived
  rpm -qa keepalived
  
  keepalived包含的主要配置:
  [root@lb01 conf]# rpm -ql keepalived
  /etc/keepalived                     --- keepalived主目录
  /etc/keepalived/keepalived.conf            --- keepalived服务主配置文件
  /etc/rc.d/init.d/keepalived            --- keepalived服务启动脚本文件
  
  2. 进行默认配置测试
  ### 启动lb01 lb02的keepalived服务
  /etc/init.d/keepalived start
  [root@lb01 nginx]# ip a
  说明:存在默认配置虚IP地址信息
        通过抓包可以看到vrrp数据包信息
  
1.5.1 配置文件说明
  ### 前提需要了解配置文件内容信息(man keepalived.conf)
  ### 配置文件的组成部分
  · GLOBAL CONFIGURATION  ###全局定义(默认配置文件的01-13行)
  · VRRPD CONFIGURATION   ###虚拟ip的配置(默认配置文件15-30行)
  · LVS CONFIGURATION     ###配置与管理lvs
  
  ! Configuration File for keepalived   ——注释信息
  ====================================================================================
  global_defs {                     --- 全局配置标题
     notification_email {               --- 定义管理员邮箱信息,
       976060283@qq.com   
       976060283@qq.com
     }
     notification_email_from oldboy@163.com    --- 定义利用什么邮箱发送邮件(如:163)
     smtp_server smtp.163.com           --- 定义邮件服务器信息
     smtp_connect_timeout 30            --- 定义邮件发送超时时间
     router_id oldboy01                 --- (重点参数)局域网keepalived主机身份标识信息
                                   #每一个keepalived主机身份标识信息唯一
  }
  ====================================================================================
  vrrp_instance VI_1 {              --- vrrp协议相关配置(vip地址设置)
      state MASTER                  --- keepalived角色描述(状态)信息,可以配置参数(MASTER BACKUP)
      interface eth0                --- 表示将生成虚IP地址,设置在指定的网卡上(一般为外网卡)
      virtual_router_id 51          --- 表示keepalived家族标识信息
      priority 100                  --- keepalived服务竞选主备服务器优先级设置(越大越优先)
      advert_int 1                  --- 主服务组播包发送间隔时间      
      authentication {              --- 主备主机之间通讯认证机制,
          auth_type PASS            --- 采用明文认证机制
          auth_pass 1111            --- 编写明文密码(用于主备认证)
      }
      virtual_ipaddress {           --- 设置虚拟IP地址信息
          10.0.0.3
      }
  }
  
1.5.2 搭建基础的keepalived配置文件
  #lb01 的配置:
  global_defs {
     router_id lb01
  }
  
  vrrp_instance oldboy_43 {
      state MASTER
      interface eth0
      virtual_router_id 43
      priority 150
      advert_int 1             ——必须与备服务器保持一致
      authentication {
          auth_type PASS
          auth_pass 6666
      }
      virtual_ipaddress {
         10.0.0.3
      }
  }
  
  虚拟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 lb02
  }
  
  vrrp_instance oldboy_43 {
      state BACKUP
      interface eth0
      virtual_router_id 43
      priority 100
      advert_int 1                        ——必须与主服务器保持一致
      authentication {
          auth_type PASS
          auth_pass 6666
      }
      virtual_ipaddress {
         10.0.0.3
      }
  }
  
  说明:主备服务器配置文件区别
        01. router_id     不同
        02. state BACKUP  不同
        03. priority      不同
  说明:进行抓包观察配置效果;并且对比两个负载均衡服务器的配置文件
  
1.5.3 主备服务器都启动keepalived服务
  [root@bl01 conf]# /etc/init.d/keepalived start
  Starting keepalived:                                       [  OK  ]
  [root@bl02 conf]# /etc/init.d/keepalived start
  Starting keepalived:                                       [  OK  ]
  /etc/init.d/keepalived restart   ——重启
  /etc/init.d/keepalived stop    ——停止
  /etc/init.d/keepalived reload   ——重新加载(如果服务stop后,reload是起不来的)
1.5.4 裂脑概念,原因,解决方法
  
  

  
  
  ===========================================================================================
  编写脚本解决脑裂:
  编写脚本的思路:
  # 如何进行监控脑裂情况?
# 01. 在什么服务器上进行监控?
# 在备服务器上进行监控
# 02. 监控什么信息?
# 备上面出现vip(虚ip情况
1) 脑裂情况会出现
  2) 正常主备切换也会出现
  ===========================================================================================
  方法一:
  #!/bin/bash
  IP_info=$(ip a|grep -c eth0)
  
  while true
  do
  if [ $IP_info -gt 2 ]
  then
    echo "keepalived error!!!"
  fi
  sleep 3;
  done
  ===================================================================================
  方法二:
  #!/bin/bash
  #desc: jiankong lb02 vip
  if [ `ip a s eth0 |grep -c "10.0.0.3"` == 1 ];then
     echo "baojing"
  fi
1.6 拍错过程思路(最小化拍错)
  拍错过程:
  1. 利用负载均衡服务器,在服务器上curl所有节点信息
  2. curl负载均衡服务器地址,可以实现负载均衡
  3. windows绑定虚拟ip,浏览器上进行测试
  
  查看keepalived日志文件
  tail -f /var/log/messages
  
  PS:所有服务通用拍错方法:
1. 对服务非常了解
2. 没有办法的解决办法
     01. 重启服务
     02. 重新部署
     03. 重装系统
1.7 更改nginx反向代理只监听vip地址
  #提高安全性
  通过nginx反向代理只监听vip地址不监听物理地址
  通过修改配置文件监听窗口,lb02k无法监听(没有vip需要修改内核文件
  
  # 更改nginx反向代理只监听vip地址
  10.0.0.3
  
  第一个里程碑:修改反向代理服务配置文件,只监听vip地址
  ####lb01 lb02  nginx.conf  1 和2 都配置监听地址)
  vim 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;
          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;
          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@lb02 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
  说明:nginx 没有办法监听本地不存在的vip地址
  
  解决方法:
  方法一:echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf   ---实现监听本地不存在的vip地址
  ##/etc/sysctl.conf 加上
  sysctl -p
  方法二: echo "1" >/proc/sys/net/ipv4/ip_nonlocal_bind
  
  第三个里程碑:进行测试
  curl -H host:www.etiantian.org 10.0.0.3/bingbing.html
  
  web403报错原因:
01 服务端阻止客户端访问
02 服务端首页文件不存在
  
1.8 keepalived监控nginx反向代理服务
  ###vip什么时候 什么条件 才会飘走 ?
  1.当服务器宕机
  2.防火墙
  
  #### nginx挂了
  如何让keepalived监控nginx nginx挂了,keepalived跟着殉情
  
  ####第一个里程碑-keepalived监控nginx条件
   1.如何nginx挂了---我如何知道nginx挂了?
   1)端口
   2)进程
  netstat -lnptu|grep nginx|wc -1
   如果统计结果不等于1,说明nginx没起来  
   那么就 /etc/init.d/keepalived stop
  
   ##>  -gt    greater than  
   ##>= -ge    greater equal
   ##<  -lt    less than
   ##

运维网声明 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-656801-1-1.html 上篇帖子: 节省公网ip keepalived 另类用法 下篇帖子: Memcached高可用群集(Memcached主主复制+Keepalived)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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