前言

LNMP 分布式集群的部署实践 系列文章:

衡量一个集群的高可用性在于没有单点故障,即其中任何一台服务器宕机都不会造成整个服务中断。

之前的LNMP分布式集群的实践中,显然在将Nginx作为负载均衡服务器时,upstream机制能检测出后端服务器是否可用,如果其中一台服务器宕机,Nginx能自动转移到后端正常的服务器中,以保持系统持续可用。

但现在只有一台负载均衡服务器,一旦该服务器发生故障,就会造成整个集群服务中断,为此,使用 keepalived 部署备用服务器,实现故障转移。

Keepalived 内置了 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)功能,用于解决静态路由出现的单点故障问题,它通过IP多播的方式通信,当发现路由故障时,通过选举策略将备用路由更换为主路由,从而继续提供服务。

Keepalived 实现了将提供对外访问的IP地址(Virtual IP)自动在主服务器(Master)和备用服务器(Backup)之间切换,正常情况下用Master,当它故障了那么监控它的Backup会通过优先级机制竞争接管Virtual IP继续对外服务,其他落选的就继续监控当前使用的 Virtual IP 服务器。

高可用环境中的服务器:

角色

Real IP(RIP)

Virtual IP(VIP)

说明

Master

192.168.177.21

192.168.177.11

Nginx + Keepalived

Backup

192.168.177.22

192.168.177.11

Nginx + Keepalived

-

192.168.177.1X

-

后端服务器集群

然后我们对之前的LNMP分布式集群架构做出更改:

这就是LNMP高可用分布式集群!

但是为了演示我们不加入集群,使用两个简单的后端服务器,RIP分别为192.168.177.23和192.168.177.24,Keepalived 服务的虚拟IP改为192.168.177.20:

角色

Real IP(RIP)

Virtual IP(VIP)

说明

Master

192.168.177.21

192.168.177.20

Nginx + Keepalived

Backup

192.168.177.22

192.168.177.20

Nginx + Keepalived

-

192.168.177.23

-

后端服务器1

-

192.168.177.24

-

后端服务器2

部署

安装和配置 keepalived 服务

部署和配置主服务器

cd /usr/local/nginx/html

echo 'This is Master' > index.html

curl http://localhost

tar -zxvf keepalived-1.2.24.tar.gz

cd keepalived-1.2.24

./configure

make && make install && cd ..

cd /usr/local/etc/rc.d/init.d

cp keepalived /etc/init.d/keepalived

chmod +x /etc/init.d/keepalived

chkconfig keepalived on

cd /usr/local/etc/sysconfig

ln -s `pwd`/keepalived /etc/sysconfig/keepalived

cd /usr/local/sbin

ln -s `pwd`/keepalived /usr/sbin/keepalived

# 配置主服务器的 keepalived

less /usr/local/etc/keepalived/keepalived.conf # 查看配置文件模板

mkdir /etc/keepalived # 手动创建默认加载的配置文件

vi /etc/keepalived/keepalived.conf

vrrp_instance VI_1 { # 配置一个虚拟路由

state MASTER

interface ens33 # 指定监测的网卡

virtual_router_id 21 #虚拟路由的标识,同一个 VRRP 的 Master 和 Backup 应一致

mcast_src_ip 192.168.177.21 # 设置 real IP,可省略,有默认自动使用主IP

priority 100 # 优先级、权重(权重最高的主机将接管 Virtual IP),范围0-254

advert_int 1 # MASTER 和 BACKUP 之间同步检查的时间间隔,单位秒

authentication {

auth_type PASS # 验证类型,PASS表示密码验证

auth_pass 123456 # 设置密码

}

virtual_ipaddress { # 配置 虚拟IP地址池,每行一个

192.168.177.20 # 为 MASTER 和 Backup 设置相同的虚拟IP

}

}

# 启动 keepalived 服务

service keepalived start

ps aux | grep keepalived

ip a | grep 192.168.177.20

#### 配置备用服务器的 keepalived

基于主服务器克隆出一台备用服务器,IP为192.168.177.22。然后打开 keepalived 配置:

```bash

vrrp_instance VI_1 {

state BACKUP # 修改身份为 BACKUP

priority 90 # 修改优先级为90(低于MASTER)

……

}

# Master 和 Backup 通过 VRRP 的 112 端口通信

iptables -I INPUT -s192.168.177.21 -p112 -jACCEPT

service iptables save

iptables -I INPUT -s192.168.177.22 -p112 -jACCEPT

service iptables save

service keepalived start # 启动 Backup服务器的 Keepalived 服务

# 区分当前访问的是哪一台服务器

cd /usr/local/nginx/html

echo 'This is Backup' > index.html

# 测试,访问192.168.177.20

service network stop

service network start

复制代码

至此就部署完毕了。

使用Keepalived 监控本机服务

除了可以监控其他服务器中的Keepalived是否正常,也可以监控本机中的某个服务是否正常:

监控本机Nginx服务

vrrp_script chk_nginx {

script "/chk_nginx.sh"

interval 2

weight -20

}

vrrp_instance VI_1 {

……

track_script {

chk_nginx

}

}

vi /chk_nginx.sh # 创建监控脚本

# !/bin/bash

if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then

service nginx start

sleep 2

if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then

service keepalived stop

fi

fi

chmod +x /chk_nginx.sh

service keepalived reload

复制代码

高可用测试

service nginx stop # 手动停用

ps -C nginx --no-header # 等待2秒,查看是否恢复启动

# 创建停止 Nginx 服务并立即取消 Nginx 程序执行权限的脚本

cd /usr/local/nginx/sbin

vi test.sh

#! /bin/bash

service nginx stop

chmod -x nginx

chmod +x test.sh

./test.sh

# 看是否自动切换到备用服务器

复制代码

LNMP 分布式集群的部署实践 系列文章:

dfface 的版权声明:所有文章除特别声明外,均采用 CC BY-NC-SA 4.0

许可协议。转载请注明出处,严禁商业用途!

linux lnmp分布式集群,LNMP 分布式集群(六):keepalived 高可用方案相关推荐

  1. Nginx反向代理,负载均衡,Redis集群 Twemproxy,redis session共享,keepalived高可用-搭建千万级网站系统

    Nginx反向代理,负载均衡,redis session共享,keepalived高可用-搭建千万级系统架构 1.安装Nginx 安装机器IP地址为: 192.168.91.129 (主) 192.1 ...

  2. MySQL集群之五大常见的MySQL高可用方案(转)

    1. 概述 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中 ...

  3. MySQL集群之五大常见的MySQL高可用方案

    1. 概述 我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中 ...

  4. PostgreSQL HA集群高可用方案介绍 pgpool-II+PostgreSQL HA方案部署

    PostgreSQL HA集群高可用方案介绍 & pgpool-II+PostgreSQL HA方案部署 一.PostgreSQL HA集群高可用方案介绍 二.pgpool-II+Postgr ...

  5. keepalived高可用集群技术介绍及实战演练

    一.Keepalived是什么 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务 ...

  6. rocketmq docker集群_【解构云原生】RocketMQ高可用方案调研及On K8S设计展望(下)...

    本文由作者授权网易云发布,未经许可,请勿转载. 作者:李海燕,网易杭州研究院云计算技术部工程师 上文链接:[解构云原生]RocketMQ高可用方案调研及On K8S设计展望(上) 四.RocketMQ ...

  7. 让数据库无惧灾难,华为云GaussDB同城双集群高可用方案正式发布!

    摘要:在华为全联接2021期间,华为云GaussDB(for openGauss)正式推出重大内核新特性--同城双集群高可用方案,提供金融级高可用服务,支持RPO=0 .RTO<60s的同城双集 ...

  8. Redis高可用方案:sentinel(哨兵模式)和集群

    一. redis高可用方案–sentinel(哨兵模式) 当我们搭建好redis主从复制方案后会发现一个问题,那就是当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力, ...

  9. Redis高可用方案-哨兵与集群

    祝大家每日进步,有技术问题多多交流,同时欢迎大家关注我的头条号:IT人孙会良 Redis高可用方案 一.名词解释 二.主从复制 Redis主从复制模式可以将主节点的数据同步给从节点,从而保障当主节点不 ...

最新文章

  1. C# 语言规范_版本5.0 (第10章 类)
  2. linux命令详解-useradd,groupadd
  3. 浅谈“领域驱动设计”
  4. Java基础学习总结(26)——JNDI入门简介
  5. printf 指针地址_c语言入门 第十四章指针
  6. win7 一些快捷系统工具命令
  7. s:selected的用法
  8. spring batch_Spring Batch作为Wildfly模块
  9. Unity的camera组件
  10. 软件测试——测试基础
  11. openfire无法启动
  12. web压力测试工具(小而精)
  13. 关闭cmd快速编辑模式
  14. 计算机漏洞安全相关的概念POC 、EXP 、VUL 、CVE 、0DAY
  15. 投资组合理论的简单介绍
  16. 云栖大会马总演讲:《未来属于善于拥抱未来的人》
  17. C函数参数中的三个点
  18. 大数据高级开发工程师——Spark学习笔记(6)
  19. 微型计算机主要技术指标是啥,微型计算机的主要技术指标
  20. 传输层安全---SSL

热门文章

  1. python基础题面试_python常见面试题
  2. JavaScript 验证API
  3. Bash 中的特殊字符大全
  4. python中xrange和range的区别
  5. Java反射,参数为数组
  6. sql with as 用法
  7. PHP添加mcrypt扩展模块(亲测)
  8. php连接mongoDB的几个问题
  9. MySQL搭建主从复制 读写分离 分库分表 MyCat高可用
  10. PHP的chunk_split() 函数把字符串分割为一连串更小的部分