1.下载安装

下载keepalived地址:http://www.keepalived.org/download.html
解压安装:
tar -zxvf keepalived-1.2..tar.gz 安装openssl依赖
yum install -y openssl openssl-devel
cd keepalived-1.2./
./configure --prefix=/$URL/keepalived(这个是你解压的keepalived的目录下的keepalived,这个命令目前找不到博客说是用来干哈的,等找到了这里更新一下。。) 安装
make && make install

2.安装为系统服务

创建文件夹,将keepalived配置文件进行复制:($URL是你装keepalived的地方 )
mkdir /etc/keepalived
cp /$URL/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
然后复制keepalived脚本文件:
cp /$URL/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /$URL/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#使用whereis keepalived可以查看keepalived的相对位置
ln -s /$URL/sbin/keepalived /usr/sbin/ #这句可以不用执行,只执行下面这一句就可以了
ln -s /$URL/local/keepalived/sbin/keepalived /sbin/

可见安装为系统服务的时候需要在/user/sbin下面有这样的一个软连接。

这个时候可以启动一下service keepalived start试试看成功了么

3.修改配置文件

vi /etc/keepalived/keepalived.conf

主:

! Configuration File for keepalived

global_defs {
router_id bhz005 ##标识节点的字符串,通常为hostname
}
## keepalived 会定时执行脚本并且对脚本的执行结果进行分析,动态调整vrrp_instance的优先级。这里的权重weight 是与下面的优先级priority有关,如果执行了一次检查脚本成功,则权重会-,也就是由100 - 变成了80,Master 的优先级为80 就低于了Backup的优先级90,那么会进行自动的主备切换。
如果脚本执行结果为0并且weight配置的值大于0,则优先级会相应增加。
如果脚本执行结果不为0 并且weight配置的值小于0,则优先级会相应减少。
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
interval ##检测时间间隔
weight - ## 如果条件成立则权重减20(-)
}
## 定义虚拟路由 VI_1为自定义标识。
vrrp_instance VI_1 {
state MASTER ## 主节点为MASTER,备份节点为BACKUP
## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是eth6)
interface eth6
virtual_router_id ## 虚拟路由ID号
mcast_src_ip 192.168.1.172 ## 本机ip地址
priority ##优先级配置(-254的值)
Nopreempt ##
advert_int ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {
auth_type PASS
auth_pass bhz ## 真实生产环境下对密码进行匹配
} track_script {
chk_nginx
} virtual_ipaddress {
192.168.1.170 ## 虚拟ip(vip),可以指定多个
}
}

! Configuration File for keepalived

global_defs {
router_id bhz006
} vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval
weight -
} vrrp_instance VI_1 {
state BACKUP
interface eth7
virtual_router_id
mcast_src_ip 192.168.1.173
priority ##优先级配置
advert_int
authentication {
auth_type PASS
auth_pass bhz
} track_script {
chk_nginx
} virtual_ipaddress {
192.168.1.170
}
}

注意:当前为抢占式配置,也就是说,master在宕机后backup会顶上去成为主。然后原来的master修好以后,会回来抢夺master的位置。非抢占式就是说master即使宕机了然后修好回来,也不会和当前的新master争夺新的位置,是吧,大不了本阿哥不当皇帝,佛着也挺好的。那么怎么配置佛系非抢占呢?将主和从的状态都变为backup,加上nopreempt 即可不争夺资源,但是这种情况下,心跳脚本必须检测我们nginx的状况,当nginx挂了的时候拉起来,实在拉不起来的时候就得杀掉我们的keepalived,否则的话不能实现切换。

nopreempt 

4.脚本编写

脚本的编写思路就像上面非抢占的说的,检测nginx进程,然后进程为0的话拉起nginx,如果nginx是扶不起来的阿斗的话把keepalived杀了。

#!/bin/bash
echo "[nginx_check.sh]:now prepareing to healthy check " >> /var/log/messages
n=`ps -C nginx --no-heading|wc -l`
if [ $n -eq "0" ]; then
echo "[ nginx_check.sh]:now start nginx">> /var/log/messages
systemctl start nginx
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ]; then
echo "[nginx_check.sh]:nginx down,keepalived will stop" >> /var/log/messages
systemctl stop keepalived
fi
fi

 写完一定要赋予这个脚本权限,我这里直接给出最简单的777哈

chmod 777 /etc/keepalived/nginx_check.sh

5.启动keepalived(得先启动nginx)

service nginx start
service keepalived start
ps -ef | grep nginx
ps -ef | grep keepalived

这时候keepalived的控制台会一直打印日志

如果启动出错,通过systemctl status keepalived.service查看错误日志

如果报错如下:

[root@BanAn-nginx2 sbin]# systemctl status keepalived.service
● keepalived.service - SYSV: Start and stop Keepalived
Loaded: loaded (/etc/rc.d/init.d/keepalived; bad; vendor preset: disabled)
Active: failed (Result: exit-code) since 一 2018-12-17 17:02:33 CST; 1min 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 25668 ExecStart=/etc/rc.d/init.d/keepalived start (code=exited, status=1/FAILURE) 12月 17 17:02:33 BanAn-nginx2 systemd[1]: Starting SYSV: Start and sto....
12月 17 17:02:33 BanAn-nginx2 keepalived[25668]: Starting keepalived: /…令
12月 17 17:02:33 BanAn-nginx2 keepalived[25668]: [失败]
12月 17 17:02:33 BanAn-nginx2 systemd[1]: keepalived.service: control ...1
12月 17 17:02:33 BanAn-nginx2 systemd[1]: Failed to start SYSV: Start ....
12月 17 17:02:33 BanAn-nginx2 systemd[1]: Unit keepalived.service ente....
12月 17 17:02:33 BanAn-nginx2 systemd[1]: keepalived.service failed.
Hint: Some lines were ellipsized, use -l to show in full.
[root@BanAn-nginx2 sbin]# systemctl status keepalived.service -l
● keepalived.service - SYSV: Start and stop Keepalived
Loaded: loaded (/etc/rc.d/init.d/keepalived; bad; vendor preset: disabled)
Active: failed (Result: exit-code) since 一 2018-12-17 17:02:33 CST; 2min 9s ago
Docs: man:systemd-sysv-generator(8)
Process: 25668 ExecStart=/etc/rc.d/init.d/keepalived start (code=exited, status=1/FAILURE) 12月 17 17:02:33 BanAn-nginx2 systemd[1]: Starting SYSV: Start and stop Keepalived...
12月 17 17:02:33 BanAn-nginx2 keepalived[25668]: Starting keepalived: /bin/bash: keepalived: 未找到命令
12月 17 17:02:33 BanAn-nginx2 keepalived[25668]: [失败]
12月 17 17:02:33 BanAn-nginx2 systemd[1]: keepalived.service: control process exited, code=exited status=1
12月 17 17:02:33 BanAn-nginx2 systemd[1]: Failed to start SYSV: Start and stop Keepalived.
12月 17 17:02:33 BanAn-nginx2 systemd[1]: Unit keepalived.service entered failed state.
12月 17 17:02:33 BanAn-nginx2 systemd[1]: keepalived.service failed.
[root@BanAn-nginx2 sbin]# cd /usr/sbin/

那么这样做就可以了

cd /usr/sbin/
rm -f keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

好的,现在的东西起来了哈!

ps:关闭keepalived:

/etc/init.d/keepalived stop

6.测试

6-1 虚拟ip查看

首先我们看看虚拟ip起来没有。不要用ifconfig,用 ip a

ip a

在这里会出现我们在主从里面配置的虚拟ip,我这里配的是18,和上面不太一样哈。如果没有出来的自己检查网卡去。

如果没有出来的话就是配置出错,如果两台主从机同时都出现这个虚拟的ip,说明发生了脑裂

6-2 脑裂问题

查看日志

tail -f  /var/log/messages

发现master和backup机都是mastaer模式启动的

通过查看别人的经历,发现VRRP基于报文实现的。master设置一定时间发送一个报文给backup如果backup没有收到就自己成为master。可推出导致问题的原因是因为backup没有收到文

所以自己成为了master。

VRRP控制报文只有一种:VRRP通告(advertisement)。它使用IP多播数据包进行封装,组地址为224.0.0.18,发布范围只限于同一局域网内。这保证了VRID在不同网络中可以重复使用。为了减少网络带宽消耗只有主控路由器才可以周期性的发送VRRP通告报文。备份路由器在连续三个通告间隔内收不到VRRP或收到优先级为0的通告后启动新的一轮VRRP选举。

centos7安装keepalived后,不关闭防火墙,虚拟ip不能实现漂移,双机都为master,不能实现双机热备的效果。原因是防火墙中没有方形vrrp的组播 IP 244.0.0.18。centos7下使用的防火请是firewall,本人不会使用centos7默认的防火墙放行组播IP,所以禁用掉centos7默认的防火墙,使用iptables防火墙。

、关闭默认的firewall防火墙
#systemctl stop firewalld.service停止firewalld服务
#systemctl disable firewalld.service进制开机自启动 、开启iptables
#yum install iptables(根据centOS7的版本和内核,有些版本已经装过,可以跳过此命令) #yum install iptables-services 、编辑iptables文件
#vim /etc/sysconfig/iptables
在文件中添加一下内容
-A OUTPUT -o eno16777736 -d 224.0.0.18 -j ACCEPT 注解:eno16777736 是网卡名称
-A OUTPUT -o eno16777736 -s 224.0.0.18 -j ACCEPT
-A INPUT -i eno16777736 -d 224.0.0.18 -j ACCEPT
-A INPUT -i eno16777736 -s 224.0.0.18 -j ACCEPT 、开启服务,设置开机自启动
#service iptables restart #chkconfig iptables on或者systemctl enable iptables.service开机自启 此时就能实现虚拟ip的漂移,当master(keepalived)挂掉时,虚拟ip会漂移到backup(keepalived)上,master启动后虚拟ip又飘逸回来。

6-3 测试方法

【1】抢占式

抢占式的配置下,首先查看日志,确定哪台是主哪些是从机。然后修改主机的nginx.conf,让该配置文件不正常。

然后service nginx stop,主机会尝试拉起来,拉不动后主机keepalived宣布over,备用机变为主机。

最后将原主机的nginx.conf恢复正常,看看原主机会不会回来夺回master,如果夺回说明抢占式配置成功。

【2】非抢占式配置

同抢占式,首先查看日志确定主从,修改主的nginx,conf,主拉不动nginx宣布keepalived凉了,于是切换备用机为主。

然后恢复之前的主,如果正常恢复而且不去抢夺说明是成功的。

ps:本项目中使用抢夺的,因为不想执行kill keepalived的进程。

nginx:负载均衡实战(四)nginx+keepalived配置双机热备的更多相关文章

  1. tomcate+keepalived配置双机热备

    环境清单: 应用1:192.168.51.101 应用2:192.168.51.75 虚拟IP:192.168.51.179 一.安装Tomcat(参照其他文档): 二.部署应用,并修改响应的端口(9 ...

  2. 使用keepalived实现双机热备

    通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.下面来以keepalived结合tom ...

  3. Nginx负载均衡和反向代理的配置和优化

    负载均衡 负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位, 反向代理 是指以代理服务器来接受internet上的请求,然后将请求转给内部的服务器 常见的负载均衡 1. ...

  4. JAVAEE——宜立方商城03:Nginx负载均衡高可用、Keepalived+Nginx实现主备

    1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务, ...

  5. nginx+keepalived实现双机热备高可用性

    搭建准备: 机器两台 ip分别为192.168.100.128 192.168.100.129(能够用虚拟机測试.虚拟机网络模式为NET模式.且为静态ip) 另外须要准备一个虚拟ip对外提供服务.即通 ...

  6. Keepalived 实现双机热备

    原理 首先有一个虚拟ip暴露给客户端,虚拟ip对应的mac地址为一台真实服务器, 即用户向虚拟ip发送一个请求,该请求会被分发到真实服务器上. 现在有2台真实服务器,一台master,一台backup ...

  7. Java技术中如何使用keepalived实现双机热备

    Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭 ...

  8. 手把手教你玩转nginx负载均衡(四)--源码安装nginx

    引言: 在上一篇,我们已经装好了虚拟机,并且已经配置好了网络,那么今天我们就要开始安装nginx服务器了. 安装工具以及过程 安装gcc编译套件以及nginx依赖模块 yum -y install g ...

  9. nginx:负载均衡实战(一)

    1.负载均衡说明 2.准备 我自己在电脑布置了两台虚拟机,两台都有nginx和tomcat,两台虚拟机布置的ip分别是37以及54,我在tomcat的首页动了点手脚,方便自己看是来自哪个ip的 接着在 ...

随机推荐

  1. 学习笔记58—3D杯子设计

    软件下载:http://www.i3done.com/ 界面如下: 3D杯子设计步骤(参考:http://www.i3done.com/news/video/402.html): 生成杯体 1.点击基 ...

  2. Codeforces E - Connected Components?

    E - Connected Components? 思路: 补图bfs,将未访问的点存进set里 代码: #include<bits/stdc++.h> using namespace s ...

  3. Hive json字符串解析

    在做数据测试时,会遇到数据库表里字段类型为json 的情况,而我们可能只关注该字段中的各别内容的信息,如下 content {"测试内容1":,"测试内容2": ...

  4. lua --- 点号 和 冒号

    冒号的作用:1.定义函数时,给函数添加隐藏的第一个参数 self2.调用函数时,默认把当前调用者作为第一个参数传递进去 如 a:b(c) 可以理解为 a.b(a, c) 以下是用点号的定义和调用函数的 ...

  5. Access大数据高效分页语句

    Access大数据高效分页语句 oracle的分页查询可以利用rowid伪列. db2的分页查询可以利用row_number() over()聚合函数. mysql有limit. access仿佛先天 ...

  6. SQLSERVER 和 ORACLE的if not exist 用法

    sql server: if not exists (select 1 from TB_Procedure where Id='2018ZZZ') BEGIN insert into TB_Proce ...

  7. Superclass和Constructor Chaining

    A subclass inherits accessible date fields and methods from its superclass. Does it inherit construc ...

  8. LeetCode--342--4的幂

    问题描述: 给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方. 示例 1: 输入: 16 输出: true 示例 2: 输入: 5 输出: false 进阶:你能不使用 ...

  9. ASP.Net MVC多语言

    .NET MVC 多语言网站 通过浏览器语言首选项改变MVC的语言,通过浏览器语言选项,修改脚本语言. 一.添加资源文件 1.添加App_GlobalResources文件夹. 2.添加默认的资源文件 ...

  10. slf4j日志用法

    在pom.xml中添加日志依赖 <!--slf4j--> <dependency> <groupId>org.slf4j</groupId> <a ...