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. ...
随机推荐
- 将数据内容动态添加到HTML中
// 申明一个数组用来装遍历的元素 var li = []; //遍历元素并加载到标签中 for(var i = 0; i<navGroup.self_first_nav.length; i++ ...
- 用私有构造器或枚举类型强化Singleton
Singleton指只有一个实例的类,只能被创建一次. 在Java1.5之前实现Singleton有两种方式,都是将构造器设为private并导出公有的静态成员实例. 第一种方式将公有的静态成员实例设 ...
- ajax请求及遍历
$(".btn").click(function(){ $.ajax({ type:"POST", url:"../../js/info.json&q ...
- Python笔记25-----------创建二维列表【浅copy】和转置
一.创建二维列表 1.二维列表创建第二维的时候,如果采用*2这种方式,这是一种浅复制的方式,同时引用到同一个list,如上图的C. 这种形式,不方便修改C[ i ][ j ]的数据,如果改C[ 0 ] ...
- reac实现控制输入框字符长度
reac实现控制输入框字符长度 代码思路:
- ASP.NET-ActionFilter过滤器用法实例
ActionFilter可以对每一个传过来的action请求进行过滤,非常有用,但是如果在这里判断过多,那么网站的性能和速度会不会变慢,这个问题值得思考,现在先放在这里. public class A ...
- Chrome插件Axure RP Extension
Chrome插件Axure RP Extension 1.将文件夹“0.6.2_0”复制到Chrome文件夹中某个位置. 2.打开Chrome,打开[设置] - [扩展程序],勾选右上角的“开发者模式 ...
- glove入门实战
前两天怒刷微博,突然发现了刘知远老师分享的微博,顿时眼前一惊.原Po例如以下: http://weibo.com/1464484735/BhbLD70wa 因为我眼下的研究方向是word2vec.暗自 ...
- Baby_Step,Gaint_Step(分析具体解释+模板)
下面是总结自他人博客资料.以及本人自己的学习经验. [Baby_Step,Gaint_Step定义] 高次同余方程. BL == N (mod P) 求解最小的L.因为数据范围非常大,暴力不行 这里用 ...
- m_Orchestrate learning system---十、解决bug最根本的操作是什么
m_Orchestrate learning system---十.解决bug最根本的操作是什么 一.总结 一句话总结:多学多练,遇到bug超级轻松 1.如何查看js代码的异常? 开发者选项里面可以查 ...