当前位置: 首页 > news >正文

HAProxy(三):Keeplived+HAProxy搭建高可用负载均衡动静分离架构基础配置示例

一、安装环境

1.软件版本

HAProxy:1.5.18

Keepalived:1.3.5

Nginx:1.12.2

PHP:7.2

系统版本:CentOS 7.4

2.IP分配与架构图

3.安装软件

1>关闭所有服务器的firewall与SELinux

~ ]# sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
~ ]# systemctl disable firewalld
~ ]# systemctl stop firewalld
~ ]# reboot

2>在各服务器上安装所需软件,这里都是yum安装,详细安装步骤略过。

4.软件配置

1>HAProxy配置

要实现动静分离需在HAProxy中做ACL规则匹配。具体配置详情如下,两台HAProxy的配置相同:

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend myweb
        bind *:80
        compression algo gzip #选择压缩方式,可优化网页访问速度
        compression type text/html text/plain application/x-javascript text/css application/xml #定义要压缩的文件类型
        errorloc 403 http://192.168.29.101:9999/errorloc/403.html #错误页位置
        rspidel ^Server:.* #删除报头文件中以Server开头的项,安全优化项,因为Server开头的一般是私密信息,如后端服务器的Nginx版本等
        acl static path_end .png .jepg .jpg .bmp .html .htm .jsp #ACL规则定义,匹配以.png...结尾的请求并命名为static
        use_backend staticsv if static #如果匹配ACL规则static则交由后端服务器组staticsv处理
        acl dynamic path_end .php #ACL规则定义,匹配以.php结尾的请求并命名为dynamic
        use_backend dynamicsv if dynamic #如果匹配ACL规则dynamic则交由后端服务器组dynamicsv处理
        default_backend dynamicsv #默认后端服务器组

backend staticsv
        balance roundrobin #调度算法
        cookie server insert nocache
        server staticsv1 192.168.29.103:80 check cookie static1
        server staticsv2 192.168.29.104:80 check cookie static2

backend dynamicsv
        balance roundrobin
        cookie server insert nocache
        server dynamicsv1 192.168.29.105:80 check cookie dynamic1
        server dynamicsv2 192.168.29.106:80 check cookie dynamic2

listen stats #定义状态页
        bind *:9099
        acl sta src 192.168.29.1
        block if ! sta
        http-request allow if sta
        stats enable
        stats uri /myhaproxy?admin
        stats realm "Hello World"
        stats auth admin:admin

2>配置Keepalived

在192.168.29.101上的配置如下:

global_defs {
   notification_email {
      root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id n1
         vrrp_mcast_group4 224.1.101.18
}
vrrp_script chk_hapx {
    script "killall -0 haproxy && exit 0 || exit 1" #这里要指出的是,killall -0 表示检查是否有进程存在,若存在返回值0,若不存在返回1,表示haproxy没有正常工作,并且返回1时往下执行操作。
    weight -5
    interval 1
    fall 1
    rise 1
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 22
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.29.88/24 dev ens33 label ens33:0
    }
    track_script {
        chk_hapx
        }
}

在192.168.29.102上的配置如下(与101的区别已用黄颜色标注):

global_defs {
   notification_email {
      root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id n1
         vrrp_mcast_group4 224.1.101.18
}
vrrp_script chk_hapx {
    script "killall -0 haproxy && exit 0 || exit 1" 
    weight -5
    interval 1
    fall 1
    rise 1
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 22
    priority 95
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.29.88/24 dev ens33 label ens33:0
    }
    track_script {
        chk_hapx
        }
}

关于keepalived的原理与应用可以阅读这篇博客←点击

5.配置静态服务器组与动态服务器组

在192.168.29.103和192.168.29.104上安装nginx服务

在192.168.29.105和192.168.29.106上安装nginx+php服务

6.配置MariaDB与NFS

配置过程在之前的博客已有详细描述了这里不再赘述:

MariaDB配置点击→这里

NFS配置点击→这里

以上都配置完成后一个简易的基于keepalived+HAProxy的动静分离就部署完成了,然后就能所需的网页资源了。

虽然架构很简单,但能帮助我们理解工作逻辑,和熟悉配置详情。

 

转载于:https://www.cnblogs.com/readygood/p/9786575.html

相关文章:

  • 关于Xcode10中libstdc报错问题的解决
  • Qtum量子链周报(10月8日-10月14日)
  • Windows下jupyter notebook 修改打开的浏览器
  • 【Finchley】【新特性】Spring Cloud Finchley 新特性
  • bzoj 4398 福慧双修——二进制分组
  • ios 国际化处理思路小记
  • 10月16日科技联播:微软帝国缔造者保罗·艾伦去世;锤子否认分公司解散传闻...
  • gops —— Go 程序诊断分析工具
  • 史上最简单的SpringCloud教程 | 第十二篇: 断路器监控(Hystrix Dashboard)
  • IdentityServer4系列之中文文档及实际项目经验分享
  • 使用Gitlab一键安装包后的日常备份恢复与迁移
  • js数组实现不重复插入数据
  • jpa映射实体类后,驼峰字段取值为null
  • Hyperplatform VT HOOK
  • python全栈开发笔记--------条件语句
  • SegmentFault for Android 3.0 发布
  • 【EOS】Cleos基础
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • JWT究竟是什么呢?
  • React 快速上手 - 07 前端路由 react-router
  • SQLServer之创建数据库快照
  • vue 个人积累(使用工具,组件)
  • Vue--数据传输
  • webgl (原生)基础入门指南【一】
  • Yeoman_Bower_Grunt
  • 从重复到重用
  • 当SetTimeout遇到了字符串
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 你真的知道 == 和 equals 的区别吗?
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 手机端车牌号码键盘的vue组件
  • 微服务框架lagom
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • linux 淘宝开源监控工具tsar
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​configparser --- 配置文件解析器​
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • # Maven错误Error executing Maven
  • ${factoryList }后面有空格不影响
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)字符分类函数
  • (java)关于Thread的挂起和恢复
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (SpringBoot)第二章:Spring创建和使用
  • (分布式缓存)Redis哨兵
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (三分钟)速览传统边缘检测算子
  • (十) 初识 Docker file
  • (四)汇编语言——简单程序