linux集群架构介绍,Keepalived介绍,用keepalived配置高可用集群

集群介绍

Linux集群根据功能划分为两大类:高可用和负载均衡。

高可用集群

高可用集群通常为2台服务器,一台工作,另一台作为冗余,当提供服务的机器宕机时,冗余将接替继续提供服务。 
实现高可用的开源软件有:heartbeat、Keepalived,其中heartbeat已无人维护,基本上使用Keepalived来搭建高可用集群。

负载均衡集群

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

Keepalived介绍

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

用keepalived配置高可用集群

两台机器,都要安装keepalived.

master: ip:192.168.176.135 编译安装Nginx 
backup: ip : 192.168.176.134 yum安装Nginx

master:

安装keepalived

[root@shuai-01 ~]# yum install -y keepalived

查看Nginx的版本:

[root@shuai-01 ~]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.12.2

backup:

安装keepalived

[root@shuai-02 ~]# yum install -y keepalived

yum 安装Nginx

[root@shuai-02 ~]# yum install -y nginx

问题: 
[root@shuai-02 ~]# yum install -y nginx 
已加载插件:fastestmirror 
Loading mirror speeds from cached hostfile 
* base: mirrors.163.com 
* extras: mirrors.cqu.edu.cn 
* updates: mirrors.cqu.edu.cn 
没有可用软件包 nginx。 
错误:无须任何处理

[root@shuai-02 ~]# vi /etc/yum.repos.d/nginx.repo


[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/x86_64/
gpgcheck=0
enabled=1

处理方式在这片博文上

http://blog.csdn.net/lnboxue/article/details/74783885

配置keepalived 
master:

将下面的配置文件写入/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"           #指定服务健康检测(check)脚本
    interval 3                                     #检测时间间隔
}
vrrp_instance VI_1 {                               
    state MASTER                                   #定义该服务的角色 
    interface ens33                                #定义在本机中监听VIP的网卡
    virtual_router_id 51                           #虚拟路由id(同组中的服务器保持该id一致)
    priority 100                                   #指定本机权重(决定优先级)
    advert_int 1                                   
    authentication {                               #定义认证相关信息  
        auth_type PASS                             #认证类型为密码形式
        auth_pass 111111                           #定义认证密码
    }
    virtual_ipaddress {                            #定义VIP
        192.168.176.100
    }
    track_script {                                 #加载监控服务(脚本)
        chk_nginx                                  #注意此处服务名称要与上面监控脚本名称一致
    }
}

创建监控脚本(脚本名,自己在配置文件中定义了):

[root@shuai-01 ~]# vim /usr/local/sbin/check_ng.sh


#!/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      #在此停止Keepalived服务是为了避免发生脑裂
        fi
fi

保存退出

“脑裂”,即当master宕机后仍然未释放VIP,同时backup接替master提供服务要使用同一VIP,因而导致两台机器争占同一VIP导致服务紊乱,所以当master宕机后需要关闭其Keepalived服务来避免脑裂现象发生。Keepalived服务的日志位置:/var/log/messages。

写完脚本之后,还要给脚本变更权限

[root@shuai-01 ~]# chmod 755 /usr/local/sbin/check_ng.sh 

启动keepalived服务:

[root@shuai-01 ~]# systemctl start keepalived
[root@shuai-01 ~]# ps aux |grep keep
root       5114  0.0  0.1 120720  1484 ?        Ss   21:23   0:00 /usr/sbin/keepalived -D
root       5115  0.3  0.3 127460  3292 ?        S    21:23   0:00 /usr/sbin/keepalived -D
root       5126  0.0  0.0 112680   976 pts/0    R+   21:23   0:00 grep --color=auto keep

查看Nginx服务

[root@shuai-01 ~]# ps aux |grep nginx
root       1846  0.0  0.1  45996  1272 ?        Ss   13:07   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     1854  0.0  0.3  48484  3920 ?        S    13:07   0:00 nginx: worker process
nobody     1855  0.0  0.3  48484  3920 ?        S    13:07   0:00 nginx: worker process
root       5159  0.0  0.0 112684   972 pts/0    R+   21:26   0:00 grep --color=auto nginx

将Nginx停掉

[root@shuai-01 ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  确定  ]
[root@shuai-01 ~]# ps aux |grep nginx
root       5190  0.0  0.0 112680   976 pts/0    R+   21:27   0:00 grep --color=auto nginx
[root@shuai-01 ~]# ps aux |grep nginx
root       5193  0.0  0.0 112680   976 pts/0    R+   21:27   0:00 grep --color=auto nginx
[root@shuai-01 ~]# ps aux |grep nginx
root       5198  0.0  0.0 112680   976 pts/0    R+   21:27   0:00 grep --color=auto nginx
[root@shuai-01 ~]# ps aux |grep nginx
root       5202  0.0  0.0 112680   976 pts/0    R+   21:27   0:00 grep --color=auto nginx

停掉Nginx服务后,keepalived会自动启动Nginx服务

vip只能用ip add 查看

问题:

开启keepalived后 ,用ip add 查看发现VIP没有。查看配置文件,没错,查看脚本,没错。看日志,就是没启动起来,像这样

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a1:0e:2c brd ff:ff:ff:ff:ff:ff
    inet 192.168.176.135/24 brd 192.168.176.255 scope global dynamic ens33
       valid_lft 1131sec preferred_lft 1131sec
    inet 192.168.176.150/24 brd 192.168.176.255 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::4f59:7251:18f1:8716/64 scope link 
       valid_lft forever preferred_lft forever

解决方法:

查看iptables规则,关闭。

[root@shuai-01 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

查看selinux,

[root@shuai-01 ~]# getenforce
Enforcing

关闭后,VIP出来了。

[root@shuai-01 ~]# setenforce 0

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a1:0e:2c brd ff:ff:ff:ff:ff:ff
    inet 192.168.176.135/24 brd 192.168.176.255 scope global dynamic ens33
       valid_lft 1048sec preferred_lft 1048sec
    inet 192.168.176.100/32 scope global ens33
       valid_lft forever preferred_lft forever

backup:

关掉防火墙

[root@shuai-02 ~]# systemctl stop firewalld
[root@shuai-02 ~]# setenforce 0

keepalived配置:

[root@shuai-02 ~]# vim /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 {       #只有该部分与master有区别
    state BACKUP           #角色
    interface ens33        
    virtual_router_id 51   
    priority 90            #权重
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 111111
    }
    virtual_ipaddress {
        192.168.176.100
    }   
    track_script {
        chk_nginx
    }   
}

保存退出

创建监控脚本

[root@shuai-02 ~]# vim /usr/local/sbin/check_ng.sh

#!/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
        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

修改权限

[root@shuai-02 ~]# chmod 755 !$
chmod 755 /usr/local/sbin/check_ng.sh

启动keepalived

[root@shuai-02 ~]# systemctl start keepalived

测试:

master宕机前 
访问master的ip:

这里写图片描述

访问backup的ip: 
这里写图片描述

访问VIP:

这里写图片描述

master宕机后:

[root@shuai-01 ~]# systemctl stop keepalived

master的ip:

这里写图片描述

backup的ip:

这里写图片描述

VIP的ip:

这里写图片描述

这时,查看ip addr ,VIP在backup下。

猜你喜欢

转载自blog.csdn.net/chen112826473/article/details/79970680