集群介绍、 keepalived介绍、用keepalived配置高可用集群
集群介绍、 keepalived介绍、用keepalived配置高可用集群
Linux_Anna 发表于3个月前
集群介绍、 keepalived介绍、用keepalived配置高可用集群
  • 发表于 3个月前
  • 阅读 7
  • 收藏 0
  • 点赞 0
  • 评论 0

集群介绍

1.1Linux集群介绍--高可用

由多台机器组成一个庞大的机器,一台机器完不成的任务,可以多台机器来完成,liunx集群功能区划分的话分为两大类:高可用和负载均衡; 高可用的话通常是两台机器,这两台机器提供的功能和角色是一样的,正常情况下有一台机器提供服务,但不能保证这台机器一直都是正常使用的,万一这台机down机(比如硬件损坏),那么另一台机器就可以出来提供服务,这样的可以提升系统可用的效率,很多公司把可用的效率作为衡量是否健壮的一个标准. 比如在业界里,有一些核心的角色,它要做高可用的一个衡量标准,比如说我们的是4个9,那么这个4个9就是99.99,其实这是一个比例,这个比例就是在一年当中百分之九十点九九的时间都是在线的,不允许down机,不允许服务不可用, 有的甚至是5个9或6个9,怎样才能做到这么高的使用率,可用性,实际上我们需要提供一个高可用的一个集群出来,A和B两台机器,其中A机器down机了,那么B机器马上出来提供服务,在切换的过程当中的时间非常短暂,可能还不到一分钟,就完成了切换. 那想想一年我们只有一分钟的服务不可用,那可以计算一下,这可用性达到了几个9. 其实一分钟的服务不可用,对于我们用户来讲影响不是很大,那么反过来讲,如果down机时间超过了一天甚至两天,那想想这时间的可用性又是多少. 对于大企业来讲(腾讯,阿里)他们的核心业务是不允许太长时间的不在线 ,所以说一些核心角色是必须要有高可用这种架构的.

实现高可用的开源软件:

  • hearbeat 在Centos 6的版本上有很多bug,不太好用,而且有好长时间没有更新版本了,所以不建议使用hearbeat.
  • 建议使用keepalived,keepalived不仅仅有高可用的功能,还有负载均衡的功效,配置非常简单.


1.2 liunx集群介绍--负载均衡

负载均衡集群实际上就是一个请求过来,可以把它分摊到后端的多个机器上去,比如说做一个网站,这个网站一开始访问量很小,比如只有一百个人访问,但是随着业务的发展,推广效果非常好,一下子访问量扩充到了1W人甚至是十W人的时候,这时候一台机器已经不能提供服务了,比如说一台机器它的承载量是1000人,那现在一W人过来访问,这一台机器是不能提供服务了, 怎么办呢? 办法是加机器,当然也可以把这一台机器的硬件配置做一些调整,换更高的CPU,加大内存,各方面都做一些优化调升,但是最终总会有一定瓶颈,增加到一定的程度的时候,会发现已经不能再继续增加硬件配置了, 或者增加了硬件的配置,也不能提升这台机器的效率.只能想办法去横向扩容,横向扩容原本是一台机器提供服务,现在需要10台机器甚至100台去提供服务,那怎样去实现这些负载均衡?需要一些手段,一些技术.

 

  • 实现负载均衡的开源软件:LVS、Keepalived、haproxy、nginx
  • 商业的负载均衡:F5、Netscaler

 

keepalived介绍

1.1keepalived介绍

在这里我们使用keepalived来实现高可用集群,因为heartbeat在Centos 6上有一些问题,比如说在切换的时候不是很及时,假如说主已经down机,但是从半天才启动不起来,通信可能会有些不顺畅,所以不建议使用heartbeat.

keepalived通过VRRP(Virtual Router Redundancy Protocol)协议来实现高可用,这是它的一个核心. 翻译成中文叫做虚拟路由器冗余协议. 在这个协议里会将多台相同的路由器组成一个小组,在我们实验当中实际上是一台机器,不是路由器,你可以把认为就是一台路由器,这些路由器组成了一个小组,这个小组会有1个master角色和N (N>=1) 个backup角色,这个N可以是多个,通常情况下为了节省资源这个N会设置成=1,也就是一主一从.

master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master  down机了,如果是一个backup,它就会把自己的服务启动起来,充当master的角色.如果是多个backup呢,就需要一个优先级来决定,谁的优先级高谁就是新的master.

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

 

 用keepalived配置高可用集群

1.1 准备两台机器

192.168.2.179 --master

192.168.2.180 -- backup

两台机器都需要执行 yum install -y keepalived

两台机器都需要安装nginx (因为这两台机器都安装过,所以不做演示)
ps:若没有安装就 yum install -y nginx

说明:keepalived 实际上需要包含一个服务,这个服务呢用来实现高可用,比如说最早讲集群的时候,那一个角色有可能会出现断电故障,如果这个服务down机 那就over了.如果想让这个服务高可用,那就得用keepalived,hearbeat 这些高可用的软件,让它实现高可用.所以说搭建了高可用的集群,首先要有一个keepalived的服务,还要让哪个服务去实现高可用,那么在这里我们使用Nginx服务去实现高可用,把Nginx做为实现高可用的对象. 为什么要拿Nginx作为实现高可用的对象呢?是因为在我们工作或是生产环境中,好多企业把Nginx作为一个负载均衡器,后面会介绍到Nginx负载均衡集群.假如说Nginx 挂掉了,那么后端所有的web即使是正常的,它也不能正常访问到,所以说这个角色很关键,不能出现半点故障.

1.2 配置keepalived配置文件

说明:在主上的keepalived配置文件操作,配置文件所在路径:/etc/keepalived/keepalived.conf

编辑的内容从这地址拷贝:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf

第1步:清空原始的配置文件
[root@root-01 ~]# > /etc/keepalived/keepalived.conf

第2步:将复制的内容粘贴过来
[root@root-01 ~]# vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
     aming@aminglinux.com
   }
   notification_email_from root@aminglinux.com
   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 MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {
        192.168.2.100
    }
    track_script {
        chk_nginx
    }
}

说明:

  • global_defs -- 全局定义的参数
  • notification_email -- 出现问题时会发邮件(可省略)
  • vrrp_script chk_nginx -- 用来检测服务是否正常的,需要定义一个脚本
  • vrrp_instance -- 定义角色  virtual_ipaddress-- 作用是两台机器一个主一从,正常情况下是主在提供服务,若果主down了,从起来,那从起来的话,从肯定要启动服务,比如是说启动Nginx,从启动了Nginx,从提供服务,那去访问Nginx的时候,访问哪个IP呢? 把域名解析到哪个域名上去呢? 这是个问题,假如解析到主上,但现在主已经down了,从起来了,那从的IP是什么呢?  所以需要定义一个公有IP,主上用这个IP,从上也要用这个IP,那个就叫做VIP. VIP是可以随时下掉,配置. VIP就可以在keepalived中定义. 正常master要绑定这个IP,一旦主down掉,从起来就要绑定这个IP,最终我们域名解析到这个IP上,不管在主上还是在从上都无所谓.
  •  priority 100 --权重

1.3 定义监控脚本

 说明:脚本内容复制地址:
https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh

[root@root-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,从上就会自动启动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@root-01 ~]# chmod 755 /usr/local/sbin/check_ng.sh


1.4 启动keepalived服务

[root@root-01 ~]# systemctl start keepalived
[root@root-01 ~]# ps aux |grep keepalived
root      12610  0.0  0.1 111700  1316 ?        Ss   20:10   0:00 /usr/sbin/keepalived -D
root      12611  0.0  0.2 111700  2552 ?        S    20:10   0:00 /usr/sbin/keepalived -D
root      12613  0.0  0.1 111700  1524 ?        S    20:10   0:00 /usr/sbin/keepalived -D
root      12619  0.0  0.0 112660   968 pts/2    S+   20:10   0:00 grep --color=auto keepalived

#查看nginx服务是否启动
[root@root-01 ~]# ps aux |grep nginx
root       9340  0.0  0.1  20620  1444 ?        Ss   14:30   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     9344  0.0  0.3  23064  3312 ?        S    14:30   0:00 nginx: worker process
nobody     9345  0.0  0.3  23064  3812 ?        S    14:30   0:00 nginx: worker process
root      12622  0.0  0.0 112660   960 pts/2    S+   20:13   0:00 grep --color=auto nginx


1.5 检查主从防火墙有没有开启

[root@root-01 ~]# getenforce
Disabled

[root@root-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      

注:把主从的防火墙都关闭

 

2. 配置从

2.1 编辑keepalived配置文件

说明:需要修改 interface (更改为自己的网卡);  vrrp_instance (修改vip)

#先清空原keepalived配置文件

#去这个地址复制内容粘贴到keepalived配置文件
https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf

[root@root-02 ~]# cat /etc/keepalived/keepalived.conf 
global_defs {
   notification_email {
     aming@aminglinux.com
   }
   notification_email_from root@aminglinux.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/sbin/bakup_check_ng.sh"
    interval 3
}
vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736:0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {
        192.168.2.100
    }
    track_script {
        chk_nginx
    }
}


2.2 定义监控脚本

脚本内容在这个地址复制:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh

[root@root-02 ~]# vim /usr/local/sbin/bakup_check_ng.sh
#时间变量,用于记录日志
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@root-02 ~]# chmod 755 /usr/local/sbin/bakup_check_ng.sh


2.3 启动keepalived服务

[root@root-01 ~]# systemctl start keepalived
[root@root-01 ~]# ps aux |grep keepalived
root       2450  0.0  0.1 111700  1312 ?        Ss   23:56   0:00 /usr/sbin/keepalived -D
root       2451  0.0  0.2 111700  2556 ?        S    23:56   0:00 /usr/sbin/keepalived -D
root       2452  0.0  0.1 111700  1528 ?        S    23:56   0:00 /usr/sbin/keepalived -D
root       2459  0.0  0.0 112660   964 pts/0    S+   23:56   0:00 grep --color=auto keepalived

2.4 如何区分master 和backup

#从上的默认虚拟机主
[root@root-02 ~]# curl -x127.0.0.1:80 aaa.com.conf
backup backup This is the default site.

#[root@root-01 ~]# curl -x127.0.0.1:80 test.com
master master This is the default site.

#配置默认虚拟主机--例子
1.在/usr/local/nginx/conf/vhost
[root@root-01 ~]# cat /usr/local/nginx/conf/vhost/test.conf 
server
{
   listen 80 default_server;
   server_name test.com;
   index index.html index.htm index.php;
   root /data/www/default;
location ~ \.php$
   {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/www/default$fastcgi_script_name;
   }
}


 

2.5默认VIP是master上

[root@root-01 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a0:0f:93 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.179/24 brd 192.168.2.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.2.100/24 brd 192.168.2.255 scope global secondary eno16777736:0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea0:f93/64 scope link 
       valid_lft forever preferred_lft forever

 

2.6 测试

#模拟生成环境中主机down的场景
 把master上keepalived关闭掉

[root@root-01 ~]# systemctl stop keepalived
[root@root-01 ~]# ps aux |grep keepalived
root       2618  0.0  0.0 112660   968 pts/0    S+   00:54   0:00 grep --color=auto keepalived

#从上会自动绑定vip
[root@root-02 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:67:89:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.180/24 brd 192.168.2.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.2.100/24 brd 192.168.2.255 scope global secondary eno16777736:0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe67:899e/64 scope link 
       valid_lft forever preferred_lft forever

 

网页上访问VIP(192.168.2.100)显示是在从上

2.6.2 把从上keepalived服务停掉

[root@root-02 ~]# systemctl stop keepalived
[root@root-02 ~]# ps aux |grep keepalived
root       2762  0.0  0.0 112660   968 pts/0    S+   01:25   0:00 grep --color=auto keepalived


刷新网页,VIP(192.168.2.100)访问的就是在从上

注:高可用集群可以有多台backup,权重越高优先级就越高.

共有 人打赏支持
粉丝 4
博文 63
码字总数 114622
×
Linux_Anna
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: