keepalived + haproxy 实现web 双主模型的高可用负载均衡--转
1、本文的架构图:
阐述各服务器用途:
1、haproxy在本构架中实现的是:负载均衡
2、keepalived实现对haproxy的高可用
3、apache static 实现静态页面的访问
4、aoache dynamic实现动态页面的访问,图中有两个是实现负载均衡的
配置各功能模块:
一、配置haproxy和keepalived
验证:
1、当一台keepalived宕机后,VIP会不会转移到另外一台服务器
2、当一台haproxy服务出故障,VIP会不会转移到另外一台服务器
注意:
那如果keepalived宕机了,haproxy服务还正常运行,我们要不要让另外一台服务器把VIP夺过去呢?
理论上来讲:最好不要,但是我们的keepalived中的脚本监控着haproxy的进程,keepalived宕机之后,就无从得知haproxy的健康状态,也不能决定自己的优先权priority降不降低了。所以,理论上来讲最好不要,但是实际中光靠keepalived是做不到的。
配置:
1、给两台服务器分别安装上keepalived
1
|
[root@station139 ~]# yum -y install keepalived
|
2、配置keepalived
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
[root@node2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost 配置服务状态变化发送邮件到哪个地址
}
notification_email_from kaadmin@localhost
smtp_server 127.0 . 0.1 给哪个smtp服务器发邮件
smtp_connect_timeout 30 联系上面smtp服务器 30 秒联系不上,就超时
router_id LVS_DEVEL
}
vrrp_script chk_haproxy { 本脚本是用来检测该服务器上haproxy服务的健康状态的
script "killall -0 haproxy"
interval 1
weight - 2
}
vrrp_instance VI_1 {
state MASTER 这太服务器为主的keepalived
interface eth0 通过eth0网卡广播
virtual_router_id 200 虚拟路由id要改,如果在一个局域网中有多个keepalived集群
priority 100 优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 11112222
}
track_script {
chk_haproxy
}
virtual_ipaddress {
192.168 . 1.200 本机的虚拟IP
}
notify_master "/etc/keepalived/notify.sh master" 各不用状态下运行的脚本
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_instance VI_2 { 另外一台主keepalived的从
state BACKUP
interface eth0
virtual_router_id 57
priority 99 设置要比另外一台主keepalived的优先级低
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_mantaince_down
}
virtual_ipaddress {
192.168 . 1.201
}
}
|
3、写keepalived处在不同状态下所运行的脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#!/bin/bash
# Author: MageEdu <linuxedu@foxmail.com>
# description: An example of notify script
#
vip= 192.168 . 1.200
contact= 'root@localhost'
notify() {
mailsubject= "`hostname` to be $1: $vip floating"
mailbody= "`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"
echo $mailbody | mail -s "$mailsubject" $contact
}
case "$1" in
master)
notify master
/etc/rc.d/init.d/haproxy start
exit 0
;;
backup)
notify backup
/etc/rc.d/init.d/haproxy stop
exit 0
;;
fault)
notify fault
/etc/rc.d/init.d/haproxy stop
exit 0
;;
*)
echo 'Usage: `basename $0` {master|backup|fault}'
exit 1
;;
esac
给脚本以执行权限:
chmod +x /etc/keepalived/notify.sh
|
4、配置haproxy
因为要实现动静分离,那么我们在配置文件中,就要定义动态资源静态资源转移到不同的服务上去
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
[root@node2 ~]# yum -y install haproxy 安装haproxy
[root@node2 ~]# vim /etc/haproxy/haproxy.cfg
#
log 127.0 . 0.1 local2
chroot / var /lib/haproxy
pidfile / var /run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket / var /lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http 指定haproxy工作模式为http
log global
option httplog
option dontlognull
option http-server-close 当客户端超时时,允许服务端断开连接
option forwardfor except 127.0 . 0.0 / 8 在http的响应头部加入forwardfor
option redispatch #在使用了基于cookie的会话保持的时候,通常加这么一项,一旦后端某一server宕机时,能够将其会话重新派发到其它的upstream servers
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
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *: 80 前端代理
acl url_static path_beg -i / static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
acl url_dynamic path_end -i .php
use_backend static if url_static
default_backend dynamic
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static 后端的静态请求响应
balance roundrobin
server static 192.168 . 1.100 : 80 inter 3000 rise 2 fall 3 check maxconn 5000
#---------------------------------------------------------------------
# round robin balancing between the var ious backends
#---------------------------------------------------------------------
backend dynamic 后端的动态请求响应
balance roundrobin
server dynamic1 192.168 . 1.101 : 80 inter 3000 rise 2 fall 3 check maxconn 5000
server dynamic2 192.168 . 1.102 : 80 inter 3000 rise 2 fall 3 check maxconn 5000
listen statistics
mode http
bind *: 8080
~ stats enable
stats auth admin:admin
stats uri /admin?stats 指定URI的访问路径
stats admin if TRUE
stats hide-version
stats refresh 5s
acl allow src 192.168 . 0.0 / 24 定义访问控制列表
tcp-request content accept if allow
tcp-request content reject
|
5、配置另外一台haproxy服务器
因为两台服务器的配置大体相同,我们就直接讲以上配置好的复制文件和脚本文件都传到这台haproxy服务器上,做下修就可以了
1
2
3
4
5
6
7
8
9
|
[root@node2 ~]# scp /etc/keepalived/keepalived.conf root@ 192.168 . 1.121 :/etc/keepalived/
root@ 192.168 . 1.121 's password:
keepalived.conf 100 % 4546 4 .4KB/s 00 : 00
[root@node2 ~]# scp /etc/keepalived/notify.sh root@ 192.168 . 1.121 :/etc/keepalived/
root@ 192.168 . 1.121 's password:
notify.sh 100 % 751 0 .7KB/s 00 : 00
[root@node2 ~]# scp /etc/haproxy/haproxy.cfg root@ 192.168 . 1.121 :/etc/haproxy/
root@ 192.168 . 1.121 's password:
haproxy.cfg 100 % 3529 3 .5KB/s 00 : 00
|
传输完成,接着来配置 /etc/keepalived/keepalived.conf 因为两个节点上的/etc/haproxy/haproxy.cfg相同不用更改
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
interface eth0
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from kaadmin@localhost
smtp_server 127.0 . 0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 1
weight - 2
}
vrrp_instance VI_1 {
state BACKUP 这台把master改成 backup
interface eth0
virtual_router_id 200
priority 99 优先级调的比上一个低
advert_int 1
authentication {
auth_type PASS
auth_pass 11112222
}
track_script {
chk_haproxy
}
virtual_ipaddress {
192.168 . 1.200
}
}
vrrp_instance VI_2 {
state MASTER 本台的这个要调成MASTER,上个是backup
interface eth0
virtual_router_id 57
priority 100 这个优先级也要高于上个
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168 . 1.201
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
|
注意:
notify_master
"/etc/keepalived/notify.sh master"
notify_backup
"/etc/keepalived/notify.sh backup"
notify_fault
"/etc/keepalived/notify.sh fault"
3个状态分别要执行的脚本,只能放在 MASTER中,原因是:因为是互为主从,每个主的都会有个另外一个主的从,如果
把这 “3个状态执行脚本” 写入到从的区域中,那么另外一个主的从状态就会执行这个脚本,因为就会停掉所要高可用的
程序,这就造成了,两个VIP全部转移到其中一个服务器上去。
我们来验证下,如果keepalived和haproxy分别宕机,vip会不会转移:
在两个节点上都启动 keepalived和haproxy服务
1
2
3
4
|
[root@node2 ~]# service haproxy start
Starting haproxy: [ OK ]
[root@node2 ~]# service keepalived start
Starting keepalived: [ OK ]
|
以下为正常情况:
keepalived 1:
keepalived 2:
我们来模拟让第一个haproxy停止掉,再看下,VIP会不会全到 keepalived 2上面去:
1
2
|
[root@node2 ~]# service haproxy stop
Stopping haproxy: [ OK ]
|
查看keepalived 1 和 keepalived 2
看,都过来了。。。。
验证负载均衡很动静分离
我们给3个web服务不同的网页
1、给apache static一个静态页面,来验证如果请求的不是以 .php结尾的网页文件都定向到这太服务器上来
2、给apache dynamic 1 、2 分别两个 index.php ,实现对动态网页的负载均衡
我们给apache static 一个符合-i .jpg .gif .png .css .js的网页,就给个图片网页吧
apache static
1
|
scp 1 .png root@ 192.168 . 1.100 :/ var /www/html
|
apache dynamic 1
1
2
3
4
5
|
vim / var /www/html/index.php
192.168 . 1.101
<?php
phpinfo();
?>
|
apache dynamic 2
1
2
3
4
5
|
vim / var /www/html/index.php
192.168 . 1.102
<?php
phpinfo();
?>
|
1、我们来请求 1.png 结尾的静态文件
2、我们来请求 .php结尾的页面
如此看来,已经对以.php的动态页面做了负载均衡了
我们再通过 192.168.1.201 这个虚拟 ip 访问试试:
由此看来,也实现了双主模型了,两个haproxy同时可以服务了。。。
3、我们来看看状态页面
本文出自 “linux运维” 博客,请务必保留此出处http://xz159065974.blog.51cto.com/8618592/1405812
转载于:https://www.cnblogs.com/davidwang456/p/3718865.html
keepalived + haproxy 实现web 双主模型的高可用负载均衡--转相关推荐
- 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)
前言: 原理与思想 这里选用GTID主从复制模式Mysql主从复制模式,是为了更加确保主从复制的正确性.健康性与易配性.这里做的是两服务器A,B各有Mysql实例3310,两个实例间互为主从 主从复制 ...
- 基于HAProxy+Keepalived高可用负载均衡web服务的搭建
一 原理简介 1.HAProxy HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的we ...
- ngnix+keepalived 实现N主高可用负载均衡web群集
ngnix+keepalived 实现N主高可用负载均衡web群集 思路: 总结一下最近学习的nginx+keepalived 的负载均衡架构,发现linux的群集系统都是负载均衡层加服务器群组层,实 ...
- 用 Keepalived+HAProxy 实现高可用负载均衡的配置方法
1. 概述 软件负载均衡技术是指可以为多个后端服务器节点提供前端IP流量分发调度服务的软件技术.Keepalived和HAProxy是众多软负载技术中的两种,其中Keepalived既可以实现负载均衡 ...
- haproxy keepalived_详解mycat+haproxy+keepalived搭建高可用负载均衡mysql集群
概述 目前业界对数据库性能优化普遍采用集群方式,而oracle集群软硬件投入昂贵,mysql则比较推荐用mycat去搭建数据库集群,下面介绍一下怎么用mycat+haproxy+keepalived搭 ...
- haproxy负载均衡_基于mycat+haproxy+keepalived搭建mysql数据库高可用负载均衡
概述 目前业界对数据库性能优化普遍采用集群方式,而oracle集群软硬件投入昂贵,mysql则比较推荐用mycat去搭建数据库集群,下面介绍一下怎么用mycat+haproxy+keepalived搭 ...
- 案例一(haproxy+keepalived高可用负载均衡系统)【转】
1.搭建环境描述: 操作系统: [root@HA-1 ~]# cat /etc/redhat-release CentOS release 6.7 (Final) 地址规划: 主机名 IP地址 集群角 ...
- Keepalived+Nginx实现高可用负载均衡集群
转载自 https://www.cnblogs.com/mrlapulga/p/6857294.html 一 环境介绍 1.操作系统 CentOS Linux release 7.2.1511 (Co ...
- RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成高性能高可用组件 Keepalived_03
服务器IP hostname 节点说明 端口 管控台地址 账号 密码 192.168.0.115 mq-01 rabbitmq master 5672 http://192.168.0.115:156 ...
最新文章
- Linux 编译安装内核
- boot lvm 分区_怎样使用kickstart创建逻辑卷管理(LVM)分区
- DSP using MATLAB 示例Example3.1 3.2 3.3
- 一个取消事件的简单js例子(事件冒泡与取消默认行为)
- python 获取当前时间再往前几个月_Python 中的时间和日期操作
- [模板]fhqTreap
- ecq php,ecqx.sdgz.site网页GZIP压缩检测结果
- Python基础——mysql数据库、SQLAlchemy
- 巧用XP的Hosts文件 防止误进恶意网站
- PS4常用DNS一览 PSN下载速度慢登录失败解决办法
- 搜狗公众号爬虫学习系列一公众号的biz
- python项目实战:免费下载kugou任意付费音乐
- pytorch的简单教程
- 《勋伯格和声学》读书笔记(一):大调三和弦的排列与结构
- 【Puppeteer】基于Puppeteer采集网页图片资源
- kruskal java_Kruskal算法java版
- H3C 路由器的作用
- 关于负载均衡点点技术总结
- 如何有效实现软件的需求管理 - 4
- 3D打印塑料钢网全流程介绍(文件输出、PCB刷锡浆、PTC焊接)
热门文章
- 12无法使用otg_ios设备该如何选择U盘,以及U盘日常使用技巧
- MySQL中的浮点数类型和定点数类型
- Cortex-M3的工作模式和特权级别
- tem在c语言中的作用,Temtem状态有什么效果 Temtem各状态效果介绍_游侠网
- php中pre标签,html中pre标签与code标签的作用与用法
- 5位随机数重复的概率 php_php防止表单重复提交的方法
- fwr171改无线服务器,迅捷(Fast)FWR171无线AP模式设置
- 运行caffe自带的mnist实例教程
- 谈谈程序链接及分段那些事
- C++标准模板库(STL)的概念