下面说的是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 | ------------状态改变时的触发参数

      notify_backup |

      notify_fault |

    }


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

    Virtual server group(s)

    Virtual server(s)


    Virtual server vip vport|fwmark {

      delay_loop --------------服务轮询间隔

      lb_algo rr|wrr|lc|wlc|lblc|sh|dh -------------lvs调度算法

      lb_kind NAT|DR|TUN ------------lvs服务类型

      persistence_timeout ------------------持久连接超时时间

      protocol TCP ------------服务协议

      sorry_server -----------所有RS不可用时,的错误提示

      real_server { -------------添加RS

        weight -------------RS权重

        notify_up | -------------RS状态

        notify_down |

        HTTP_GET|SSL_GET {

            url {

              path ------------后端健康检查的URL

              digest  ------------检测md5是否发生变化

              status_code ------------据状态码校验RS可靠性

            }

          

            nb_get_retry ------------重试次数

            delay_before_retry -------------重试前的延时

            connect_ip ----------检测RS的哪一个IP地址

            connect_port  ---------------检测的第二个端口

            bindto -------------健康检测源IP地址

            bind_port ------------健康检测源端口

            connect_timeout ------------超时时长

        }

        

        TCP_CHECK {

            connect_ip //向当前的RS的哪个IP地址发起健康状态检测请求;

            connect_port  //向当前的RS的那二个PORT发起健康状态检测请求;

            bindto //发出健康检测时的源IP地址;

            bind_port //发出健康检测时的源端口;

            connect_timeout //连接超时时长;

        }

    }


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

(1)、vrrp_instance【之前】

vrrp_script SCRIPT_NAME {

  script ""

  interval -----------间隔

  weight -

}


(2)、vrrp_instance【之中】

track_script {

  SCRIPT_NAME

}