keepalived实现nginx高可用

作者:逍遥无谓 时间:2021-06-02 06:55:05 

keepalived直译就是保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,keepalived实现的基础是vrrp,至于vrrp是什么请直接看这里vrrp,下面我们直接看应用吧。

keepalived使用

为了方便使用,写了一个基于ubuntu 16.04 server 的一键配置脚本,配置使用相关就在脚本里见吧


#!/bin/bash
# nginx+keepalived 高可用一键脚本for ubuntu 16.04

if [ $# -ne 4 ]; then
echo "USAGE: $0 [MASTER|BACKUP] priority interface virtual_ipaddress"
exit 0
fi

echo -e 'Installing nginx'
apt-get install nginx -y > /dev/null 2<&1

echo -e 'Installing keepalived'
apt-get install keepalived -y > /dev/null 2<&1

echo -e 'Configuring keepalived'
if [ ! -e /etc/keepalived ];then
mkdir /etc/keepalived
fi
cat > /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
notification_email {
 chencheng199211@gmail.com
}
notification_email_from email #表示发送通知邮件时邮件源地址是谁
smtp_server 127.0.0.1 #表示发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
smtp_connect_timeout 30
router_id master #机器标识
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2 #脚本执行间隔,单位秒
weight -5 #脚本结果导致的优先级变更:10表示优先级+10;-10则表示优先级-10
fall 3
rise 2
}

vrrp_instance VI_1 {
state $1 #state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定,里如果这里设置为master,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为master
interface $3 #实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的
virtual_router_id 51 #这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址
priority $2 #设置本节点的优先级,优先级高的为master
advert_int 2 #检查间隔,默认为1秒
authentication { #这里设置认证
 auth_type PASS #认证方式,可以是PASS或AH两种认证方式
 auth_pass 1111 #认证密码
}
virtual_ipaddress { #这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址
 $4
}
track_script {
 chk_nginx
}

#dont_track_primary:忽略VRRP的interface错误
#track_interface:跟踪接口,设置额外的监控,里面任意一块网卡出现问题,都会进入故障(FAULT)状态,例如,用nginx做均衡器的时候,内网必须正常工作,如果内网出问题了,这个均衡器也就无法运作了,所以必须对内外网同时做健康检查
#mcast_src_ip:发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
#garp_master_delay:在切换到master状态后,延迟进行免费的ARP(gratuitous ARP)请求
#virtual_routes:原理和virtual ipaddress一样,只不过这里是增加和删除路由
#lvs_sync_daemon_interface:lvs syncd绑定的网卡
#nopreempt:设置不抢占,这里只能设置在state为backup的节点上,而且这个节点的优先级必须别另外的高。当主mysql恢复后不抢占资源
#preempt_delay:抢占延迟
#debug:debug级别
#notify_master:表示当切换到master状态时,要执行的脚本
#notify_backup:表示当切换到backup状态时,要执行的脚本
#notify_fault:
}
EOF

cat > /etc/keepalived/check_nginx.sh <<EOF
#!/bin/bash
# description:
# 定时查看nginx是否存在,如果不存在则启动nginx
# 如果启动失败,则停止keepalived
status=$(ps -C nginx --no-heading | wc -l)
if [ "${status}" = "0" ]; then
 service nginx start
 sleep 2
 status2=$(ps -C nginx --no-heading | wc -l)
 if [ "${status2}" = "0" ]; then
   /etc/init.d/keepalived stop
 fi
fi
EOF

echo -e "enable boot and starting"
service keepalived start
service nginx start

来源:http://www.cnblogs.com/learningchencheng/p/7716945.html

标签:keepalived,nginx,高可用
0
投稿

猜你喜欢

  • 在Linux 服务器下修改防火墙允许该端口远程访问的方法

    2023-08-07 05:18:23
  • Docker 运行多个Springboot的详细教程

    2023-04-11 07:53:04
  • 站长必须关注的几个“关键词”

    2008-08-13 13:17:00
  • 在VMware Workstation中搭建VMware vSphere(图文教程)

    2023-11-04 03:32:53
  • 什么是web 2.0 (4)

    2007-12-21 10:18:00
  • 在XP IIS5.1手工安装PHP 5.2.11

    2009-11-18 14:35:00
  • WEB服务器系统盘权限简单设置

    2009-07-23 12:09:00
  • 加快你浏览PTC广告的小技巧

    2009-03-11 11:28:00
  • Docker容器 日志中文乱码问题解决办法

    2023-10-01 21:29:10
  • adsense西联汇款可在账户中修改拼音姓名

    2008-01-25 16:26:00
  • 详解Ubuntu14.04桥接网络设置与SSH登陆

    2023-08-17 20:01:28
  • docker自定义网桥docker0及docker的开启,关闭,重启命令操作

    2021-08-11 16:03:36
  • UCenter Home2.0“道具转让许可证”道具使用说明

    2009-08-20 12:07:00
  • URL搜索引擎优化 绝对路径和相对路径释疑

    2009-02-01 11:09:00
  • UCenter Home隐私设置功能详解

    2009-02-16 10:11:00
  • 在Apache服务器上添加虚拟主机功能的方法

    2021-04-17 07:12:29
  • 如何设置GoDaddy主机帐户

    2010-05-01 13:14:00
  • 避免Adsense帐号被锁定的技巧

    2007-10-02 20:01:00
  • UCHome2.0特色功能之活动介绍及使用技巧

    2009-09-06 12:31:00
  • 使用VMware10安装Ubuntu 14步骤图文详解

    2022-02-18 22:14:47
  • asp之家 网站运营 m.aspxhome.com