集群介绍、keepalived介绍、用keepalived配置高可用集群

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

集群介绍

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

1、高可用集群通常为2台服务器,一台工作,另一台作为冗余,当提供服务的机器宕机时,冗余将接替继续提供服务。

实现高可用的开源软件有:heartbeat、Keepalived,其中heartbeat很多bug已无人维护(不推荐使用),所以今后使用Keepalived来搭建高可用集群。


2、负载均衡集群,需要有1台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外就是给用户提供服务的服务器了,这些服务器数量至少为2台,所以负载均衡集群至少要3台服务器。

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


keepalived介绍

Keepalived通过VRRP(virtual router redundancy protocol)虚拟路由冗余协议来实现高可用。
在这个协议里会将多台功能相同的路由器组成一个小组,这个小组会有1个master角色和N(N≥1)个backup角色。

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


用keepalived配置高可用集群

准备环境

master:192.168.3.74 安装编译nginx

backup:192.168.3.83 安装编译nginx

VIP:192.168.3.100 #  注:  VIP(virtual IP)虚拟IP,由Keepalived设置,用于服务器对外提供服务。

 

准备工作:

master

[root@centos7 ~]# yum install -y keepalived

[root@centos7 ~]# /usr/local/nginx/sbin/nginx -v

nginx version: nginx/1.12.1


backup

[root@test ~]# yum install -y keepalived

[root@test ~]# /usr/local/nginx/sbin/nginx -v

nginx version: nginx/1.12.2


配置主服务器上:

1、[root@centos7 ~]# vi  /etc/keepalived/keepalived.conf


global_defs {                                      #全局定义

   notification_email {

     tt@tt.com

   }                                               #定义故障提醒邮件接收地址

   notification_email_from root@tt.com

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

vrrp_script chk_nginx {                            #定义nginx监控脚本

    script "/usr/local/sbin/check_ng.sh"           #指定服务健康检测(check)脚本

    interval 3                                     #检测时间间隔

}

vrrp_instance VI_1 {

    state MASTER                                   #定义该服务的角色

    interface eno16777736                                 #定义在本机中监听VIP的网卡

    virtual_router_id 51                           #虚拟路由id(同组中的服务器保持该id一致)

    priority 100                                   #指定本机权重(决定优先级)

    advert_int 1

    authentication {                               #定义认证相关信息

        auth_type PASS                             #认证类型为密码形式

        auth_pass 123456                           #定义认证密码

    }

    virtual_ipaddress {                            #定义VIP

        192.168.3.100

    }

    track_script {                                 #加载监控服务(脚本)

        chk_nginx                                  #注意此处服务名称要与上面监控脚本名称一致

    }

}


2、[root@centos7 ~]# cat  /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 keepalive      #在此停止Keepalived服务是为了避免发生脑裂

        fi

fi

3、[root@centos7 ~]# chmod 755  /usr/local/sbin/check_ng.sh

4、启动

[root@centos7 ~]# systemctl start keepalived


[root@centos7 ~]# ps -aux | grep keep

root      21327  0.0  0.0 120712  1400 ?        Ss   10:33   0:00 /usr/sbin/keepalived -D

root      21328  0.0  0.1 120712  2748 ?        S    10:33   0:00 /usr/sbin/keepalived -D

root      21329  0.4  0.1 120712  2440 ?        S    10:33   0:00 /usr/sbin/keepalived -D

root      21360  0.0  0.0 112664   968 pts/0    R+   10:33   0:00 grep --color=auto keep


验证nginx的监控脚本:

1、将nginx服务器停止

[root@centos7 ~]# /etc/init.d/nginx stop

2、再看还是会有nginx服务的进程

[root@centos7 ~]# netstat -nutlp| grep 80

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      23022/nginx: master 

3、只有当keepalived服务停止,才会停止nginx


4、查看vip

[root@centos7 ~]# ip addr

inet 192.168.3.100/32 scope global eno16777736


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


配置从服务器上的:

1、

[root@test ~]# cat  /etc/keepalived/keepalived.conf

global_defs {

   notification_email {

     tt@linux.com

   }

   notification_email_from root@tt.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 {       #只有该部分与master有区别

    state BACKUP           #角色

    interface eth0  

    virtual_router_id 51   

    priority 90            #权重

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 123456

    }

    virtual_ipaddress {

        192.168.3.100

    }   

    track_script {

        chk_nginx

    }   

}


2、[root@test ~]# 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

                /etc/init.d/keepalived stop     #在此停止Keepalived服务是为了避免发生脑裂

        fi

fi

3、[root@test ~]# chmod 755 /usr/local/sbin/check_ng.sh

4、[root@test ~]# /etc/init.d/keepalived start

5、[root@test ~]# ps -ef | grep keep

root      7473     1  0 10:47 ?        00:00:00 /usr/sbin/keepalived -D

root      7474  7473  0 10:47 ?        00:00:00 /usr/sbin/keepalived -D

root      7475  7473  0 10:47 ?        00:00:00 /usr/sbin/keepalived -D

root      7479  3017  0 10:47 pts/0    00:00:00 grep keep


验证:

宕机前的验证

1、访问master:

59d14df0453b8bb90f0cbfc58ba205b1.png-wh_


2、访问从服务器

b901647cf12de98ec37e4ac0df10732e.png-wh_

3、访问vip

01a0ea84e8231a484e64eb81d44217e8.png-wh_

master宕机后:

关闭Keepalived服务:

[root@centos7 ~]# systemctl stop keepalived

[root@centos7 ~]# ps -ef | grep keep

root      25316  16637  0 10:58 pts/0    00:00:00 grep --color=auto keep


此时主机上已经没有vip了,vip已经转移到了从服务器上

[root@test ~]# ip addr

 inet 192.168.3.83/24 brd 192.168.3.255 scope global eth0

 inet 192.168.3.100/32

访问vip时已转移到备份上:


2ee3e1aca9cb271cdb5e9cfab6696fe9.png-wh_

现将主服务器keepalived启动:

[root@centos7 ~]# systemctl start keepalived

vip又转移到了主服务器上,从服务器上已经没有vip了


再次访问vip,又回到主服务器上了。

417cc3ead4d875b604f0f3033de7a894.png-wh_










本文转自 iekegz 51CTO博客,原文链接:http://blog.51cto.com/jacksoner/1984020,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
Android开发
GB28181设备控制和TeleBoot远程启动命令探究
源设备向目标设备发送设备控制命令,控制命令的类型包括球机/云台控制、远程启动、录像控制、 报警布防/撤防、报警复位、强制关键帧、拉框放大、拉框缩小、看守位控制、设备配置等。
239 0
Qt提升控件类为自定义类
Qt提升控件类为自定义类
425 0
|
小程序
UniApp video 使用(自定义进度条,及微信无法暂停播放设置进度问题)
UniApp video 使用(自定义进度条,及微信无法暂停播放设置进度问题)
2173 0
|
开发框架 安全 .NET
文件上传绕过】——解析漏洞_IIS6.0解析漏洞
文件上传绕过】——解析漏洞_IIS6.0解析漏洞
429 4
|
前端开发 JavaScript Java
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
本文介绍了一个结合SpringBoot和Python的实用功能,旨在监控iPhone 15的库存状态并通过邮件提醒用户。系统采用SpringBoot监听苹果官网API,解析JSON数据判断是否有货,并展示最近的库存记录。此外,还能自动触发Selenium+Python脚本实现自动化购买。文中详细介绍了技术栈、接口分析、邮件配置及自动化脚本的设置方法。该项目不仅适用于熟悉后端开发的人员,也适合回顾Layui和Jquery等前端技术。
208 0
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
|
9月前
|
弹性计算 监控 安全
云上IT“新”治理:体系化助力企业上好云、用好云、管好云
随着云计算的普及,企业上云已不再是难题,如何用好和管好云成为新的挑战。阿里云通过Landing Zone和Well-Architected Framework(WAF)帮助企业搭建安全合规、可扩展的多账号环境,并提供涵盖安全、稳定性、效率、成本和性能五大支柱的最佳实践。其中,Landing Zone助企业构建隔离环境,内置财务管理、资源规划等模块;WAF则提供详细指导原则,确保企业在云上的应用环境安全、稳定、高效。此外,阿里云还推出了一系列工具和服务,如身份权限管理、配置审计、成本分析等,助力企业提升云治理成熟度。
|
11月前
|
缓存 前端开发 JavaScript
前端serverless探索之组件单独部署时,利用rxjs实现业务状态与vue-react-angular等框架的响应式状态映射
本文深入探讨了如何将RxJS与Vue、React、Angular三大前端框架进行集成,通过抽象出辅助方法`useRx`和`pushPipe`,实现跨框架的状态管理。具体介绍了各框架的响应式机制,展示了如何将RxJS的Observable对象转化为框架的响应式数据,并通过示例代码演示了使用方法。此外,还讨论了全局状态源与WebComponent的部署优化,以及一些实践中的改进点。这些方法不仅简化了异步编程,还提升了代码的可读性和可维护性。
246 2
|
测试技术 持续交付 开发工具
掌握 Git 钩子:提升代码质量和团队协作效率
在软件开发中,保证代码质量和团队协作至关重要。Git 钩子通过在特定操作(如提交、推送)时自动执行脚本,增强了代码审查、自动化测试和持续集成。常见钩子类型包括 `pre-commit`、`post-commit`、`pre-push` 和 `post-receive`。通过配置这些钩子,开发者可以实现代码风格检查、自动化测试和自动部署等任务,从而提升代码质量和团队协作效率。例如,`pre-commit` 钩子可用于运行 ESLint 检查 JavaScript 代码风格,确保每次提交都符合编码规范。
|
人工智能 Shell Linux
探索ls命令中的通配符匹配
探索ls命令中的通配符匹配
264 1
|
存储 安全 物联网
非结构化物联网数据安全保护
非结构化物联网数据安全保护
212 0