1、准备2台服务器

  1. 服务器名LB1,假设IP为192.168.1.100
  2. 服务器名LB2,假设IP为192.168.1.101

2、在LB1,LB2上分别安装Nginx

  步骤参照:http://blog.csdn.net/yabingshi_tech/article/details/47416787

  两台机器的Nginx均修改proxy_pass,指向web服务器。

3、在LB1,LB2上分别安装Keepalive

  1.新建检查Nginx脚本

chmod +x /root/check_nginx.sh

 

vi /root/check_nginx.sh
if [ "$(ps -ef | grep "nginx:master process"| grep -v grep )" == "" ]
then
/etc/init.d/keepalived stop
else
echo "nginx is running"
fi

  加入到作业计划

crontab -e
*/1 * * * * /root/check_nginx.sh >>/root/check_nginx.log

  2.修改两台keepalived服务器配置文件

  vi /etc/keepalived/keepalived.conf

#ConfigurationFile for keepalived
global_defs {
notification_email { ######定义接受邮件的邮箱
    wangjj@hrloo.com
  } notification_email_from jiankong@staff.tuge.com ######定义发送邮件的邮箱
smtp_server mail.tuge.com
smtp_connect_timeout 10
} vrrp_script check_nginx {  ######定义监控nginx的脚本
script "/root/check_nginx.sh"
interval 2 ######监控时间间隔
weight 2 ######负载参数
} vrrp_instance vrrptest {  ######定义vrrptest实例
state BACKUP ######服务器状态
    interface eth0 ######使用的接口
virtual_router_id 51 ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换
priority 150 ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER
advert_int 1 ######服务器之间的存活检查时间
    authentication {
  auth_type PASS ######认证类型
  auth_pass ufsoft ######认证密码,一组lvs 服务器的认证密码必须一致
    } track_script {######执行监控nginx进程的脚本
check_nginx
} virtual_ipaddress {######虚拟IP地址
10.192.203.106
}
}

  3.vi /etc/sysconfig/iptables

  #注意,在两台机器上都要修改。添加:

  -A INPUT -d 10.192.203.106/32 -j ACCEPT

  -A INPUT -d 224.0.0.18 -j ACCEPT

  #第二行意思是添加VRRP通讯支持

  修改完后,重启防火墙

  service iptables restart

  4.启动keepalived

  在两台服务器上分别启动:
  service keepalived start

“脑裂”现象

由于Keepalive某些节点的失效,部分节点的网络连接会断开,并形成一个与原集群一样名字的集群,这种情况称为集群脑裂(split-brain)现象。这个非常危险,因为两个新形成的集群会同时索引和修改集群的数据。

如何避免脑裂

  • 可以采用第三方仲裁的方法。由于keepalived体系中主备两台机器所处的状态与对方有关。如果主备机器之间的通信出了网题,就会发生脑裂,此时keepalived体系中会出现双主的情况,产生资源竞争。
  • 一般可以引入仲裁来解决这个问题,即每个节点必须判断自身的状态。最简单的一种操作方法是,在主备的keepalived的配置文件中增加check配置,服务器周期性地ping一下网关,如果ping不通则认为自身有问题 。
  • 最容易的是借助keepalived提供的vrrp_script及track_script实现。如下所示。

  增加仲裁的配置:

  

global_defs {
router_id LVS_DEVEL
}
track_script {
check_local
}
vrrp_script check_local {
script "/root/check_gateway.sh"
interval 5
}
vrrp_sync_group VG_1 {
group {
VI_1
}
notify_master /root/slave2master.py
notify_backup /root/master2slave.py
} vrrp_instance VI_1 {
vrrp_unicast_bind 192.168.150.21
vrrp_unicast_peer 192.168.150.20
state BACKUP
interface manbr
virtual_router_id 51
nopreempt
priority 100
advert_int 10
authentication {
auth_type PASS
auth_pass XXXX
}
virtual_ipaddress {
192.168.150.23 dev manbr
}
}

check_gateway.sh 就是我们的仲裁逻辑,发现ping不通网关,则关闭keepalived service keepalived stop。

该方法在服务器通信正常之后无法再将keepalived启动起来。

最新文章

  1. C#中一些常用的加密和哈希处理
  2. The type String cannot be constructed. You must configure the container to supply this value.
  3. 多个Jar包的合并操作
  4. IOS圆头像
  5. 【代码笔记】iOS-清除图片缓存UIActionSheet
  6. CF 371B Fox Dividing Cheese[数论]
  7. C#中用PadLeft、PadRight 补足位数
  8. Android打包常见错误之Export aborted because fatal lint errors were found
  9. 关于swiper的滚动条滑动
  10. Python_linux环境变量和软链接(个人理解)
  11. WCF和委托
  12. Jrebel 配置
  13. js中创建数组,并往数组里添加元素
  14. tf更新tensor/自定义层
  15. es6合并数组...
  16. 实现首字母或拼音检索-sql语句方式
  17. Catch That Cow (bfs)
  18. Linux内核哈希表分析与应用
  19. [转] map/reduce
  20. DataGridView使用技巧十:单元格表示值的自定义

热门文章

  1. django用包来组织模型
  2. Insert Delete GetRandom O(1)
  3. 【异常】Caused by: java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Around
  4. 20170112xlVBA查询SQL
  5. Maven部署web应用到远程服务器
  6. windows下apache利用SSL来配置https
  7. ansible-playbook快速入门填坑
  8. UVA-1629 Cake slicing (DP、记忆化搜索)
  9. bzoj2463
  10. Linux免密码登陆