文档章节

day63:keepalived介绍及高可用集群应用

芬野de博客
 芬野de博客
发布于 2018/09/05 22:42
字数 3694
阅读 27
收藏 0

1、linux集群:linux根据功能可分为两大类:高可用负载均衡

高可用集群:通常是两台服务器,一台工作,另一台提供冗余,当提供服务器的机器down机,冗余将接替继续提供服务,提供系统可用效率,高可用的衡量标准----4个九:99.99,表示一个比例,在一年当中,99.99%都是在线的,不允许down机,不允许服务不可用,也有5个九、6个九:

  实现高可用的开源软件:keepalived      heartbeat

heartbeat:在Centos中有许多bug,并且已经不在更新,不建议使用:

keepalived:不止有高可用,还支持负载均衡,配置也简单:

负载均衡集群:需要一台服务器作为调度分发器,它负责把用户的请求分发给后端的服务器处理,一个请求过来,分发到后端的多个服务上,在这个集群里,除了调度分发器外,就是给用户提供服务的服务器器了,这些服务器的数量至少是2:

 实现负载均衡的软件有:LVS     keepalived     haproxy    nginx   硬件有:   F5     netscaler(更高的并发量,很好的稳定性)

keepalived介绍

   在这里使用keepalived来实现高可用集群,因为heartbeat在Centos上有一些问题,影响实验效果,比如:heartbeat在切换时并不是很及时,主以及down机,而备起不来等:

 keepalivedVRRP(Virtual Router Redundancy Protocl 中文为:虚拟路由冗余协议)来实现高可用。

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

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

 keepalived有三个模块,分别是core   check   vrrp

  core:是keepalived的核心,负责主进程的启动,维护以及全局配置文件的加载和解析:

  check:负责健康检查:

  vrrp模块:负责实习VRRP协议的:

keepalived高可用的操作配置

操作环境:两台Centos 7.3机器A和B:

master(A):192.168.149.131:安装nginx,并安装keepalived:

backup(B):192.168.149.132:安装nginx,并安装keepalived:

VIP:1921.68.149.254:   注释:(virtual IP)虚拟IP,由keepalived设置,用于服务器对外提供服务:

注释:安装nginx:yum     install   -y    nginx

注释:安装keepalived:yum    install  -y   keepalived

master机器操作

 编辑keepalived配置文件---->>  master配置文件

 编辑keepalived监控脚本---->>   master监控脚本

 分别给脚本755权限: 并启动服务:    systemctl         start      keepalived

backup机器操作

  编辑keepalived配置文件---->>  backup配置文件

 编辑keepalived监控脚本---->>   backup配置脚本

 分别给脚本755权限: 并启动服务:    systemctl         start      keepalived

详细操作步骤:  master===131        backup====132

masterA==131操作:
[root@localhost_03 ~]# yum install -y epel-release        #安装扩展源:
[root@localhost_03 ~]# yum install -y keeplived           #安装keepalived:
[root@localhost_03 ~]# yum install -y nginx               #安装nginx:
backupB==132操作:
[root@localhost_04 ~]# yum install -y epel-release        #安装扩展源:
[root@localhost_04 ~]# yum install -y keeplived           #安装keepalived:
[root@localhost_04 ~]# yum install -y nginx               #安装nginx:

1:更改masterA配置文件:   /etc/keepalived/keepalived.conf     master配置文件  

masterA机器修改配置文件:
[root@localhost_03 ~]# ls /etc/keepalived/keepalived.conf 
/etc/keepalived/keepalived.conf
[root@localhost_03 ~]# > !$                            #清空配置文件:
> /etc/keepalived/keepalived.conf
[root@localhost_03 ~]# vim /etc/keepalived/keepalived.conf 
############全局配置:
global_defs {                                           #global_defs全局配置标识:
   notification_email {                             #notification_email用于设置报警邮件地址:
     yuanhh@forebix.com                             #可设置多个,每行一个:
   }
   notification_email_from root@aminglinux.com      #设置邮件发送地址:   
   smtp_server 127.0.0.1                            #设置邮件的smtp_server地址:
   smtp_connect_timeout 30                          #设置邮件的smtp_server超时时间地址:
   router_id LVS_DEVEL
}

###########VRRP的配置:
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"            #检测服务器是否正常,通过写脚本实现,脚本检测服务器状态:
    interval 3                                      #检查时间间隔是3s:
}

vrrp_instance VI_1 {                                #VRRP配置标识,VI_1是实例名称:
    state MASTER                                    #定义master:
    interface eth0                                  #指定通过这个网卡去发vrrp的广播通信,此处要注意:
    virtual_router_id 50                            #定义路由器ID,配置和备机器一致:
    priority 100                                    #定义优先级,权重,主和备的权重是不一样的:
    advert_int 1                                #设定master和backup同步时间间隔:
    authentication {                            #认证相关信息:
        auth_type PASS                          #认证相关信息:
        auth_pass   nihao123!                   #密码的形式:字符串
    }
    virtual_ipaddress {                         #定义VIP地址:  
        192.168.149.254                         #VIP地址:                         
    }

    track_script {                              #加载脚本:
        chk_nginx
    }

}

注释:virtual_ip,简称虚拟VIP地址,虚拟IP是主备IP的集合,请求过来的时候首先访问的是这个IP地址,再有这个IP分发给下面的IP地址,如:有两台机器,一主一备,正常情况下是主在服务,主宕机了,备起来nginx服务,备起来后再访问的就是这个虚拟VIP地址,可以再keepalived中使用:并且解析域名会解析到这个IP上来:

2、定义监控脚本:keepalived监控脚本             /usr/local/sbin/check_ng.sh

[root@localhost_03 ~]# 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@localhost_03 ~]# chmod 755 /usr/local/sbin/check_ng.sh 

注释:脑裂:在HA高可用中,当连接主备两台服务器的心跳线断开时,本来为整体的HA系统就会分裂成两个独立的个体,由于相互失去了联系,并都认为是对方出现了故障,两个节点的HA像裂脑人一样,争抢共享资源和应用服务,当master宕机后仍然未释放VIP,同时backup接替master提供服务要使用同一VIP,因而导致两台机器争占同一VIP导致服务紊乱会导致两边服务都起不来,或者两边服务都起来了,当同时读写共享存储,导致数据损坏:

 如何判断脑裂:分别在两台机查看当前服务器是否拥有虚拟IP,如果两台服务器都拥有,则说明发生了脑裂,证明目前双机通信出现问题,产生此问题的原有在于 两台服务器都探测不到组内其他服务器的状态(心跳请求无法正常响应),私自判定另一台服务器挂起,则抢占虚拟IP,脑裂的出现是不被允许的,解决此问题的方法为检查防火墙设置(关闭防火墙)或者使用串口通信。

注释:keepalived的日记:  /var/log/message

3、启动keepalived服务,并查看是否启动成功:(如果启动不成功,可能是防火墙或者selinux造成的):

[root@localhost_03 ~]# systemctl start keepalived
[root@localhost_03 ~]# !ps
ps aux |grep keep
root       1245  0.0  0.1 118608  1384 ?        Ss   11:12   0:00 /usr/sbin/keepalived -D
root       1246  0.0  0.2 122804  2368 ?        S    11:12   0:00 /usr/sbin/keepalived -D
root       1247  0.0  0.2 122804  2412 ?        S    11:12   0:00 /usr/sbin/keepalived -D
root       1249  0.0  0.0 112676   980 pts/0    R+   11:12   0:00 grep --color=auto keep

4、启动并查看nginx服务:          systemctl      start    nginx

[root@localhost_03 ~]# systemctl start nginx
[root@localhost_03 ~]# ps aux |grep nginx
root       1283  0.0  0.2 120752  2096 ?        Ss   11:21   0:00 nginx: master process /usr/sbin/nginx
nginx      1284  0.0  0.3 121136  3124 ?        S    11:21   0:00 nginx: worker process
root       1286  0.0  0.0 112676   980 pts/0    R+   11:21   0:00 grep --color=auto nginx

5、然后关闭nginx服务,并再次查看,发现会自动加载nginx:

[root@localhost_03 ~]# systemctl stop nginx
[root@localhost_03 ~]# !ps 
ps aux |grep nginx 
root       1936  0.0  0.2 120752  2092 ?        Ss   11:33   0:00 nginx: master process /usr/sbin/nginx
nginx      1937  0.0  0.3 121136  3120 ?        S    11:33   0:00 nginx: worker process
root       1942  0.0  0.0 112676   980 pts/0    R+   11:33   0:00 grep --color=auto nginx
[root@localhost_03 ~]# ps -C nginx --no-heading|wc -l
2

6、查看虚拟VIP地址:使用ip addr这个命令:(ifconfig无法查看看)

[root@localhost_03 ~]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:66:d6:8e brd ff:ff:ff:ff:ff:ff
    inet 192.168.149.131/24 brd 192.168.149.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.149.254/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe66:d68e/64 scope link 
       valid_lft forever preferred_lft forever

注释:以上是master主机器配置:

2、backup备机器配置:

backup机器操作

  编辑keepalived配置文件---->>  backup配置文件

 编辑keepalived监控脚本---->>   backup配置脚本

 分别给脚本755权限: 并启动服务:    systemctl         start      keepalived

1、更改backup的配置文件:      /etc/keepalived/keepalived.conf

[root@localhost_04 ~]# > /etc/keepalived/keepalived.conf 
[root@localhost_04 ~]# 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 BACKUP                   #这里和master是不一样:  
    interface eth0                 #这里是当前的网卡名称:
    virtual_router_id 50           #路由器标识,和master的要相同:
    priority 90                    #优先级:权重值,需要比master的小:
    advert_int 1                   
    authentication {
        auth_type PASS
        auth_pass nihao123!
    }
    virtual_ipaddress {
        192.168.149.254           #虚拟VIP地址:
    }

注释:如果是多台服务器,权重值决定了master宕机后,backup接管master角色的顺序问题:

2、定义监控脚本:       /usr/local/sbin/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
        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@localhost_04 ~]# chmod 755 /usr/local/sbin/check_ng.sh

3、backup备机器启动keepalived和nginx:并查看:

[root@localhost_04 ~]# systemctl start keepalived
[root@localhost_04 ~]# ps aux |grep keep
root       1066  0.0  0.1 118608  1388 ?        Ss   11:51   0:00 /usr/sbin/keepalived -D
root       1067  0.0  0.3 127468  3288 ?        S    11:51   0:00 /usr/sbin/keepalived -D
root       1068  0.0  0.2 127340  2572 ?        S    11:51   0:00 /usr/sbin/keepalived -D
root       1075  0.0  0.0 112676   984 pts/0    R+   11:51   0:00 grep --color=auto keep
[root@localhost_04 ~]# systemctl start nginx
[root@localhost_04 ~]# ps aux |grep nginx
root       1089  0.0  0.2 120752  2092 ?        Ss   11:52   0:00 nginx: master process /usr/sbin/nginx
nginx      1090  0.0  0.3 121136  3120 ?        S    11:52   0:00 nginx: worker process
root       1092  0.0  0.0 112676   984 pts/0    R+   11:52   0:00 grep --color=auto nginx

注释:因为此时VIP在主master上面,所有在备backup上是查找不到的:

[root@localhost_04 ~]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:eb:02:2d brd ff:ff:ff:ff:ff:ff
    inet 192.168.149.132/24 brd 192.168.149.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feeb:22d/64 scope link 
       valid_lft forever preferred_lft forever

4、如何区分是主master还是备backup

master主访问:    浏览器输入:192.168.149.131         配置文件目录:  /usr/share/nginx/html/index.html

[root@localhost_03 ~]# cat /usr/share/nginx/html/index.html 
master  Ths is  master site!!!

backup备访问:   浏览器输入:192.168.149.132         配置文件目录:  /usr/share/nginx/html/index.html

[root@localhost_04 ~]# cat /usr/share/nginx/html/index.html 
backup  backup

5、此时可以访问虚拟VIP地址:浏览器输入: 192.168.149.254    此时发现查看到的是master主的地址:如下:

5、测试高可用:模拟master主宕机,即master主关闭keepalived的情景:如下:

[root@localhost_03 ~]# systemctl stop  keepalived 

6、查看master主的虚拟VIP地址,发现已经被释放了:

[root@localhost_03 ~]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:66:d6:8e brd ff:ff:ff:ff:ff:ff
    inet 192.168.149.131/24 brd 192.168.149.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe66:d68e/64 scope link 
       valid_lft forever preferred_lft forever

说明:发现虚拟VIP地址:192.168.149.254已经不存在了,被释放了:

7、查看backup备的IP地址,发现虚拟VIP地址已经在这里:   ip   addr

[root@localhost_04 ~]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:eb:02:2d brd ff:ff:ff:ff:ff:ff
    inet 192.168.149.132/24 brd 192.168.149.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.149.254/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feeb:22d/64 scope link 
       valid_lft forever preferred_lft forever

注释:虚拟VIP地址转移到backup备的机器上了:

8:浏览器访问: 192.168.149.254      #切换到backup的网页:     

#backup备接替了master主的角色,成为了新的master:

9、查看backup备(新master角色)的日记:           /var/log/message:

[root@localhost_04 ~]# tail -f /var/log/messages
Sep  6 15:16:29 localhost_04 Keepalived_vrrp[1406]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:16:29 localhost_04 Keepalived_vrrp[1406]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:16:29 localhost_04 Keepalived_vrrp[1406]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:16:29 localhost_04 Keepalived_vrrp[1406]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:16:34 localhost_04 Keepalived_vrrp[1406]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:16:34 localhost_04 Keepalived_vrrp[1406]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 192.168.149.254
Sep  6 15:16:34 localhost_04 Keepalived_vrrp[1406]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:16:34 localhost_04 Keepalived_vrrp[1406]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:16:34 localhost_04 Keepalived_vrrp[1406]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:16:34 localhost_04 Keepalived_vrrp[1406]: Sending gratuitous ARP on eth0 for 192.168.149.254

10:在master(原A机器)重启keepalived服务后,则这个虚拟VIP会立即会立即切换回来:

[root@localhost_03 ~]# systemctl start keepalived 
[root@localhost_03 ~]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:66:d6:8e brd ff:ff:ff:ff:ff:ff
    inet 192.168.149.131/24 brd 192.168.149.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.149.254/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe66:d68e/64 scope link 
       valid_lft forever preferred_lft forever

11:在浏览器再次访问,并查看日记:           /var/log/message

[root@localhost_03 ~]# tail -f /var/log/messages
Sep  6 15:23:14 localhost_03 Keepalived_vrrp[8553]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:23:14 localhost_03 Keepalived_vrrp[8553]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:23:14 localhost_03 Keepalived_vrrp[8553]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:23:14 localhost_03 Keepalived_vrrp[8553]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:23:19 localhost_03 Keepalived_vrrp[8553]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:23:19 localhost_03 Keepalived_vrrp[8553]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 192.168.149.254
Sep  6 15:23:19 localhost_03 Keepalived_vrrp[8553]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:23:19 localhost_03 Keepalived_vrrp[8553]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:23:19 localhost_03 Keepalived_vrrp[8553]: Sending gratuitous ARP on eth0 for 192.168.149.254
Sep  6 15:23:19 localhost_03 Keepalived_vrrp[8553]: Sending gratuitous ARP on eth0 for 192.168.149.254

汇总:在生产环境中,可能会用到2-3台的backup角色的设备,则需要在/etc/keepalived/keepalived.conf这里设置权重值,权重值的越大优先级越高,除了nginx服务,还可以做mysql的高可用集群(mysql集群一定要保证两边的数据要一致):

© 著作权归作者所有

芬野de博客
粉丝 27
博文 191
码字总数 326083
作品 0
海淀
程序员
私信 提问
高可用简介及简单实现方案

前面介绍了lvs集群架构的搭建,提到了单点故障问题,一旦Director服务器出现问题不可用,lvs集群将整体崩溃,集群所提供的服务将顺利下线。高可用的想法是一旦中间某台服务器丧失提供服务的能...

从运维开始
2017/10/25
0
0
keepalived的介绍及配置高可用集群

12月19日任务 18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepalived配置高可用集群 集群介绍 根据功能划分为2类:高可用和负载均衡 高可用集群:通常为两台服务器,一台工作,另外...

robertt15
2018/12/19
22
0
《循序渐进Linux》第二版即将出版发行(附封面)

从《循序渐进Linux》第一版发布,到现在已经近6年了,6年的时间,技术发生了很大的变化,Linux系统的内核版本从2.6.9(RHEL4.x)已经更新到了现在的3.10(Centos7.x),第一版中的部分内容已经...

南非蚂蚁
2015/12/25
0
0
集群介绍 keepalived介绍 用keepalived配置高可用集群

7月3日任务 18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepalived配置高可用集群 扩展 heartbeat和keepalived比较http://blog.csdn.net/yunhua_lee/article/details/9788433 DRB......

lyy549745
2018/07/03
104
0
java视频教程,java高并发解决方法教程!

还记得每年双11淘宝的盛况吗?你是不是进不去,是不是不能付款?其实这就是我们常说的大量并发问题么有解决,这工作中,热点网站 频繁出现的大量并发如何去解决? 今天我推荐的课程中,大家就...

小小倾听
01/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Python 开发植物大战僵尸游戏

作者:楷楷 链接:https://segmentfault.com/a/1190000019418065 开发思路 完整项目地址: https://github.com/371854496/pygame 更多好玩有趣的python,尽在公众号「Python专栏」,后台回复...

上海小胖
52分钟前
5
0
JVM优化之逃逸分析与分配消除

要了解逃逸分析背后的基本原理,我们先来看下这段有问题的C代码——当然这个是没法用Java来写的: 这段C代码在栈上创建了一个int类型的变量,然后把它的指针作为函数的返回值返回了。这样做是...

onedotdot
今天
3
0
最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
今天
6
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
今天
12
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部