安装环境

CentOS Linux release 7.6.1810

安装

yum install -y keepalived
安装完成后可输入命令查看安装文件位置
rpm -ql keepalived

高可用架构

我们在两台负载均衡机器上分别部署haproxy和keepalived,从而通过VIP(虚拟IP)实现Haproxy的高可用。我们现在有两台虚拟机,它们的IP地址分别为:10.0.2.4 和 10.0.2.5,我们将虚拟IP定为10.0.2.101。
我们将10.0.2.4定为主服务器,将10.0.2.5定为从服务器。至于192.168.1.11-192.168.1.14代表为我们的业务服务器集群,这些可自行随意搭建。

 shared IP=10.0.2.10110.0.2.4     10.0.2.5    192.168.1.11-192.168.1.14   192.168.1.2-------+------------+-----------+-----+-----+-----+--------+----|            |           |     |     |     |       _|_db+--+--+      +--+--+      +-+-+ +-+-+ +-+-+ +-+-+    (___)| LB1 |      | LB2 |      | A | | B | | C | | D |    (___)+-----+      +-----+      +---+ +---+ +---+ +---+    (___)haproxy      haproxy        4 cheap web serverskeepalived   keepalived

两台虚拟机的网卡配置如下:

[root@myrep keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 08:00:27:db:d7:18 brd ff:ff:ff:ff:ff:ffinet 10.0.2.5/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s3valid_lft 711sec preferred_lft 711secinet6 fe80::9ee4:2e79:94a4:5b9d/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::b6e9:4155:d662:62c1/64 scope link noprefixroute valid_lft forever preferred_lft forever
[root@mymaster keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 08:00:27:14:bb:b9 brd ff:ff:ff:ff:ff:ffinet 10.0.2.4/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s3valid_lft 1198sec preferred_lft 1198secinet6 fe80::9ee4:2e79:94a4:5b9d/64 scope link noprefixroute valid_lft forever preferred_lft forever

来源:haproxy/architecture.txt
关于Haproxy的安装与配置可参考本人另一篇文章:
https://blog.csdn.net/qq0012520/article/details/96377319

配置Keepalived

修改配置文件可先将文件备份一份:
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

然后编辑配置文件
vi /etc/keepalived/keepalived.conf

完整的配置文件如下(两台服务器的配置基本相同):

! Configuration File for keepalivedglobal_defs {notification_email {xxxx@163.com}notification_email_from xxxx@163.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}#用来来检查haproxy进程是否存活的脚本,系统中没有 killalll 命令的话需要先安装相关软件
vrrp_script chk_haproxy {        # Requires keepalived-1.1.13 script "killall -0 haproxy"  # cheaper than pidofinterval 2                   # check every 2 secondsweight 2                     # add 2 points of prio if OK
}vrrp_instance VI_1 {state MASTER                #!从服务器为 BACKUPinterface enp0s3           # 与你的网卡名称对应virtual_router_id 51priority 101                 #!主服务器为101,从服务器为100virtual_ipaddress {10.0.2.101                  #虚拟IP地址}track_script {chk_haproxy}
}
  • 添加防火墙规则:
    如果不添加防火强规则,则两台keepalived机器不能互相通信,就不能实现其功能。
    1.在10.0.2.4机器上添加规则,让其信任10.0.2.5机器。
    firewall-cmd --add-source=10.0.2.5 --zone=trusted --permanent
    firewall-cmd --reload
    2.在10.0.2.5机器上添加规则,让其信任10.0.2.4机器
    firewall-cmd --add-source=10.0.2.4 --zone=trusted --permanent
    firewall-cmd --reload

  • 分别启动两台机器上的keepalived 服务:
    在两台机器上执行如下命令:
    systemctl start keepalived
    执行完命令后发现当前虚拟IP正在主机器上:

  • 测试:
    在主机器上执行:
    systemctl stop keepalived
    发现虚拟IP漂移到了从机器上,表示功能OK:
    测试完成后再次启动主机器上的keepalived:
    systemctl start keepalived

配置Haproxy

我的两台http业务服务是部署在宿主机上的,通过虚拟机(VirtualBox)的NAT网络功能使得虚拟机内可通过192.168.56.1这个IP在访问宿主机,并且两台虚拟机之间可以互相访问(在同一个NAT网络下)。
我会将两台机器上的Haproxy都绑定在同一个VIP上,两台机器上的配置是一样的,如下:

globallog         127.0.0.1 local2chroot      /var/lib/haproxypidfile     /var/run/haproxy.pidmaxconn     4000user        haproxygroup       haproxydaemon# turn on stats unix socketstats socket /var/lib/haproxy/statsdefaultsmode                    httplog                     globaloption                  httplogoption                  dontlognulloption http-server-closeoption forwardfor       except 127.0.0.0/8option                  redispatchretries                 3timeout http-request    10stimeout queue           1mtimeout connect         10stimeout client          1mtimeout server          1mtimeout http-keep-alive 10stimeout check           10smaxconn                 3000frontend  main 10.0.2.101:5000acl url_static       path_beg       -i /static /images /javascript /stylesheetsacl url_static       path_end       -i .jpg .gif .png .css .jsuse_backend static          if url_staticdefault_backend             appbackend staticbalance     roundrobinserver      static 127.0.0.1:4331 checkbackend appbalance     roundrobinserver  app1 192.168.56.1:7100 check       #绑定到宿主机7100端口的服务上server  app2 192.168.56.1:7200 check       #绑定到宿主机7200端口的服务上listen stats                                   #配置监控功能mode httpbind 10.0.2.101:21000stats enablestats hide-versionstats refresh 5sstats uri /haproxyadmin?statsstats realm Haproxy\ Statisticsstats auth admin:123456stats admin if TRUE
  • 启动Haproxy
    注意: 由于我们两台机器都是绑定到 10.0.2.101:5000 这个虚拟地址来监听入站连接,因为一个(虚拟)IP同一时间只能存在于某一台机器上(如上面演示),而haproxy在启动的时候必须要求能成功绑定到该地址,所以会造成无法启动的情况,解决方法是让系统允许绑定非本机的IP,:
    两台机器上执行如下命令:
    sysctl net.ipv4.ip_nonlocal_bind=1
    然后分别在两台机器上执行启动:
    systemctl start haproxy

  • 测试
    用例流程:
    1 . 正常情况下主服务器处理入站请求,而当主服务器挂掉或者服务器上的Haproxy停止后,VIP漂移到从服务器,由从服务器接收请求。
    2 . 当主服务器从故障中恢复后,VIP再次漂移回主服务器,由主服务器接收请求。

    先多启动两个终端窗口用来监控haproxy日志:
    分别在两机器上输入监控命令如下:
    tail -f /var/log/haproxy.log

    在浏览器上访问服务:
    主机器日志输入,表示访问成功:
    这时候停掉主机器上的Haproxy
    systemctl stop haproxy

    再次访问服务发现依然成功,而请求被从机器接收
    再次启动主机器上的Haproxy
    systemctl start haproxy

    这时候服务又被主机器处理

Linux Keepalived 高可用虚拟IP安装与配置相关推荐

  1. [配置]keepalived配置高可用虚拟IP不通

    问题:在keepalived配置的虚拟IP不通 解决:先检查虚拟IP和nginx服务器是不是一个网段,然后检查是否将vrrp_strict这个信息给注释掉.

  2. 基于zookeeper(集群)+LevelDB的ActiveMq高可用集群安装、配置、测试

    Linux 环境 zookeeper集群安装.配置.测试https://blog.csdn.net/weixin_40816738/article/details/100576259 MQ集群部署规划 ...

  3. 高可用HAProxy——yum安装部署配置使用

    HAProxy介绍   HAProxy是高性能TCP(第四层)/HTTP(第七层)反向代理负载均衡服务器.(The Reliable, High Performance TCP/HTTP Load B ...

  4. keepalived 高可用日志说明及实战配置日志路径

    日志文件查看 tail -f /var/log/message 修改日志路径 vi /etc/sysconfig/keepalived KEEPALIVED_OPTIONS="-D -S 0 ...

  5. 企业级Nginx负载均衡与keepalived高可用实战课-老男孩-专题视频课程

    企业级Nginx负载均衡与keepalived高可用实战课-2678人已学习 课程介绍         企业级Nginx负载均衡与keepalived高可用实战分享 课程收益     互联网环境最常用 ...

  6. RabbitMQ集群安装配置+HAproxy+Keepalived高可用

    RabbitMQ集群安装配置+HAproxy+Keepalived高可用 转自:https://www.linuxidc.com/Linux/2016-10/136492.htm rabbitmq 集 ...

  7. linux lnmp分布式集群,LNMP 分布式集群(六):keepalived 高可用方案

    前言 LNMP 分布式集群的部署实践 系列文章: 衡量一个集群的高可用性在于没有单点故障,即其中任何一台服务器宕机都不会造成整个服务中断. 之前的LNMP分布式集群的实践中,显然在将Nginx作为负载 ...

  8. linux 双mysql_MySQL双主互备+Keepalived高可用架构实现案例

    一.环境介绍 1.1.规划 序号 类别 版本 主机名 IP 端口 备注 1 OS CentOS release 6.9 (Final) (minimal) my1 172.16.210.180 830 ...

  9. LVS+Keepalived实现高可用的ip负载均衡

    LVS+Keepalived实现高可用的ip负载均衡 封装rhel7.6的母盘 LVS负载均衡技术 RS中服务机对外屏蔽vip的俩种设置方法 RS设置之使用arptables_jf软件详解 数据链路层 ...

  10. LVS-DR+Keepalived 高可用群集

    LVS 实际上相当于基于IP地址的虚拟化应用, 为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法 Keepalived 1.支持故障自动切换(Failover) 2.支持节点健康状态检查 ...

最新文章

  1. PDO防注入原理分析以及使用PDO的注意事项 (转)
  2. 算法-二叉树的最近公共祖先
  3. php 科研,科研之路2
  4. 阿里云Java虚拟机的安装位置
  5. POJ1269 Intersecting Lines 计算几何 C语言
  6. nginx php pathinfo,Nginx解决PATH_INFO新解决办法
  7. consul代理---健康检测
  8. 文章读后感--社会文明分析总结
  9. Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.6 给自动检测组件命名...
  10. 理解Python的协程机制-Yield
  11. 物理增强的深度学习模型改善卫星图像对热带气旋强度和大小估计(翻译)
  12. 蓝色动力(DVD版)GHOSTXP SP3纯净选择版V2012.06
  13. 简单典型二阶系统_关于石墨烯结构的典型拉曼光谱特征,这一篇讲得非常透彻!...
  14. python按顺序执行函数_Python3的unittest用例按编写顺序执行
  15. php后门 佛像,给千年佛像做了个CT,结果好吓人
  16. 充电头PD协议和QC协议的理解
  17. iOS10 更新后问题,获取相册,录音时候闪退问题
  18. 简易留言薄系统-ASP.NET MVC(Model层)
  19. 熊绎:我看软件工程师的职业规划
  20. Android仿搜狗浏览器加载动画

热门文章

  1. 深度学习 Fine-tune 技巧总结
  2. 如何利用python整合excel_一篇文章告诉你如何利用python实施自动化办公,操作Excel...
  3. 通用计算机dsp采用,一种基于FPGA+DSP的通用飞控计算机平台设计
  4. 搭建自己的病毒扫描系统clamav-原版教程
  5. vscode调试时如何在launch.json中添加环境变量
  6. c语言gcno文件位置,c – 找不到CMake和lcov:gcno文件
  7. oracle trunc delete 有什么区别,oracle的trunc与round区别及处理日期和数值的区别
  8. python怎么重新运行,如何让python程序重新运行其
  9. windows下USB检测插拔状态
  10. c语言程序 题库管理,C语言程序设计题库管理.doc