samdung 发表于 2018-12-28 10:57:57

keepalived高可用部署

keepalived介绍
  Keepalived软件期初是专为LVS负载均衡软件设计的,用来管理并监控LVS几区系统汇总各个服务节点的状态,后来油加入了可以实现高可用的VRRP功能。因此Keepalived除了能管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、Mysql等)的高可用解决方案软件。
  Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual 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系统运维工作中都是一对的。
  http://s1.运维网.com/images/20180212/1518448053328270.png
  
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 配置相同
  # vim nginx.conf
  worker_processes1;
  events {
      worker_connections1024;
  }
  http {
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
  
      server {
      listen       80;
      server_namebbs.etiantian.org;
      root   html/bbs;
      indexindex.html index.htm;
      access_log   logs/www_access.log main;
  }
  server {
      listen       80;
      server_namewww.etiantian.org;
      root   html/www;
      indexindex.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
  
  测试结果:
  bl01 conf]# curl -H host:www.etiantian.org 10.0.0.83/bingbing.html
  www web02
  bl01 conf]# curl -H host:www.etiantian.org 10.0.0.82/bingbing.html
  www web01
1.4.2 nginx反向代理负载均衡集群服务器配置文件环境统一
  worker_processes1;
  events {
      worker_connections1024;
  }
  http {
      include       mime.types;
      default_typeapplication/octet-stream;
      sendfile      on;
      keepalive_timeout65;          
      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配置文件
  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实现负载均衡:
  bl01 conf]# curl -H host:www.etiantian.org 10.0.0.5/bingbing.html
  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包含的主要配置:
  # 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
  # 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服务
  bl01 conf]# /etc/init.d/keepalived start
  Starting keepalived:                                       
  bl02 conf]# /etc/init.d/keepalived start
  Starting keepalived:                                       
  /etc/init.d/keepalived restart   ——重启
  /etc/init.d/keepalived stop    ——停止
  /etc/init.d/keepalived reload   ——重新加载(如果服务stop后,reload是起不来的)
1.5.4 裂脑概念,原因,解决方法
   http://s1.运维网.com/images/20180212/1518448168342945.png
  http://s1.运维网.com/images/20180212/1518448180873824.png

  http://s1.运维网.com/images/20180212/1518448190788558.png
  
  ===========================================================================================
  编写脚本解决脑裂:
  编写脚本的思路:
  # 如何进行监控脑裂情况?
# 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 lb02nginx.conf(1 和2 都配置监听地址)
  vim nginx.conf
  worker_processes1;
  events {
      worker_connections1024;
  }
  http {
      include       mime.types;
      default_typeapplication/octet-stream;
      sendfile      on;
      keepalive_timeout65;
      log_formatmain'$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_loglogs/access_www.logmain;
  }
      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_loglogs/access_blog.logmain;
  }
  }
  说明(安全性问题):在修改反向代理服务器配置文件监听地址时,多个server都需要配置监听地址,否则仍旧使用默认监听所有
  
  
  第二个里程碑:lb02上不存在vip地址,无法监听,解决方法:需要修改内核文件(见下面)
  2 conf]# /application/nginx/sbin/nginx -t
  nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
  nginx: 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]
查看完整版本: keepalived高可用部署