一、环境准备

  1. VIP:10.18.43.30
  2. dr1:10.18.43.10
  3. dr2:10.18.43.20
  4. web1:10.18.43.13
  5. web2:10.18.43.14

  结构图

(一)、预处理

  (1)、关闭所有机器selinux,

  1. vim /etc/selinux/config
  2. # This file controls the state of SELinux on the system.
  3. # SELINUX= can take one of these three values:
  4. # enforcing - SELinux security policy is enforced.
  5. # permissive - SELinux prints warnings instead of enforcing.
  6. # disabled - No SELinux policy is loaded.
  7. SELINUX=disabled
  8. # SELINUXTYPE= can take one of three two values:
  9. # targeted - Targeted processes are protected,
  10. # minimum - Modification of targeted policy. Only selected processes are protected.
  11. # mls - Multi Level Security protection.
  12. SELINUXTYPE=targeted
  1. -------------------------------------------------------------
  1. setenforce                     #退出保存,执行setenforce 当前生效
  1.  

  (2)、关闭所有机器firewalld

  1. systemctl stop firewalld.service

  (3)、添加网卡  

  在DR1与DR2机器添加个添加一张网卡,(也可以不用添加使用本机网卡,主机有两块网卡,其中一块可以用来检测心跳,MASTER和BACKUP如果无法接收到彼此的组播通知,但是两个节点实际上都处于工作状态,这时两个节点均为MASTER强行绑定虚拟IP,从而导致脑裂。)

(二)、部署处理

部署要使用的相关软件; 

  可以在nginx 上做七层负载均衡,将四层负载均衡的请求在次分发给后端真实提供web服务的集群,根聚七层负载均衡的算法,调用一台真实wen服务器,来给用户提供服务;(这里没有做七层)

  (1)、后端部署      

nginx编译安装,(在web1和web2执行相同的操作,此处省略web2操作步骤)

  1.  
  1. groupadd nginx                          #创建nginx组
  2. useradd -r -g nginx -s /bin/nologin nginx          #创建nginx用户并取消shell
  1.  
  1. wget http://nginx.org/download/nginx-1.14.0.tar.gz #下载nginx软件包
  2. tar xf nginx-1.14..tar.gz -C /tpm/              #解压nginx源码包
  3. cd /tmp/nginx-1.14./
  4.                                   
  5. ./configure \
  6. --prefix=/usr/local/nginx \
  7. --without-select_module \
  8. --without-poll_module \
  9. --with-debug \
  10. --with-http_ssl_module \
  11. --with-http_realip_module \
  12. --with-http_addition_module \
  13. --with-http_sub_module \
  14. --with-http_dav_module \
  15. --with-http_flv_module \
  16. --with-http_xslt_module \
  17. --with-http_gzip_static_module \
  18. --with-http_random_index_module \
  19. --with-http_secure_link_module \
  20. --with-http_degradation_module \
  21. --with-http_stub_status_module \
  22. --with-cc=`which gcc`
  23.  
  24. make -j && make install

  (2)、启动nginx服务

  1. cd /usr/local/nginx/
  2. sbin/nginx
  3. [root@web1-1 nginx]# lsof -i:
  4. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  5.  
  6. nginx root 6u IPv4 0t0 TCP *:http (LISTEN)
  7.  
  8. nginx nginx 6u IPv4 0t0 TCP *:http (LISTEN)

  (3)、设置lo回环地址

       (在web1和web2,执行相同的操作)

  1. [root@web1-1 ~]# echo > /proc/sys/net/ipv4/conf/all/arp_announce
  2. [root@web1-1 ~]# echo > /proc/sys/net/ipv4/conf/all/arp_ignore
  3. [root@web1- ~]# ip a a dev lo 10.18.43.30/
  4. [root@web1- ~]# ip a
  5. : lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
  6. link/loopback ::::: brd :::::
  7. inet 127.0.0.1/ scope host lo
  8. valid_lft forever preferred_lft forever
  9. inet 10.18.43.30/ scope global lo
  10. valid_lft forever preferred_lft forever
  11. inet6 ::/ scope host
  12. valid_lft forever preferred_lft forever
  13. : eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
  14. link/ether :::ed:d6: brd ff:ff:ff:ff:ff:ff
  15. inet 10.18.43.13/ brd 10.18.43.255 scope global noprefixroute eth0
  16. valid_lft forever preferred_lft forever
  17. inet6 fe80:::ff:feed:d671/ scope link
  18. valid_lft forever preferred_lft forever

  测试后端web服务是否正常,(web1,web2执行相同操作)

  1. [root@web1- ~]# curl 10.18.43.13
  2. web1

  (4)、高可用

  下载ipvsadm,keepalived,

  1. yum -y install ipvsadm keepalived  

  (5)、keepalived部署详解

  1. [root@DR-1- ]# vim /etc/keepalived/keepalived.conf
  2. global_defs {
  3. router_id lvs    #全局配置
  4. }
  5.  
  6. vrrp_instance lvs_keepalived { #库名称
  7. state BACKUP    #角色:MASTER BACKUP
  8. interface eth0    #网卡:这里我们拿eth0做为心跳测试,检测另一台BACKUP存活状态
  9. virtual_router_id    #小组段:默认是51
  10. priority    # 服务的优先权最高255
  11. nopreempt    # BACKUP 不抢IP
  12. advert_int
  13. authentication {
  14. auth_type PASS
  15. auth_pass #小组密码
  16. }
  17. virtual_ipaddress {
  18. 10.18.43.30/32 dev eth1 # 虚拟ip
  19. }
  20. }
  21.  
  22. virtual_server 10.18.43.30 {
  23. delay_loop #延时环 6秒
  24. lb_algo rr #轮询规则rr
  25. lb_kind DR #使用的工作模式
  26. persistence_timeout #连接超时 时间
  27. protocol TCP #使用的协议
  28.  
  29. real_server 10.18.43.13 {
  30. weight #权重
  31. TCP_CHECK {
  32. connect_port #监听端口
  33. connect_timeout #连接超时3秒
  34. nb_get_retry #重试连接3次
  35. delay_before_retry #连接超时3重试连接3次
  36. }
  37. }
  38. real_server 10.18.43.14 {
  39. weight
  40. TCP_CHECK {
  41. connect_port
  42. connect_timeout
  43. nb_get_retry
  44. delay_before_retry
  45. }
  46. }
  47. }

将这份配置发给dr2,只需要修改优先级;

  1. [root@DR-2- ]# vim /etc/keepalived/keepalived.conf
  2. global_defs {
  3. router_id lvs    #全局配置,全局必须一致
  4. }
  5.  
  6. vrrp_instance lvs_keepalived { #库名称
  7. state BACKUP    #角色:MASTER BACKUP
  8. interface eth0    #网卡:这里我们拿eth0做为心跳测试,检测另一台BACKUP存活状态
  9. virtual_router_id    #小组段:默认是51
  10. priority    #注意这里的优先级
  11. nopreempt    # BACKUP 不抢IP
  12. advert_int
  13. authentication {
  14. auth_type PASS
  15. auth_pass #小组密码
  16. }
  17. virtual_ipaddress {
  18. 10.18.43.30/ dev eth1 # 虚拟ip
  19. }
  20. }
  21.  
  22. virtual_server 10.18.43.30 {
  23. delay_loop #延时环 6秒
  24. lb_algo rr #轮询规则rr
  25. lb_kind DR #使用的工作模式
  26. persistence_timeout #连接超时 时间
  27. protocol TCP #使用的协议
  28.  
  29. real_server 10.18.43.13 {
  30. weight #权重
  31. TCP_CHECK {
  32. connect_port #监听端口
  33. connect_timeout #连接超时3秒
  34. nb_get_retry #重试连接3次
  35. delay_before_retry #连接超时3重试连接3次
  36. }
  37. }
  38. real_server 10.18.43.14 {
  39. weight
  40. TCP_CHECK {
  41. connect_port
  42. connect_timeout
  43. nb_get_retry
  44. delay_before_retry
  45. }
  46. }
  47. }

  (6)、启动keepalived

  (在DR1和DR2执行相同操作)

  1. [root@DR-- ~]# systemctl start keepalived.service
  1. [root@DR-2- ~]# systemctl start keepalived.service

  (7)、查看结果

  DR1与RD2先启动那个机器,虚拟VIP就会在那个主机的第二张网卡上,(第一张网卡是用来做心跳测试的,)

  1. [root@DR-- keepalived]# ip a
  2. : lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN qlen
  3. link/loopback ::::: brd :::::
  4. inet 127.0.0.1/ scope host lo
  5. valid_lft forever preferred_lft forever
  6. inet6 ::/ scope host
  7. valid_lft forever preferred_lft forever
  8. : eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
  9. link/ether :::c9:8e: brd ff:ff:ff:ff:ff:ff
  10. inet 10.18.43.10/ brd 10.18.43.255 scope global dynamic eth0
  11. valid_lft 41215sec preferred_lft 41215sec
  12. inet6 fe80::70de::c4c6:aa/ scope link
  13. valid_lft forever preferred_lft forever
  14. : eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
  15. link/ether ::::4b:4f brd ff:ff:ff:ff:ff:ff
  16. inet 10.18.43.12/ brd 10.18.43.255 scope global dynamic eth1
  17. valid_lft 43069sec preferred_lft 43069sec
  18. inet 10.18.43.30/32 scope global eth1
  19. valid_lft forever preferred_lft forever
  20. inet6 fe80::e958:18e::b3f/ scope link
  21. valid_lft forever preferred_lft forever

二、概念补充

(1)、脑裂

一般来说,脑裂的发生,有一下几种原因;

1、高可用服务器对之间心跳线链路发生故障,导致无法正常通信;

2、因心跳线坏了,(包括断了,老化等一些物理上的原因)

3、因网卡及相关驱动坏了,IP配置及冲突问题(网卡直连)

4、因心跳线间链接的设备故障(网卡及交换机)

5、因仲裁的机器出问题(采用仲裁的方案)

6、高可用服务器上开启了iptables防火强阻挡了心跳消息传输

7、高可用服务器上心跳网卡地址等信息配置不正确,导致心跳失败;

8、其他服务配置不当等原因,如心跳方式不同,心跳广播冲突,软件Bug等。

  提示:keepalived配置里同一VRRP实例如果virtual_router_id两端参数配置不一致也后悔导致脑裂问题发生;

(2)、常见解决方案

在实际生产环境中,我们可以从以下几个方面来防止脑裂问题的发生;

1、同时使用串行电缆和以太网电缆链接,同时使用两跳心跳线路,这样一条线路坏了,另一条还是好的,依然能传送心跳消息

2、当检测到脑裂时,强行关闭一个心跳节点,

3、做好对脑裂的监控报警,在问题发生时人为第一时间介入仲裁,降低损失。

(3)、keepalived配置

  在这里主要解释一下我的配置没有写入MASTER,在有nopreempt参数的情况下,是可以不要MASTER,为了确保vip在一台机器上的稳定性,我们需要在配置文件中添加nopreempt参数,而且取消MASTER角色;

  如果MASTER角色存在,那么MASTER角色宕机之后,他的vip会漂移到BACKUP角色主机上,这时如果是以为网络抖动的原因造成的,当MASTER服务链接正常时,MASTER角色就会将原有的vip抢回来,反复来回几次之后,keepalived就会宕机,造成不可设想的后果;

  如果取消MASTER角色,添加nopreempt参数,vip会按照服务启动的先回顺序和优先级来决定他在那台机器上,有一台keepalived宕机,vip就会漂移到另一台BACKUP机器上,当另一台keepalived正常只会,他不会去抢vip,这样就不会造成vip来回在keepalived机器上飘来飘去;

lvs+keepalived 高可用及负载均衡的更多相关文章

  1. 4、keepalived高可用nginx负载均衡

    keepalived: HTTP_GET        //使用keepalived获取后端real server健康状态检测 SSL_GET(https)  //这里以为这后端使用的是http协议 ...

  2. keepalived高可用haproxy负载均衡varnish缓存wordpress的动静分离(第一次配置成功)

    haproxy和nginx都可以作为七层和四层反代服务器对外提供服务,此文通过haproxy和keealived配置varnish搭建wordpress的动静分离站点 一.实验环境 五台虚拟机: ha ...

  3. nginx+keepalived高可用web负载均衡

    一:安装环境 准备2台虚拟机,都安装好环境 centos 7keepalived:vip: 192.168.1.112192.168.1.110 nginxip 192.168.1.109 maste ...

  4. 测试LVS+Keepalived高可用负载均衡集群

    测试LVS+Keepalived高可用负载均衡集群 1. 启动LVS高可用集群服务 此时查看Keepalived服务的系统日志信息如下: [root@localhost ~]# tail -f /va ...

  5. LVS+Keepalived高可用负载均衡集群架构实验-01

    一.为什么要使用负载均衡技术? 1.系统高可用性 2.  系统可扩展性 3.  负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...

  6. Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境部署】

    1.环境说明: 系统版本:Ubuntu 14.04 LVS1物理IP:14.17.64.2   初始接管VIP:14.17.64.13 LVS2物理IP:14.17.64.3   初始接管VIP:14 ...

  7. 高可用与负载均衡(7)之聊聊Lvs-DR+Keepalived的解决方案

    今天直接开门见山了,直接说配置吧.首先介绍下我这的环境 如有问题,请联系我18500777133@sina.cn IP 安装软件 192.168.1.7 lvs1+keepalived master角 ...

  8. 搭建Keepalived+LNMP架构web动态博客 实现高可用与负载均衡

    环境准备: 192.168.193.80  node1 192.168.193.81 node2 关闭防火墙 [root@node1 ~]# systemctl stop firewalld #两台都 ...

  9. Dubbo入门到精通学习笔记(十六):Keepalived+Nginx实现高可用Web负载均衡

    文章目录 Keepalived+Nginx实现高可用Web负载均衡 Keepalived+Nginx实现高可用Web负载均衡 高可用架构篇 Keepalived + Nginx 实现高可用 Web 负 ...

随机推荐

  1. 为什么建议大家使用 Linux 开发

    Linux 能用吗? 我身边还有些朋友对 linux 的印象似乎还停留在黑乎乎的命令行界面上.当我告诉他或者建议他使用 linux 时,会一脸惊讶的问我,那个怎么用(来开发或者日常使用)? Linux ...

  2. Cisco packet tracer下dhcp的配置的vlan的应用

    话不多说,先上拓扑图. pc0和pc1分别接在三层交换机的F0/1.F0/2接口,ser接在F0/24接口,用ser用作dhcp的服务器. 0x01:配置server0 先配置server的IP地址. ...

  3. Qt实现表格控件-支持多级列表头、多级行表头、单元格合并、字体设置等

    目录 一.概述 二.效果展示 三.定制表头 1.重写数据源 2.重写QHeaderView 四.设置属性 五.相关文章 原文链接:Qt实现表格控件-支持多级列表头.多级行表头.单元格合并.字体设置等 ...

  4. Acrobat pro Dc 2018破解版|Adobe Acrobat pro Dc 2018中文破解版下载(附序列号/免破解)

    Acrobat pro Dc 2018破解版是由Adobe公司开发的一款PDF编辑软件,它可以以PDF格式制作和保存用户的文档,以此方便浏览和打印,或使用更高级的功能,且PDF格式的文档可如实地保留原 ...

  5. MySql中的SHOW INDEX 查出的结果列代表的意义

    MySQL SHOW INDEX语法的实际操作用法以及其实际查看索引状态(语法)的具体内容的描述,如果你对这一技术,心存好奇的话,以下的文章将会揭开它的神秘面纱. INDEX FROM tbl_nam ...

  6. 5. xadmin 后台搭建

    要维护他人产权,就不喽了,直接飞机 Django1.11.11使用xadmin的方法(一: 快速安装篇):https://www.jianshu.com/p/bcb74595213e Django1. ...

  7. linux下运行python3出现TypeError: a bytes-like object is required, not 'str'

    目标:用python将中文存入csv,且中文正常显示. 环境:linux,python3 百度N久,方法都不行或是比较复杂. 以上代码用python3运行后,出现TypeError: a bytes- ...

  8. 随机点名可视化界面,记录迟到人员,转exe文件

    随机点名可视化界面,记录迟到人员,转exe文件 一.介绍 对于人员采取随机点名 二.代码 import datetime import random from tkinter import * fro ...

  9. hdu6396 Swordsman(贪心)

    Swordsman 题目传送门 解题思路 先将每种属性排序,因为打倒怪兽会使属性增强,所以肯定是能打就打,用cnt[i]记录怪兽i已经被超过的属性数量,如果被超过的属性数为k了,则打倒此怪兽,将获得的 ...

  10. Eclipse Spring框架配置

    1.从官网下载相应的jar包 (1)下载spring framework包,地址: https://repo.spring.io/webapp/#/artifacts/browse/tree/Gene ...