keepalived(第32天)

Linux集群类型:LB+HA+HP
LB(负载均衡): LVS,nginx
HA:高可用集群,keepalived(轻量化), heartbeat, corosync, cman
HP:高性能集群


分布式存储:HDFS(Hadoop Distributed  File System)
分布式计算:YARN,
batch: MapReduce
in-memory(基于内存): spark
stream(流式): storm

实现高可用集群涉及的理论知识:

Acitve/Passive:分别表示活动节点和备用节点


resource:表示高可用集群中的资源
HA Service:表示多个resources组合提供高可用服务


备用节点必须实时监控活动节点的状态,一旦备用节点发现活动节点出现问题,就抢夺活动节点的资源,比如IP地址。
活动节点主动向所有的备用节点通告自己的状态。如果备用节点检查该通告发现活动节点是非alive的,则备用节点就抢夺资源,然后备用节点提供服务,而原先的活动节点改变为备用节点。

如何设计通告机制?
多个备用节点放置在一个多播域中。


备用节点和活动节点的时间同步必须严格一致。可以使用NTP协议,网络时间协议。




两台LAMP主机对于结构化数据和非结构化数据的读写问题:
假设数据是独立存储的(要共享给两台LAMP主机),两台LAMP主机对于mysql数据库的读写不会出现问题,因为mysql有并发读写控制。但是这两个主机对于非结构化的数据的读写,会出现同步的问题,比如第一个主机的进程对某个文件写第一行,而另一个主机的进程对该文件删除第一行。
所以可以使用分布式文件系统,分布式文件系统一般提供有对资源和文件的并发访问控制

总结:高可用集群要解决好抢夺IP地址和存储的问题。





VRRP协议:
keepalived是vrrp协议的实现
virtual route redundent protocol,虚拟路由冗余协议。
(路由器设备跑的系统一般是精简的freeBSD,linux等)
准备两个路由器,只有一个是工作状态的,并且处于工作状态的路由器一直发送心跳到备用节点,可以设置某个周期内,如果备用节点没有收到心跳,则备用节点获取IP,变成活动节点。
虚拟路由器:就是多个物理路由器合并组成,这些路由器有1个Master路由器和多个Backup路由器。每一个虚拟路由都有一个VRID来标识,有相同VRID的一组路由器共同构成一个虚拟路由器。
Master路由器/Backup路由器
虚拟IP地址:给虚拟路由器配置的IP地址。
IP地址拥有者:接口IP地址与虚拟IP地址相同的路由器称为IP地址拥有者,一般就是master路由器
虚拟mac地址:一个虚拟路由有一个虚拟mac地址。格式为00-00-5E-00-01-(VRID)
优先级:vrrp根据优先级来确定虚拟路由器中每台路由器的地位。
非抢占式:
抢占式:





keepalived:是vrrp协议在linux主机上以守护进程方式的实现
能够根据配置文件自动生ipvs规则
对各个RS做健康状态检测
组件如下:
vrrp stack(vrrp协议栈)
checkers (健康状态监测)
ipvs wrapper--》ipvs

keepalived的使用:
安装:yum install keepalived -y


keepalived的配置文件/etc/keepalived/keepalived.conf组成部分:
global_configuration  表示全局配置
vrrpd_configuration   vrrpd守护进程配置
    vrrp instance              vrrp实例
    vrrp synchonization group
LVS_configuration


HA Cluster配置前提:如下3点
1、本机的主机名,要与hostname(或者uname -n)获得的名称保持一致;
CentOS 6设置主机名: /etc/sysconfig/network
CentOS 7设置主机名: hostnamectl set-hostname HOSTNAME

各节点要能互相解析主机名;一般建议通过hosts文件进行解析;

2、各节点时间同步;

3:确保iptables和selinux不影响该服务

virtual_ipaddress的配置:         
virtual_ipaddress {
<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
    192.168.200.17/24 dev eth1
     192.168.200.18/24 dev eth2 label eth2:1
}

nopreempt:非抢占模式;默认为抢占模式;


vrrp_sync_group VG_1 {
            group {
             VI_1   # name of vrrp_instance (below)
             VI_2  # One for each moveable IP.
           }
}


vrrp_instance VI_1 {
            eth0
            vip
}

vrrp_instance VI_2 {
            eth1
            dip
}


实验步骤如下:
1:配置2台主机,假设分别为172.16.100.67和172.16.100.68,配置两台主机的/etc/hosts文件使之可以通过主机名相互解析。
比如两台主机的/etc/hosts文件都有如下的内容:
172.16.100.67  node1.magedu.com  node1
172.16.100.68  node2.magedu.com  node2
2:使两台主机时间同步
      两台主机使用该命令做时间同步  ntpdate  0.debian.pool.ntp.org
3:确保iptables和selinux不影响该服务
4:两台主机安装keepalived      yum -y install keepalived
5:172.16.100.67的 /etc/keepalived/keepalived.conf配置文件:
global_defs {
    notification_email {
         root@localhost
    }
    notification_email_from  kaadmin@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id node1.magedu.com
    vrrp_mcast_group4 224.18.0.100  # 组播地址
}

vrrp_instance VI_1{   #vrrp实例的配置
    state MASTER  #只有MASTER和BACKUP
    interface eth0      #VIP配置到这个网卡设备上
    virtual_router_id  51   #VRID
    priority 100   #优先级
    adver_int 1   #发送自己的心跳通告的间隔时间
    authentication {     #认证信息
            auth_type PASS    #简单字符认证
            auth_pass  5566xxoo   #认证密码
 
    }
    virtual_ipaddress {     #VIP地址,虚拟IP地址
        172.16.100.80/16 dev eth0 label eht0:0   #这个地址是会根据情况流动到上面的vrrp实例定义中的eth0接口上的
    }
}
6:  172.16.100.68的 /etc/keepalived/keepalived.conf配置文件:
global_defs {
    notification_email {
         root@localhost
    }
    notification_email_from  kaadmin@localhost
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id node2.magedu.com
    vrrp_mcast_group4 224.18.0.100  # 组播地址
}

vrrp_instance VI_1{   #vrrp实例的配置
    state BACKUP  #只有MASTER和BACKUP
    interface eth0      #VIP配置到这个网卡设备上
    virtual_router_id  51   #VRID
    priority 99   #优先级
    adver_int 1   #发送自己的心跳通告的间隔时间
    authentication {     #认证信息
            auth_type PASS    #简单字符认证
            auth_pass  5566xxoo   #认证密码
 
    }
    virtual_ipaddress {     #VIP地址,虚拟IP地址
        172.16.100.80/16 dev eth0 label eht0:0   #这个地址是会根据情况流动到上面的vrrp实例定义中的eth0接口上的
    }
7: 在两台主机启动keepalived服务
    systemctl start keepalived.service



总结:
1、如何开启keepalived的日志?(systemctl status keepalived.service  可以查看keepalived的日志)
2、如果有多个vrrp_instance, 每个vrrp_instance需要设置自己专用的组播地址vrrp_mcast_group4 224.18.0.100;



keepalived: 是vrrp协议的实现;
虚拟路由器有MASTER,BACKUP
VI:Virtual Instance


keepalived配置文件keepalived.conf组成部分:
        GLOBAL
        VRRP
        LVS




keepalived(第2部分):
在vrrp_instance中的主机状态发生改变时发送通知:
        # notify scripts, alert as above
           notify_master <STRING>|<QUOTED-STRING>   #切换为master时候,触发
           notify_backup <STRING>|<QUOTED-STRING> #切换为backup时候,触发
           notify_fault <STRING>|<QUOTED-STRING>  #fault失败时候,触发
           notify <STRING>|<QUOTED-STRING>
           smtp_alert


nginx作为反向代理服务器的高可用(使用keepalived实现高可用)
keepalived 配置在2台nginx反向代理服务器中:
1:配置172.16.100.6和172.16.100.69为upstream服务器(真正提供服务的real server,可以通过yum -y install httpd安装httpd服务)
2:配置172.16.100.67和172.16.100.68为nginx反向代理服务器(这2个服务器中要配置nginx为反向代理服务器,yum -y install nginx  安装nginx,然后在配置文件nginx.conf中的http配置段中配置upstream指令,指定upstream服务器,
upstream webservs {
    server 172.16.100.6:80 weight=1;
    server 172.16.100.69:80 weight=1;

},在location指令中定义proxy_pass指令),
location / {
   proxy_pass http://webservs/;
}
配置完成使用nginx -t检查语法是否有错误,systemctl  start nginx.service启动nginx。
在这两台主机中安装好keepalived,并启动systemctl  start keepalived.service





























评论

此博客中的热门博文

OAuth 2教程

网格策略

apt-get详细使用