今天我们讲haproxy结合keepalived实现LNMP的负载均衡和高可用,现在的公司大部分都基于haproxy实现负载均衡。下面以一个事例去给大家详细讲解如何去实现:

一、用haproxy结合keepalived实现基于lnmp的负载均衡和高可用服务,要求:

(1)实现动静分离,图片和css,js都分离到专门的静态服务器上

(2)只允许172.17网段用户访问

(3)对于动态请求,要求实现基于cookie的会话保持

整体架构如下:

1、实验前需要关闭防火墙和selinux,以及同步时间。

关闭防火墙:iptables -F

关闭selinux:setenforce 0

同步时间:ntpdate 172.17.0.1(局域网的网关)

2、配置主服务器

(1)配置主keepalived

vim /etc/keepalived/keepalived.conf(基于NAT模式)

global_defs {                                 #全局设置

notification_email {

root@localhost                        #邮件地址

}

notification_email_from root

smtp_server 127.0.0.1                      #发送邮件的地址

smtp_connect_timeout 30

router_id KEEPALIVED_LVS

}

vrrp_instance VI_1 {

state MASTER                              #级别为MASTER

interface eth1                            #对外的网卡

virtual_router_id 74                      #VIP组号,做实验的时候不要和别人是一个组

priority 200                              #优先级

advert_int 1

authentication {                          #组内验证

auth_type PASS

auth_pass magedu

}

virtual_ipaddress {

172.17.177.176                        #对外的VIP

}

}

vrrp_instance VI_2 {

state MASTER

interface eth0

virtual_router_id 75

priority 200

advert_int 1

authentication {

auth_type PASS

auth_pass magedu

}

virtual_ipaddress {

192.168.153.153                        #对内的DIP的VIP,因为是两个调度器,所以要让DIP的地址也漂

}

}

主要是实现VIP对外,然后再生成一个DIP的VIP对内

启动服务systemctl start keepalived

开启路由转发vim /etc/sysctl.conf

net,ipv4,ip_forward=1

sysctl -p    生效

(2)配置主haproxy

vim /etc/haproxy/haproxy.cfg

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 http

bind 172.17.177.176:80               #80端口绑定到VIP上

stats enable                         #启动监控页面

stats uri /haproxy                   #监控页面的路径

stats auth  admin:admin              #监控页面的账号密码

stats refresh                        #10s监控页面每10秒自动刷新一次

stats admin if TRUE                  #能修改监控页面

acl p_w_picpathjingtai path_end -i .jpj .png .bmp .gif .js .css          #匹配静态页面

acl p_w_picpathphp path_end -i .php                                      #匹配动态php页面

use_backend webserver1 if p_w_picpathphp                                 #如果匹配到p_w_picpathphp就调度到webserver1中

acl host src 172.17.0.0/16                                         #匹配172.17这个网段

block if ! host                                                    #如果不是host里面的网段就都拒绝

default_backend webserver                                          #默认的backend是webserver

backend webserver1                                                     #后端的服务器

balance roundrobin                                                 #使用的算法

server web1 192.168.153.177:80 check weight 1

backend webserver2

balance roundrobin

server web2 192.168.153.176:80 check weight 1

backend webserver

balance roundrobin

cookie SRV insert nocache                                          #基于cookie验证

server http1 192.168.153.177:80 check weight 1 cookie srv1         #基于cookie的srv1验证保持会话

server http1 192.168.153.176:80 check weight 1

启动服务systemctl start haproxy

查看80端口是否监听在VIP上  ss -ntl

3、配置从的服务器

(1)配置从的keepalived

vim /etc/keepalived/keepalived.conf

global_defs {

notification_email {

root@localhost

}

notification_email_from root

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id KEEPALIVED_LVS

}

vrrp_instance VI_1 {

state BACKUP                              #MASTER需要改成BACKUP

interface eth1

virtual_router_id 74

priority 190                              #优先级需要调小

advert_int 1

authentication {

auth_type PASS

auth_pass magedu

}

virtual_ipaddress {

172.17.177.176

}

}

vrrp_instance VI_2 {

state BACKUP                              #MASTER需要改成BACKUP

interface eth0

virtual_router_id 75

priority 190                              #优先级需要调小

advert_int 1

authentication {

auth_type PASS

auth_pass magedu

}

virtual_ipaddress {

192.168.153.153

}

}

启动服务systemctl start keepalived

开启路由转发vim /etc/sysctl.conf

net,ipv4,ip_forward=1

sysctl -p    生效

(2)配置从的haproxy(和主的haproxy配置一样)

vim /etc/haproxy/haproxy.cfg

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 http

bind 172.17.177.176:80               #80端口绑定到VIP上

stats enable                         #启动监控页面

stats uri /haproxy                   #监控页面的路径

stats auth  admin:admin              #监控页面的账号密码

stats refresh                        #10s监控页面每10秒自动刷新一次

stats admin if TRUE                  #能修改监控页面

acl p_w_picpathjingtai path_end -i .jpj .png .bmp .gif .js .css          #匹配静态页面

acl p_w_picpathphp path_end -i .php                                      #匹配动态php页面

use_backend webserver1 if p_w_picpathphp                                 #如果匹配到p_w_picpathphp就调度到webserver1中

acl host src 172.17.0.0/16                                         #匹配172.17这个网段

block if ! host                                                    #如果不是host里面的网段就都拒绝

default_backend webserver                                          #默认的backend是webserver

backend webserver1                                                     #后端的服务器

balance roundrobin                                                 #使用的算法

server web1 192.168.153.177:80 check weight 1

backend webserver2

balance roundrobin

server web2 192.168.153.176:80 check weight 1

backend webserver

balance roundrobin

cookie SRV insert nocache                                          #基于cookie验证

server http1 192.168.153.177:80 check weight 1 cookie srv1         #基于cookie的srv1验证保持会话

server http1 192.168.153.176:80 check weight 1

启动服务service haproxy start

4、配置后端的web服务器

需要提前搭建好基于LNMP实现的小米电子商务网站(前面的博客有如何搭建LNMP实现小米电子商务网站)

(1)NAT模式

把80,3306,9000端口开开

systemctl start nginx   php-fpm    mariadb

然后把路由指向DIP的VIP

ip route add default via 192.168.153.153

(2)DR模式

在调度器keepalived中不用配置DIP的VIP,因为把网关指向路由器就行

ip route add default via 172.17.0.1

还要在回环网卡上加入VIP地址

ifconfig lo:0 172.17.166.165 broadcast 172.17.166.165 netmask 255.255.255.255 up

添加路由,让VIP走lo:0

route add -host 172.17.166.165 dev lo:0

只回答目标IP地址是来访网络接口本地地址的ARP查询请求

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore

对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.

5、然后就可以去测试看VIP会不会飘逸,关闭主的服务器,然后看能不能访问web服务器

还可以访问http://192.168.153.177/haproxy去管理后台web服务器

到此为止就完全实现负载均衡和高可用,后端web服务器多台时候就在haproxy中多加几个server就可以了!

转载于:https://blog.51cto.com/13296637/1980861

用haproxy结合keepalived实现基于LNMP的负载均衡和高可用相关推荐

  1. keepalived介绍和keepalived实现nginx负载均衡机高可用

    1. keepalived简介 1.1 keepalived是什么? Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...

  2. HAProxy实现负载均衡及高可用集群(corosync+pacemaker)

    一.haproxy haproxy 是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用 ...

  3. haproxy负载均衡+pcs高可用+fence

    实验环境: 母盘为redhat7.6的操作系统,快照出四台虚拟机 给真机和虚拟机都加上地址解析,如上图所示 通过真机的httpd服务给虚拟机搭建7.6的网络软件仓库 关闭防火墙,selinux状态设为 ...

  4. haproxy+keepalived实现负载均衡及高可用

    HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高性能性.负载均衡,以及基于TCP和HTTP的应用程序代理.相较与 Nginx,HAProxy 更专注与反向代理,因此它可以支持更多的选 ...

  5. 采用ipvsadm管理工具,及Keepalived软件检测服务器的状态,搭建负载均衡的高可用集群

    前言 ipvsadm是Linux虚拟服务器的管理命令,是用于设置.维护和检查Linux内核中虚拟服务器列表的命令.Linux虚拟服务器可用于基于两个或更多个节点的集群构建可扩展的网络服务.群集的活动节 ...

  6. Keepalived+LVS+Nginx负载均衡之高可用

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致 ...

  7. nginx日志打印header_小水敲黑板--Nginx+Keepalived实现负载均衡和高可用

    介绍: keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived是自动完成,不需人工干涉.主要提供loadb ...

  8. Keepalived+LVS+MySQL双主复制实现读写负载均衡及高可用

    目录 一.Keepalived和LVS简介 1. Keepalived简介 2. LVS简介 二.安装配置 1. 下载安装LVS 2. 下载安装Keepalived 3. Keepalived配置 5 ...

  9. Nginx 基本概念(反向代理、动静分离、负载均衡、高可用)、安装配置(JDK\Tomcat\Nginx\Keepalived)、配置实例效果

    这篇文章将先阐述Nginx相关概念,然后介绍Nginx相关环境的安装配置过程(包括Linux下JDK\Tomcat的安装,都是自己动手操作的记录),及反向代理.负载均衡.动静分离.高可用的配置及测试过 ...

最新文章

  1. 拷贝构造函数和赋值函数的一些知识
  2. 一个撇脚的java压缩文件工具类
  3. IDEA里运行代码时出现Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger的解决办法(图文详解)...
  4. linux 查看java进程_Linux进程查看及管理工具(ps, vmstat, dstat, glances等)
  5. Google C++ 编码风格精简
  6. 三十四、使用pytesser3 和pillow完成图形验证码的识别
  7. win10微软图标点击无反应_win10点击任务栏没反应?这样操作就可以了
  8. GBDT、Xgboost、LightGBM对比,异同点,并行策略
  9. js中单引号和双引号的区别_python中print函数 以及单引号、双引号、三引号
  10. python爬取qq音乐周杰伦_Python爬取QQ音乐url及批量下载
  11. python使用redis做缓存_Python的Flask框架使用Redis做数据缓存的配置方法
  12. [IE编程] IE8的SDK 下载
  13. 地理探测器的学习与研究初探
  14. SpringBoot整合activiti7,demo示例
  15. c语言max()头文件,C语言:min和max头文件
  16. Android开发仿微信支付宝的支付密码布局
  17. 安装VMTools工具
  18. javascript原型图了解
  19. matlab 模糊隶属度判断类别
  20. STM32f1之简单控制继电器模块(附源码)

热门文章

  1. Neverout:一款新的沉浸式益智游戏
  2. iOS应用开发入门(3)——点击button控制textview
  3. Meta AI推出“杂食者”:一个模型搞定图像、视频和3D数据三大分类任务,性能还不输独立模型...
  4. NeurIPS 2021论文接收结果统计:Oral级论文不足3%,图神经网络火到进前三
  5. pandas语法乱、API多?你需要整理一下!|知乎讨论
  6. 他的车队低调拿掉安全员,现在用10亿新融资惊艳了所有人
  7. 长征五号复飞成功:史上最重最大,2020月岩采样火星探测都要靠它
  8. Beta冲刺提交-星期四
  9. 【译】为什么我们在 API 中使用 GraphQL
  10. 这可能是第二好的自定义 View 教程之属性动画