Linux集群介绍及配置高可用集群

1.Linux集群介绍

根据功能划分为两大类:高可用和负载均衡;

高可用:高可用集群即“HA集群”,也常称作“双机热备”,用于关键业务。通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务,实现高可用的开源软件有:heartbeat、keepalived,核心原来都是通过心跳线连接两台服务器;

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

2.Keepalived介绍

因为heartbeat软件已经在2010年就停止了更新,所以一般建议使用keepalived来实现HA集群。

       Keepalived通过VRRP(Virtual Router Redundancy Protocl)来实现高可用。VRRP是虚拟路由器冗余协议,广泛应用于边缘网络中,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以及及时在第一跳路由器使用失败的情形下,仍能够维护路由器间的连通性。

       在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。
       Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析>,check模块负责健康检查,vrrp模块用来实现VRRP协议。

3.Keepalived+Nginx实现Web高可用

首先准备两台机器128和130,128用作master,130用作backup;

分别在两台机器上安装keepalived(yum install -y keepalived);

因为128在之前已经通过编译安装了nginx,在130上使用yum工具安装nginx(yum install -y nginx)。

       这里介绍一下VIP,它的名字是“Virtual IP”,即“虚拟IP”,又叫做“浮动IP”。因为这个IP是有keepalived给服务器上配置的,服务器靠这个VIP对外提供服务,当master机器宕机,VIP就会被分配到backup上。

3.1 配置master

编辑master(128)的keepalived的配置文件/etc/keepalived/keepalived.conf;

global_defs {
   notification_email {
     [email protected]   #定义接收告警的人
   }
   notification_email_from [email protected]   #定义发送邮件的地址
   smtp_server 127.0.0.1   #定义发邮件地址,若为127.0.0.1则使用本机自带邮件服务器进行发送
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {   #chk_nginx为自定义名字,后面还会用到
    script "/usr/local/sbin/check_ng.sh"   #自定义脚本,该脚本为监控nginx服务的脚本
    interval 3   #每隔3秒执行一次该脚本
}
vrrp_instance VI_1 {
    state MASTER   #角色为master
    interface ens33   #针对哪个网卡监控VIP
    virtual_router_id 51
    priority 100   #权重为100,master要比backup大
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass yulinux>com   #定义密码,这个密码自定义
    }
    virtual_ipaddress {
        192.168.30.100
    }
    track_script {
        chk_nginx   #定义监控脚本,这个上面vrr_script后面的字符串保持一致
    }
}

监控脚本如下:

#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        /etc/init.d/nginx start
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi

设置监控脚本的权限,并启动keepalived服务。

[root@yuioplvlinux-128 ~]# chmod 755 /usr/local/sbin/check_ng.sh
[root@yuioplvlinux-128 ~]# systemctl start keepalived   #启动keepalived
[root@yuioplvlinux-128 ~]# ps aux|grep keep   #查看keepalived是否启动
root      1912  0.1  0.1 118676  1396 ?        Ss   20:00   0:00 /usr/sbin/keepalived -D
root      1913  0.3  0.3 129604  3308 ?        S    20:00   0:00 /usr/sbin/keepalived -D
root      1915  0.1  0.2 129544  2844 ?        S    20:00   0:00 /usr/sbin/keepalived -D
root      1962  0.0  0.0 112720   972 pts/1    R+   20:00   0:00 grep --color=auto keep
[root@yuioplvlinux-128 ~]# ps aux|grep nginx   ##查看nginx是否启动
root       858  0.0  0.1  46064  1168 ?        Ss   17:30   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     859  0.0  0.3  48552  3788 ?        S    17:30   0:00 nginx: worker process
nobody     860  0.0  0.3  48552  3800 ?        S    17:30   0:00 nginx: worker process
root      2078  0.0  0.0 112724   972 pts/1    R+   20:01   0:00 grep --color=auto nginx

关闭nginx服务,再去查看nginx发现还是启动的,这是因为在脚本中定义了,当nginx服务挂掉时,就会自动重启。

[root@yuioplvlinux-128 ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  确定  ]
[root@yuioplvlinux-128 ~]# ps aux|grep nginx
root      2348  0.0  0.1  46064  1276 ?        Ss   20:03   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody    2352  0.0  0.4  48552  4172 ?        S    20:03   0:00 nginx: worker process
nobody    2353  8.0  0.3  48552  3916 ?        S    20:03   0:00 nginx: worker process
root      2355  0.0  0.0 112720   972 pts/1    R+   20:03   0:00 grep --color=auto nginx

3.2 配置backup

编辑backup(130)的keepalived的配置文件/etc/keepalived/keepalived.conf;

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
}
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"
    interval 3
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass yulinux>com
    }
    virtual_ipaddress {
        192.168.30.100
    }
    track_script {
        chk_nginx
    }
}

监控脚本如下:

#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        systemctl start nginx
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi

设置监控脚本的权限,并启动keepalived服务。

[root@yuioplvlinux-130 ~]# chmod 755 /usr/local/sbin/check_ng.sh
[root@yuioplvlinux-130 ~]# systemctl start keepalived
[root@yuioplvlinux-130 ~]# ps aux |grep keep
root      2036  0.0  0.1 118676  1400 ?        Ss   04:20   0:00 /usr/sbin/keepalived -D
root      2037  0.4  0.3 129604  3304 ?        S    04:20   0:00 /usr/sbin/keepalived -D
root      2038  0.0  0.2 129544  2844 ?        S    04:20   0:00 /usr/sbin/keepalived -D
root      2073  0.0  0.0 112720   968 pts/1    S+   04:21   0:00 grep --color=auto keep
[root@yuioplvlinux-130 ~]# ps aux |grep nginx
root      1985  0.0  0.0  46404   968 ?        Ss   03:22   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx     1986  0.0  0.1  46804  1932 ?        S    03:22   0:00 nginx: worker process
root      2087  0.0  0.0 112720   968 pts/1    S+   04:21   0:00 grep --color=auto nginx

在浏览器中分别访问master、backup以及VIP,可以看到VIP是连接到master上的;

Linux集群介绍及配置高可用集群_第1张图片


在master上关闭keepalived(systemctl stop keepalived)再去访问VIP,可以看到连接到了backup上。



你可能感兴趣的:(Linux)