keepalive+nginx 热备跟负载均衡
结构图

keepalived配置
master跟backup除了state跟优先级,其它一样,优先级master需大于backup
! Configuration File for keepalived
global_defs {
notification_email {
#acassen@firewall.loc
#failover@firewall.loc
#sysadmin@firewall.loc
}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server 192.168.200.1
#smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/chk_nginx.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 51
priority 30
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.233
}
notify_master "/usr/bin/python2.7 /etc/keepalived/send.py XXX@qq.com 报!222成为主机! 报!222成为主机!"
notify_fault "/usr/bin/python2.7 /etc/keepalived/send.py XXX@qq.com 报!222已挂! 10.0.0.222故障!请尽快修复!"
track_script {
chk_nginx
}
}
其中检测nginx状态的脚本如下,当发现自身nginx没有运行,杀掉keepalived的进程
脚本运行不了可能是centos shell运行报语法错误: 未预期的文件结尾
#!/bin/bash
run=`ps -C nginx --no-header | wc -l`
if [ $run -eq 0 ]; then
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx
sleep 3
if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then
systemctl stop keepalived
fi
fi
其中,调用python发送邮件的代码
# coding=utf-8
import smtplib,sys
from email.mime.text import MIMEText class Msmtp():
def __init__(self, target, subject, content):#收件人、标题、内容
self.msg_from = '发出邮件的邮箱'
self.password = '邮箱的授权码'
self.sender = smtplib.SMTP_SSL("smtp.qq.com", 465)
self.msg_to = target
self.subject = subject
self.content = content def _login(self):
self.sender.login(self.msg_from, self.password) def _msg(self):
self.msg = MIMEText(self.content)
self.msg['Subject'] = self.subject
self.msg['From'] = self.msg_from
self.msg['To'] = self.msg_to def send_mail(self):
self._login()
self._msg()
self.sender.sendmail(self.msg_from, self.msg_to, self.msg.as_string())
self.sender.quit() if __name__ == '__main__':
a = Msmtp(sys.argv[1], sys.argv[2], sys.argv[3])
a.send_mail()
nginx配置
#user nobody;
worker_processes 1; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; #gzip on; upstream hello1 {#负载均衡
server 10.0.0.111:6666 max_fails=3 fail_timeout=3600s;#后台有问题3600s内不访问
server 10.0.0.222:6666 max_fails=3 fail_timeout=3600s;#后台性能瓶颈的话直接在此加后台
#server 10.0.0.18:80 max_fails=3 fail_timeout=3600s;#可直接转发到nginx或者tomcat等其他服务器上
} server {
listen 80;
server_name localhost; charset utf-8; location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 666;
server_name 10.0.0.233;#监听虚拟IP charset utf-8; location /{
root html;
index index.html index.htm;
}
location /hello{
proxy_pass http://hello1/hello;
}
}
}
测试后台代码
# encoding=utf8
from flask import Flask, request app = Flask(__name__)
app.app_context().push() @app.route('/hello')
def hello():
ip = request.remote_addr
return 'hello world<br/>我是10.0.0.222<br/>访问者IP为: '+ip def runFlask(port):
app.run(host='0.0.0.0',port=port)
CORS(app, supports_credentials=True) if '__main__' == __name__:
runFlask(6666)
检测数据包代码
tcpdump -nn -c -i any host 224.0.0.18
测试(我是xxx,是后台ip,访问者ip为nginx ip)
1. 10.0.0.111跟10.0.0.222均开启nginx及keepalived,虚拟ip在111上,随机访问后台


2. 10.0.0.111关掉nginx,关掉keepalived(模拟启动nginx失败场景),虚拟ip转到222上,随机访问后台,并且收到ip转移邮件
/usr/local/nginx/sbin/nginx -s stop
systemctl stop keepalived



3. 关掉10.0.0.111上的后台,只访问222的后台,速度正常



4.启动10.0.0.111上的nginx跟keepalived,虚拟ip重回111



keepalive+nginx 热备跟负载均衡的更多相关文章
- keepalived+LVS 实现双机热备、负载均衡、失效转移 高性能 高可用 高伸缩性 服务器集群
本章笔者亲自动手,使用LVS技术实现实现一个可以支持庞大访问量.高可用性.高伸缩性的服务器集群 在读本章之前,可能有不少读者尚未使用该技术,或者部分读者使用Nginx实现应用层的负载均衡.这里大家都可 ...
- nginx负载均衡三:keepalive+nginx双机热备 和负载均衡
环境 centos7.0 nginx:1.15 1.主备四台服务器 f1:负载均衡 192.168.70.169 f2:web站点 192.168.70.170 f3:web站点 192.168 ...
- Nginx+Keepalived 实现双击热备及负载均衡
Nginx master : 10.1.58.191 Nginx负载均衡主机 Nginx slave : 10.1.58.181 Nginx负载均衡备机Nginx_VIP_TP: 10 ...
- Mysql 如何做双机热备和负载均衡 (方法二)
先简要介绍一下mysql双向热备:mysql从3.23.15版本以后提供数据库复制功能.利用该功能可以实现两个数据库同步,主从模式(A->B),互相备份模式(A<=>B)的功能. m ...
- Mysql 如何做双机热备和负载均衡
MySQL数据库没有增量备份的机制,但它提供了一种主从备份的机制,就是把主数据库的所有的数据同时写到备份数据库中.实现MySQL数据库的热备份. 下面是具体的主从热备份的步骤:假设主服务器A(mast ...
- Mysql 如何做双机热备和负载均衡 (方法一)
MySQL数据库没有增量备份的机制,但它提供了一种主从备份的机制,就是把主数据库的所有的数据同时写到备份数据库中.实现MySQL数据库的热备份. 下面是具体的主从热备份的步骤:假设主服务器A(mast ...
- Keepalive+nginx实现高可用负载均衡方案
Keepalive+nginx实现高可用负载均衡方案 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.nginx做高可用工作在第几层? 上个月我发表了一篇keepalive+lv ...
- Nginx+keepalived做双机热备加tomcat负载均衡
Nginx+keepalived做双机热备加tomcat负载均衡 环境说明: nginx1:192.168.2.47 nginx2:192.168.2.48 tomcat1:192.168.2.49 ...
- Nginx代理功能与负载均衡详解
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...
随机推荐
- Oracle重新获取统计信息以及SQLSERVER重建索引
Oracle重新获取统计信息 exec dbms_stats.gather_schema_stats(ownname =>'LCoe739999',options => 'GATHER', ...
- 操作系统+编程语言的分类+执行python程序的两种方式+变量
1.什么是操作系统? 操作系统就是一个协调\管理\控制计算机硬件资源与软件资源的一个控制程序. 2.为何要操作系统? a.把复杂的硬件操作封装成简单的功能\接口用来给用户或者程序来使用(文件) b.把 ...
- 关于python format()用法详解
str.format() 这个特性从python2.6而来 其实实现的效果和%有些类似 不过有些地方更方便 通过位置映射: In [1]: '{0},{1}'.format('kzc',18) Out ...
- python的数据相关框架
ipython 多种编程语言之间进行交互计算的命令行shell graphlab greate 快速构建大型高性能数据产品 pandas 数据分析 pulp 线性编程模型 matplotlib sci ...
- 【Linux】工作管理
在进行工作管理的行为中,其实每个工作都是目前bash的子进程,即彼此间是有相关性的.我们无法以job control的方式由tty1的环境去管理tty2的bash 当只有一个终端时,可以出现提示符让你 ...
- BZOJ4034[HAOI2015]树上操作——树链剖分+线段树
题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...
- BZOJ4408&4299[Fjoi 2016]神秘数——主席树
题目描述 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = ...
- 小程序源码下载[demo整理自github]
微信小程序的火热程度大家都有所了解,也有很多牛人写了不错的小程序,今天ytkah就整理一些github上的小程序开源项目,源码可以直接下载来用,感兴趣的朋友赶紧去看看吧!以下小程序排名按star的数量 ...
- P1306 斐波那契公约数
题目描述 对于Fibonacci数列:1,1,2,3,5,8,13......大家应该很熟悉吧~~~但是现在有一个很“简单”问题:第n项和第m项的最大公约数是多少? 输入输出格式 输入格式: 两个正整 ...
- [TJOI2011]构造矩阵
考虑优化贪心,不回溯,对于每一位,你都判一下放0的话后面是否有解,用网络流判是否可以完美匹配就行了. 但这样时间复杂是错的,所以不必每次都重新建图,现在原来的图中看一下该行列是否已经匹配,若没有,则强 ...