keepalived + nginx 实现高可用
原理
nginx 可以实现负载均衡,但 nginx 自身存在单点故障的问题,这时候最先想到的就是 keepalived,可以解决单点故障的问题
由于没有使用 lvs,所以这里 nginx 之间不存在负载均衡
同时,如果 keepalived 的 master 节点 nginx 服务宕了以后,如果 keepalived 还在运行,则用户就访问不到 nginx 服务了,所以需要添加监控脚本,当 nginx 宕机时,杀死本机的 keepalived 服务
这样,keepalived 的 master 就会切换,同时用户访问的 nginx 服务也会切换到原来的 backup 节点
测试节点
| RIP | VIP | |
| MASTER | 192.168.132.136 | 192.168.132.200 |
| SLAVE | 192.168.132.140 | 192.168.132.200 |
配置nginx
yum -y install nginx
systemctl start nginx
配置keepalived
global_defs {
notification_email {
chen@test.com
}
notification_email_from chen@test.com
smtp_server smtp.exmail.qq.com
smtp_connect_timeout
router_id my-slave
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval
}
vrrp_instance my_nginx {
state MASTER # BACKUP 节点这里配置成 BACKUP
interface ens37
virtual_router_id
priority # BACKUP 节点配置要比该值小
advert_int
# vrrp_script定义的chk_nginx需要放到vrrp_instance里,用track_script指定,才能执行
track_script {
chk_nginx
}
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.132.200/ dev ens37 label ens37:
}
}
#!/bin/bash # 注意,整个脚本的执行时间必须小于keepalived中定义的时间间隔,即interval定义的时间,否则下次执行脚本时,会杀死上次正在执行的脚本
systemctl status nginx &> /dev/null
# 检查nginx状态,nginx正常运行,$?为0,否则为非零数
if [ $? -ne ];then
systemctl start nginx # 启动nginx后等待2s,保证nginx已经正常启动运行,如果nginx还未正常运行,则关闭keepalived服务,使用备用keepalived
sleep
systemctl status nginx &> /dev/null if [ $? -ne ];then
systemctl stop keepalived
fi
fi
keepalived 配置公网虚拟IP
| 服务器 | 内网 | 外网 |
| A | 192.168.10.30 | 118.110.20.14 |
| B | 192.168.10.40 |
方法一:
[admin@test ~]$ cat /etc/sysconfig/network-scripts/ifcfg-ens160
# 其中大部分配置都不是必须的,只需要能保证网卡能正常启动且不包含IP即可
HWADDR=:::8b::
NAME=ens160
# GATEWAY=118.110.20.12
# NETMASK=255.255.255.240
# IPADDR=118.110.20.14
DNS1=8.8.4.4
DNS2=8.8.8.8
DOMAIN=example
DEVICE=ens160
ONBOOT=yes
USERCTL=no
BOOTPROTO=static
PEERDNS=no check_link_down() {
return ;
}
# 这里只列出了主要部分,其他部分按照前面的例子来即可
vrrp_instance my_nginx {
state MASTER
interface ens224 # 这里必须写成内网网卡名,不能写成外网网卡名
virtual_router_id
priority
advert_int track_script {
chk_nginx
} authentication {
auth_type PASS
auth_pass 111111
}
virtual_ipaddress {
118.110.20.14/ dev ens160 # 这里配置和上面的例子不一样,相当于直接配置ens160网卡,没用到label
}
virtual_routes {
default via 118.110.20.12 # 这里配置默认路由
}
}
Cannot find an IP address to use for interface
方法二:
[root@test sites]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
HWADDR=:::8b:0e:
NAME=ens160
GATEWAY=118.110.20.12
DNS1=8.8.4.4
DNS2=8.8.8.8
DOMAIN=example
DEVICE=ens160
ONBOOT=yes
USERCTL=no
BOOTPROTO=static
NETMASK=255.255.255.240
IPADDR=118.110.20.14
PEERDNS=no check_link_down() {
return ;
}
vrrp_instance my_nginx {
state BACKUP
interface ens224 # 这里必须写成内网网卡名,不能写成外网网卡名
virtual_router_id
priority
advert_int
track_script {
chk_nginx
}
authentication {
auth_type PASS
auth_pass 111111
}
notify_master /etc/keepalived/script/master.sh
notify_backup /etc/keepalived/script/backup.sh
}
#!/bin/bash ifconfig | grep 118.110.20.14
if [ $? -ne ];then
ifconfig ens160 up
fi
#!/bin/bash # 即使已经关闭了,再执行该命令也不会有报错,所以不用做判定
ifconfig ens160 down
keepalived + nginx 实现高可用的更多相关文章
- Keepalived+Nginx实现高可用Web负载均衡
1.安装编译 Nginx 所需的依赖包# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zli ...
- Keepalived+Nginx实现高可用(HA)
Keepalived+Nginx实现高可用(HA) service iptables stopchkconfig iptables offsetenforce 0/etc/selinux/config ...
- Dubbo入门到精通学习笔记(十六):Keepalived+Nginx实现高可用Web负载均衡
文章目录 Keepalived+Nginx实现高可用Web负载均衡 Keepalived+Nginx实现高可用Web负载均衡 高可用架构篇 Keepalived + Nginx 实现高可用 Web 负 ...
- Keepalived + Nginx 实现高可用 Web 负载均衡
一.Keepalived 简要介绍 Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前 ...
- [转]搭建Keepalived+Nginx+Tomcat高可用负载均衡架构
[原文]https://www.toutiao.com/i6591714650205716996/ 一.概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最 ...
- KeepAlived+Nginx实现高可用负载
一.环境及安装版本: centos6.5.Nginx1.4.7.keepalived1.3.2 虚拟IP 真是IP Nginx端口 主从分配 10.0.90.215 10.0.90.217 80 MA ...
- Keepalived+Nginx实现高可用负载均衡集群
一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+nginx双主高可用负载均衡集群及LAMP应用keepalived-1 ...
- Linux巩固记录(9) keepalived+nginx搭建高可用负载分发环境
环境准备(继续服用hadoop节点) slave1 192.168.2.201(CentOs 7) slave2 192.168.2.202(CentOs 7) slave1 和 slave2 上 ...
- Keepalived+Nginx实现高可用和双主节点负载均衡
简介 Nginx可以实现高并发反向代理,lvs集群可以实现负载均衡,但是他们都有一个共同的弊端,就是Nginx,lvs架构中Director是单点故障,有没有一个好的方案解决这个问题呢?答案是有.通过 ...
- keepalived + nginx实现高可用
1. Keepalived介绍 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat.corosync.pacemaker. ...
随机推荐
- Spring Boot 20170913
SpringBoot 是做微服务的,比如只用来发邮件,只用来上载文件等等.优点是开发极其简单,约定大于俗成,缺点是不适合小型项目.通常用来分解大型项目,做成多个微服务. 参考: http://www. ...
- Oracle的分页查询及内联视图和函数处理
1.Oracle的分页常用方式: select * from(select * ,ROWNUM num from table where ROWNUM<=20 ) where num>0; ...
- BZOJ 1492 [NOI2007]货币兑换Cash (CDQ分治/splay 维护凸包)
题目大意:太长了略 splay调了两天一直WA弃疗了 首先,我们可以猜一个贪心,如果买/卖,就一定都买/卖掉,否则不买/卖 反正货币的行情都是已知的,没有任何风险,所以肯定要选择最最最优的方案了 容易 ...
- Laravel源码解析之从入口开始
前言 提升能力的方法并非使用更多工具,而是解刨自己所使用的工具.今天我们从Laravel启动的第一步开始讲起. 入口文件 laravel是单入口框架,所有请求必将经过index.php define( ...
- python_三级字典
data = { "北京":{ "昌平":{ "沙河":["oldboy","test"], &qu ...
- Spring MVC中 提交表单报错400
背景: 在写SpringMVC表单提交的代码的时,在最后点击提交的时候总是会出现400的错误 原因: 主要原因就是表单提交的数据和对应实体类的属性无法完全匹配 解决方案: 查看我们提交的数据是否完全和 ...
- [luogu] P3294 [SCOI2016]背单词 (贪心)
题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,"我怎么样才能快点学完,然后去玩三国杀呢?".这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他 ...
- Golang-import-introduce
本文主要讲解golang中import关键字的用法 import( "fmt" ) //然后在代码里面可以通过如下的方式调用 fmt.Println("hello wor ...
- 12:打印 1 到最大的 n 位数
题目:输入数字 n.按顺序打印出从 1 到 最大的 n 位十进制数.比方输入 3 ,则打印出 1.2 .3 一直到最大的3位数即 999. 解析: easy知道不能用 int 等数字类型表示(大数问题 ...
- c#将List<T>转换成DataSet
/// <summary> /// List<T> 转换成DataSet /// </summary> /// &l ...