下面说的是lvs高可用集群


一、高可用集群

1、负载均衡

负载均衡的三种会话保持:session sticky、session replication、session server。

          三种共享存储:NAS、SAN、DS。


在lvs-nat中,调度器放在路由和核心层之间;

在lvs-dr中,调度器连接分布层、接入层。


隔离(fence)设备:电源交换机


2、VRRP协议 -----------实现高可用集群,实现浮动路由,故障倒换

keepalived --------------高可用lvs集群的实现方式,可用于后端服务器检查

corosync + pacemaker --------实现高可用集群


master选择:优先级相同,比较IP地址,IP地址大的为master。


(1)、vrrp协议基础

虚拟路由器:虚拟路由器接口

VRID:虚拟路由器标识符。功能:描述路由器的分组情况、确定该分组的MAC地址。

master:虚拟IP的拥有者,能够完成数据转发的路由器

backup:检测master路由器状态

VIP:虚拟路由器的IP地址,拥有VIP的就是master

VMAC:虚拟MAC地址

优先级:选举master的参数,范围:0-255,越大优先级越高。

  优先级 0:放弃选举master

  优先级 255:虚拟IP地址的拥有者的优先级

抢占式:设备恢复后,要抢占原来的master主动权。

非抢占式:设备恢复后,不抢占master主动权,选择做备份。


(2)、vrrp协议工作模式、认证方式

VRRP的工作模式:单实例、多实例。

单实例:master/backup

多实例:一个实例上是master,在另一个实例上是backup。--------------负载分担


VRRP的认证方式:无认证、简单字符认证、md5认证。



二、keepalived

1、keepalived基础:

keepalived:----------------VRRP协议在Linux中的软件实现

  keepalived目的是,实现高可用的ipvs服务,简称ka。


keepalived功能:

  1).可为VIP地址的节点,自动生成ipvs规则;

  2).可为RS进行健康状态检查;

  3).可以调用脚本;


keepalived的组件:控制板、内存管理、I/O复用器、核心组件。

  核心组件:

  checker:第二核心

  VRRP stack:第一核心

  smtp:状态转换信息发送到邮箱

  watch dog:看门狗,匹配checker和VRRP stack

  ipvs wrapper:内核与用户空间交互

  netlink reflactor:内核与用户空间交互


高可用前提:

  1).节点间,时间同步

  2).节点间,通过主机名互相通信

  3).节点间,关闭防火墙、设置规则

  4).各节点间,root用户基于ssh的秘钥认证互相通信


2、keepalived配置文件

instance:实例


# ntpdate IP -------------对主机进行系统时间与网络同步

# vi /ect/ntp.conf


(1)、keepalived的程序环境:

  主配置文件:/etc/keepalived/keepalived.conf

  主程序文件:/usr/sbin/keepalived

  Unit File:keepalived.server


(2)、主配置文件:/etc/keepalived/keepalived.conf

  包括以下两段:

 

GLOBAL CONFIGURATION
  VRRPD CONFIGURATION
  LVS CONFIGURATION
  
  1)------------------GLOBAL CONFIGURATION--------------------------
    Global definitions
      global_defs
      {
      notification_email  
        {
          root@localhost ---------接收方邮件地址
        }
      notification_email_from keepalived@localhost -----------发送方邮件地址
      smtp_server 127.0.0.1 -------邮件服务器地址
      router_id drct1  ---------设置路由器ID,区分不同组
      vrrp_mcast_group4 224.100.100.18 -------------IPv4组播地址
      }


  2)------------------------VRRPD CONFIGURATION---------------------------------

   

VRRP synchronization group(s)
    VRRP instance(s)

    vrrp_instance inside_network { ----------定义实例
      state MASTER ------------指定vrrp状态
      interface eno16777736 --------------与vrrp协议绑定的端口
      virtual_router_id 51 ----------------虚拟路由IP,确定组
      priority 100  ---------------节点优先级
      advert_int 1  ------------vrrp通告的时间间隔
      authentication {
        auth_type PASS  ----------密码验证方式
        auth_pass Hudlnej7 ----------设置密码
      }
      virtual_ipaddress {
        172.16.72.101/32 brd 172.16.72.101 dev eno16777736 label eno16777736:0 -------虚拟IP地址
      }
      nopreempt ----------非抢占模式
      preempt_delay 300 -------------抢占开始前时间
      notify_master <STRING>|<QUOTED-STRING> ------------状态改变时的触发参数
      notify_backup <STRING>|<QUOTED-STRING>
      notify_fault <STRING>|<QUOTED-STRING>
    }


  3)--------------------------LVS CONFIGURATION--------------------------------

   

Virtual server group(s)
    Virtual server(s)

    Virtual server vip vport|fwmark <INT> {
      delay_loop <INT> --------------服务轮询间隔
      lb_algo rr|wrr|lc|wlc|lblc|sh|dh -------------lvs调度算法
      lb_kind NAT|DR|TUN ------------lvs服务类型
      persistence_timeout <INT> ------------------持久连接超时时间
      protocol TCP ------------服务协议
      sorry_server <IPADDR> <PORT> -----------所有RS不可用时,的错误提示
      real_server <IPADDR> <PORT> { -------------添加RS
        weight <INT> -------------RS权重
        notify_up <STRING>|<QUOTED-STRING> -------------RS状态
        notify_down <STRING>|<QUOTED-STRING>
        HTTP_GET|SSL_GET {
            url {
              path <STRING> ------------后端健康检查的URL
              digest <STRING>  ------------检测md5是否发生变化
              status_code <INT> ------------据状态码校验RS可靠性
            }
          
            nb_get_retry <INT> ------------重试次数
            delay_before_retry <INT> -------------重试前的延时
            connect_ip <IP ADDRESS> ----------检测RS的哪一个IP地址
            connect_port <PORT>  ---------------检测的第二个端口
            bindto <IP ADDRESS> -------------健康检测源IP地址
            bind_port <PORT> ------------健康检测源端口
            connect_timeout <INTEGER> ------------超时时长
        }
        
        TCP_CHECK {
            connect_ip <IP ADDRESS> //向当前的RS的哪个IP地址发起健康状态检测请求;
            connect_port <PORT>  //向当前的RS的那二个PORT发起健康状态检测请求;
            bindto <IP ADDRESS> //发出健康检测时的源IP地址;
            bind_port <PORT> //发出健康检测时的源端口;
            connect_timeout <INTEGER> //连接超时时长;
        }
    }


3、keepalived调用外部辅助脚本(2步)

(1)、vrrp_instance【之前】

vrrp_script SCRIPT_NAME {
  script ""
  interval <INT> -----------间隔
  weight -<INT>
}


(2)、vrrp_instance【之中】

track_script {
  SCRIPT_NAME
}


转载于:https://blog.51cto.com/12496428/1977302