第十七章 Linux集群架构(一)

一、 集群介绍
二、 keepalived介绍
三、 用keepalived配置高可用集群
四、 负载均衡集群介绍
五、 LVS介绍
六、 LVS调度算法
七、 LVS NAT模式搭建

 

一、 集群介绍

集群功能划分:
1:高可用:
    高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务。
    实现高可用的开源软件有:heartbeat、keepalived

2:负载均衡
    负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2。
    实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx

    商业的有F5、Netscaler 
 

二、 keepalived介绍

keepalived是实现高可用的一种轻量级的技术手段,主要用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。

1.keepalived通过VRRP(Virtual Router Redundancy Protocl)来实现高可用。

2.在VRRP协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。

3.master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。

4.Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。

 

三、 用keepalived配置高可用集群

实验环境准备:

需要准备两台虚拟机,分别都装上nginx。 注意:克隆的虚拟机需要将网卡配置文件中的UUID删除掉,否则会有冲突。

此次实验的环境是两台CentOS7.3系统的虚拟机

主(Master):

是之前做LNMP实验时的系统,里面已经装好了nginx

主机名:Linux01

IP:192.168.239.128

关闭防火墙和selinux

从(Backup) :

克隆的主系统,CentOS7.3系统

主机名:mysql-slave

IP:192.168.239.138

关闭防火墙和selinux


nginx+keepalived高可用安装过程:

主(Master)配置:

1. 在主(Master)和从(Backup)上都安装nginx和keepalived

[[email protected] ~]# yum install -y keepalived
[[email protected] ~]# yum install -y keepalived
2. 编辑主(Master)上keepalived的配置文件

内容参考:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf

[[email protected] ~]# vim /etc/keepalived/keepalived.conf   //删除之前的内容,或者备份,把参考里的复制进来,修改虚拟IP为100

第十七章 Linux集群架构(一)

3. 新建监控脚本

内容参考:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh
[[email protected] ~]# vim /usr/local/sbin/check_ng.sh

第十七章 Linux集群架构(一)

授予脚本755权限

[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh
[[email protected] ~]# ls -l /usr/local/sbin/check_ng.sh 

第十七章 Linux集群架构(一)
4. 启动主(Master)上的keepalived

[[email protected] ~]# systemctl start keepalived.service 
[[email protected] ~]# ps aux | grep keepalived
第十七章 Linux集群架构(一)

keepalived配置文件说明:
# 1:全局定义 global definitions 部分
global_defs {
   notification_email {
    [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   #前面是定义邮件相关的配置,当出现故障时可以给指定的邮箱发送邮件
   #下面这一行是定义服务器的路由标识的,在同一局域网内这个表示是唯一的
   router_id LVS_DEVEL  
} #大括号用来分隔去看,需要成对出现,如果漏掉了也不会出错,但是得不到想要的结果

# 2:检测模块,可以通过制定的脚本来检测对应的服务是否正常
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"  # 指定自定义检测nginx服务的脚本
    interval 3 # 检测的间隔时间
}

# 3:VRRP实例定义区块
# 这部分主要用来定义具体服务去实例配置,包括Keepalived主备状态、接口、优先级、认证方式和IP等信息。
vrrp_instance VI_1 {
# 上面这行定义了一个vrrp_instance实例,名字是VI_1,MASTER和BACKUP的实例名必须相同,可以定义多个实例
    state BACKUP  
    # state表示当前实例的状态,MASTER为正式工作状态,BACKUP为备用状态。
    interface ens33
    # interface :指定网卡名称,CentOS一般都是ens开头
    virtual_router_id 51
    # virtual_router_id 表示虚拟路由ID表示,这个表示最好是一个数字,
    # 如果一个配置文件中有多个vrrp_instance实例,则不能出现相同的vrtual_router_id,
    # 但是MASTER和BACKUP配置中相同实例的virtual_router_id必须一致,否则会出现脑裂问题。
    priority 90
    # priority 为优先级,指定的数字越大,表示实例的优先级越高,
    # 在同一个vrrp_instance实例中 MASTER的优先级配置要高于BACKUP
    advert_int 1
    # advert_int 为同步通知间隔。MASTER与BACKUP之间通信检查的时间间隔,单位为妙,默认为1

    authentication { 
    # authentication 为权限认证配置块,包含认证类型,和认证密码
        auth_type PASS
        # auth_type 为认证类型,有PASS和AH两种认证类型,一般使用PASS,验证密码为明文的方式
        auth_pass wenyang>com
        # auth_pass  指定认证的密码, BACKUP必须和MASTER一致才能通信
    }
    virtual_ipaddress {
    # virtual_ipaddress 虚拟IP地址配置,通常称之为VIP。可以配置多个IP
    # 每个IP占一行,这里的虚拟IP就是在工作中需要和域名绑定的IP。
    # 即和配置对应的高可用服务监听的ip要保持一致(这里的高可用服务是Nginx 也可以是其他服务)
        192.168.239.100
        # 指定的虚拟ip
    }

    track_script {  #加载指定的服务检测区块。
        chk_nginx
    }
}
 

从(Backup)配置:

1. 编辑从(Backup)上的配置文件

内容参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf

[[email protected] ~]# vim /etc/keepalived/keepalived.conf

 //删除之前的内容,或者备份,把参考里的复制进来,修改虚拟IP为100

第十七章 Linux集群架构(一)

2. 新建监控脚本

内容参考https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh

[[email protected] ~]# vim /usr/local/sbin/check_ng.sh

第十七章 Linux集群架构(一)

授予脚本755权限

[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh

[[email protected] ~]# ls -l /usr/local/sbin/check_ng.sh
第十七章 Linux集群架构(一)
4. 启动从(Backup)上的keepalived

[[email protected] ~]# systemctl start keepalived

[[email protected] ~]# ps aux | grep keepalived

 

测试:

将nginx默认主页的内容修改为各自的ip,便于在做实验时区分是哪台机器在工作

主:

[[email protected] ~]# cat /usr/local/nginx/conf/vhost/aaa.com.conf  //在nginx虚拟主机里查看默认主机及默认页面

[[email protected] ~]# echo '192.168.239.138'>/data/wwwroot/www.default.com/index.html
第十七章 Linux集群架构(一)

从:

[[email protected] ~]# cat /data/wwwroot/www.default.com/index.html
[[email protected] ~]# echo '192.168.239.138'>/data/wwwroot/www.default.com/index.html
第十七章 Linux集群架构(一)

测试1.关闭主(master)上的nginx服务

[[email protected] ~]# /etc/init.d/nginx stop
第十七章 Linux集群架构(一)

因为监控脚本有写自动重启的指令,所以手工重启后监控脚本又自动把nginx服务开启了。

测试2. 在主(master)上增加iptabls规则(开启防火墙,添加规则,主备上都做)

[[email protected] ~]# systemctl start firewalld
[[email protected] ~]# iptables -I OUTPUT -p vrrp -j DROP

第十七章 Linux集群架构(一)

此时keepalived是正常的,虚拟ip(公有IP)在主、从上都有绑定,但是访问到的还是主的默认页面,不能达到切换资源的目的。

测试3. 关闭主(master)上的keepalived服务

[[email protected] ~]# systemctl stop keepalived.service

第十七章 Linux集群架构(一)

达到资源切换的目的。

测试4. 重新启用主(master)上的keepalived服务

[[email protected] ~]# systemctl start keepalived.service

第十七章 Linux集群架构(一)

查看主从的日志:

[[email protected] ~]# tail /var/log/messages
第十七章 Linux集群架构(一)

[[email protected] ~]# tail /var/log/messages
第十七章 Linux集群架构(一)

在切换过程存在延时,并且VIP在主、从之间漂移。