Rhel6-haproxy+keepalived配置文档
系统环境: rhel6 x86_64 iptables and selinux disabled
主机: 192.168.122.119:haproxy,keepalived server19.example.com
192.168.122.25:haproxy,keepalived server25.example.com
192.168.122.163:apache server63.example.com
192.168.122.193:apache server93.example.com
所需的包:haproxy-1.4.23.tar.gz
相关网址:http://haproxy.1wt.eu/
HAProx提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy
特别适用于那些负载特大的web站点,
这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,
同时可以保护你的web服务器不被暴露到网络上。
#安装haproxy
以下步骤在server19或server25上实施:
[root@server19 kernel]# yum install rpm-build -y
[root@server19 kernel]# rpmbuild -tb haproxy-1.4.23.tar.gz
此时会出现以下错误:
(1)error: Failed build dependencies:
pcre-devel is needed by haproxy-1.4.23-1.x86_64
(2)/var/tmp/rpm-tmp.9z0hXn: line 28: /usr/bin/make: No such file or directory
(3) make: gcc: Command not found
解决方法如下:
(1)[root@server19
kernel]# yum install pcre-devel -y
(2)[root@server19
kernel]# yum install make -y
(3)[root@server19
kernel]# yum install gcc -y
[root@server19
kernel]# cd ~/rpmbuild/RPMS/x86_64/
[root@server19
x86_64]# rpm -ivh haproxy-1.4.23-1.x86_64.rpm
的镜像文件中均集成了haproxy,可以直接yum
install haproxy -y进行安装
#配置haproxy
以下步骤在server63和server93上实施:
[root@server63
~]# yum install httpd -y
[root@server63
~]# echo `hostname` > /var/www/html/index.html
[root@server63
~]# /etc/init.d/httpd start
以下步骤在server19或server25上实施:
[root@server19
x86_64]# cd /etc/haproxy/
[root@server19
haproxy]# vim haproxy.cfg
global
log 127.0.0.1 local0 #执行日志设备
log 127.0.0.1 local1 notice
#log loghost local0 info #指定日志类型,还有err,warning,debug
maxconn 4096 #并发最大连接数
chroot /usr/share/haproxy #jail目录
uid 99 #用户
gid 99 #组
daemon #后台运行
#debug
#quiet
defaults
log global
mode http 层
option httplog #http日志格式
option dontlognull #禁止空链接日志
retries 3 次失败认为服务器不可用
option redispatch #当client连接到挂掉的设备时,重新分配到健康的主机
maxconn 2000
contimeout 5000 #连接超时
clitimeout 50000 #客户端超时
srvtimeout 50000 #服务器超时
stats uri /status #开启haproxy监控页面
listen
www.example.com *:80 #监听的实例名称,地址和端口
cookie SERVERID rewrite
balance roundrobin #负载均衡算法
server app1_1 192.168.122.163:80
cookie app1inst1 check inter 2000 rise 2 fall 5
server app1_2 192.168.122.193:80
cookie app1inst2 check inter 2000 rise 2 fall 5
注释:
cookie
app1inst1 表示serverid为applinst1
check inter2000 检测心跳频率
rise 2 表示2次正确认为服务器可用
fall 5 表示5次失败认为服务器不可用
[root@server19
haproxy]# mkdir /usr/share/haproxy
[root@server19
haproxy]# /etc/init.d/haproxy start
测试:
访问www.example.com
反复刷新,若每次出现的页面不同说明配置成功.(注:访问前先写好解析)
访问haproxy监控页面:www.example.com/status出现如下页面说明配置成功
# 以前端后端的方式进行配置
[root@server19 ~]# vim /etc/haproxy/haproxy.cfg
frontend www.example.com *:80
default_backend back1
backend
back1
balance roundrobin
#负载均衡算法
server
appl_1 192.168.122.163:80 check
server appl_2
192.168.122.193:80 check
[root@server19
~]# /etc/init.d/haproxy reload
#
当后端服务全down,由本机提供服务
[root@server19
~]# yum install httpd -y
[root@server19
~]# vim /etc/httpd/conf/httpd.conf
Listen
127.0.0.1:8008
[root@server19
~]# echo server19.example.com > /var/www/html/index.html
[root@server19
~]# /etc/init.d/httpd restart
注:一定要更换apache的端口,否则将会与haproxy监听的端口冲突,发生错误
[root@server19
~]# vim /etc/haproxy/haproxy.cfg
frontend
www.example.com *:80
default_backend
back1
backend
back1
balance roundrobin
#负载均衡算法
server
appl_1 192.168.122.163:80 check
server appl_2
192.168.122.193:80 check
server
backup 127.0.0.1:8008 backup
[root@server19
~]# /etc/init.d/haproxy reload
测试:
将后端的server63和server93上的httpd服务关闭,然后访问192.168.122.119能访问到server19上的页面就是表示配置成功。
注:只要server63和server93有一台机子上的httpd服务是好的,就访问不到server19上的页面,server19只作为备机用
#
haproxy的acl配置
[root@server19
~]# vim /etc/haproxy/haproxy.cfg
frontend
www.example.com *:80
default_backend
back1
acl
badguys src 192.168.122.1
tcp-request content
reject if badguys 不允许192.168.122.1连接
backend
back1
balance roundrobin
#负载均衡算法
server
appl_1 192.168.122.163:80 check
server appl_2
192.168.122.193:80 check
server
backup 127.0.0.1:8008 backup
[root@server19
~]# /etc/init.d/haproxy reload
[root@server19
~]# vim /etc/haproxy/haproxy.cfg
frontend
www.example.com *:80
default_backend
back1
acl
goodguys src 192.168.122.1
tcp-request content
accept if goodguys
tcp-request
content reject 只允许192.168.122.1访问
backend
back1
balance roundrobin
#负载均衡算法
server
appl_1 192.168.122.163:80 check
server appl_2
192.168.122.193:80 check
server
backup 127.0.0.1:8008 backup
[root@server19
~]# /etc/init.d/haproxy reload
[root@server19
~]# vim /etc/haproxy/haproxy.cfg
frontend
www.example.com
*:80
default_backend
back1
acl
goodguys src 192.168.122.0/24
tcp-request content
accept if goodguys
tcp-request
content reject
acl
badguys src 192.168.122.1
block if badguys
errorloc 403
http://www.baidu.com
只允许192.168.122.0这个网段的访问,并且当192.168.122.1访问时,允许连接,但是拒绝访问,并将其重定向到百度首页
backend
back1
balance roundrobin
#负载均衡算法
server
appl_1 192.168.122.163:80 check
server appl_2
192.168.122.193:80 check
server
backup 127.0.0.1:8008 backup
[root@server19
~]# /etc/init.d/haproxy reload
#
haproxy的动静分离配置
[root@server19
~]# vim /etc/haproxy/haproxy.cfg
frontend
www.example.com *:80
acl
url_static path_end -i .jpg
use_backend back2 if url_static
default_backend back1
acl goodguys src 192.168.122.0/24
tcp-request content accept if goodguys
tcp-request content reject
backend
back1
balance roundrobin
server appl_1 192.168.122.163:80 check
server appl_2
192.168.122.193:80 check
backend
back2
balance roundrobin
server static 127.0.0.1:8008 check
默认的访问back1的后端服务(动态),当访问的是以*.jpg结尾的时候,访问back2的后端服务(静态)
[root@server19
~]# /etc/init.d/haproxy reload
#
haproxy的读写分离配置
[root@server19
~]# vim /etc/haproxy/haproxy.cfg
frontend
www.example.com *:80
acl url_static path_end -i .jpg
use_backend back2 if url_static
default_backend back1
acl read method GET
acl write method POST
use_backend back1 if read
use_backend back3 if write
acl goodguys src 192.168.122.0/24
tcp-request content accept if goodguys
tcp-request content reject
backend
back1
balance roundrobin
server read 192.168.122.163:80 check
backend
back2
balance roundrobin
server static 127.0.0.1:8008 check
backend
back3
balance roundrobin
server write 192.168.122.193:80 check
[root@server19
~]# /etc/init.d/haproxy reload
以下步骤在server63和server93上实施:
[root@server63
~]# yum install php -y
[root@server63
~]# cd /var/www/html/
[root@server63
html]# vim index.php
<html>
<body>
<form
action="upload_file.php" method="post"
enctype="multipart/form-data">
<label
for="file">Filename:</label>
<input
type="file" name="file" id="file" />
<br
/>
<input
type="submit" name="submit" value="Submit"
/>
</form>
</body>
</html>
[root@server63
html]# vim upload_file.php
<?php
if
((($_FILES["file"]["type"] == "image/gif")
||
($_FILES["file"]["type"] == "image/jpeg")
||
($_FILES["file"]["type"] == "image/pjpeg"))
&&
($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"]
. "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"]
. "<br />";
echo "Type: " . $_FILES["file"]["type"]
. "<br />";
echo "Size: " . ($_FILES["file"]["size"]
/ 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"]
. "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . "
already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" .
$_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
[root@server63
html]# mkdir upload
[root@server63
html]# chmod 777 upload
[root@server63
html]# /etc/init.d/httpd restart
#
给监控页面添加认证
以下步骤在server19或server25上实施:
[root@server19
~]# vim /etc/haproxy/haproxy.cfg
listen
status_auth 192.168.122.119:8080
stats enable
stats uri /status #监控页面地址
stats auth admin:westos #管理帐号和密码
stats refresh 5s #刷新频率
[root@server19
~]# /etc/init.d/haproxy reload
测试:
访问192.168.122.119:8080/status若出现如下认证页面说明配置成功.
#haproxy日志
以下步骤在server19或server25上实施:
[root@server19 ~]# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0
#log 127.0.0.1 local1 notice
log 192.168.122.119 local0 info
…
[root@server19 ~]# vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp (去掉注释) #接受haproxy日志
$UDPServerRun 514 (去掉注释)
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local0.none /var/log/messages
# Save boot messages also to boot.log
local7.* /var/log/boot.log
local0.* /var/log/haproxy.log
#指定日志文件位置
[root@server19 ~]# /etc/init.d/rsyslog restart
[root@server19 ~]# /etc/init.d/haproxy reload
测试:
执行tail -f /var/log/haproxy.log查看是否将日志记录在此文件中.
#将haproxy和keepalived整合
注:keepalived的安装方法请看Rhel6-keepalived+lvs.pdf
以下步骤在server19和server25上实施:
[root@server19
x86_64]# rpm -ivh haproxy-1.4.23-1.x86_64.rpm
以下步骤在server19上实施:
[root@server19
~]# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0 #执行日志设备
log 127.0.0.1 local1 notice
#log loghost local0 info #指定日志类型,还有err,warning,debug
maxconn 4096 #并发最大连接数
chroot /usr/share/haproxy #jail目录
uid 99 #用户
gid 99 #组
daemon #后台运行
#debug
#quiet
defaults
log global
mode http 层
option httplog #http日志格式
option dontlognull #禁止空链接日志
retries 3 次失败认为服务器不可用
option redispatch #当client连接到挂掉的设备时,重新分配到健康的主机
maxconn 2000
contimeout 5000 #连接超时
clitimeout 50000 #客户端超时
srvtimeout 50000 #服务器超时
stats uri /status #开启haproxy监控页面
listen
www.example.com *:80 #监听的实例名称,地址和端口
cookie SERVERID rewrite
balance roundrobin #负载均衡算法
server app1_1 192.168.122.163:80
cookie app1inst1 check inter 2000 rise 2 fall 5
server app1_2 192.168.122.193:80
cookie app1inst2 check inter 2000 rise 2 fall 5
注释:
cookie
app1inst1 表示serverid为applinst1
check inter2000 检测心跳频率
rise 2 表示2次正确认为服务器可用
fall 5 表示5次失败认为服务器不可用
[root@server19
~]# vim /etc/keepalived/keepalived.conf
vrrp_script
check_haproxy {
script "/opt/check_haproxy.sh"
interval 2
weight 2
}
global_defs
{
notification_email {
root@localhost
}
notification_email_from keepalived@server19.example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance
VI_1 {
state
MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.122.178
}
track_script {
check_haproxy
}
}
[root@server19
~]# vim /opt/check_haproxy.sh (脚本内容任选其一即可)
脚本一: #!/bin/bash
/etc/init.d/haproxy
status &> /dev/null || /etc/init.d/haproxy restart &>
/dev/null
if
[ $? -ne 0 ];then
/etc/init.d/keepalived
stop &> /dev/null
fi
脚本二:#!/bin/bash
[
-f /var/run/haproxy.pid ] || /etc/init.d/haproxy restart &>
/dev/null
if
[ $? -ne 0 ];then
/etc/init.d/keepalived
stop &> /dev/null
fi
脚本for
rhel7:
#!/bin/bash
systemctl
status haproxy &> /dev/null || systemctl restart haproxy &>
/dev/null
if
[ $? -ne 0 ];then
systemctl
stop keepalived
fi
[root@server19
~]# chmod +x /opt/check_haproxy.sh
以下步骤在server25上实施:
[root@server25
~]# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0 #执行日志设备
log 127.0.0.1 local1 notice
#log loghost local0 info #指定日志类型,还有err,warning,debug
maxconn 4096 #并发最大连接数
chroot /usr/share/haproxy #jail目录
uid 99 #用户
gid 99 #组
daemon #后台运行
#debug
#quiet
defaults
log global
mode http 层
option httplog #http日志格式
option dontlognull #禁止空链接日志
retries 3 次失败认为服务器不可用
option redispatch #当client连接到挂掉的设备时,重新分配到健康的主机
maxconn 2000
contimeout 5000 #连接超时
clitimeout 50000 #客户端超时
srvtimeout 50000 #服务器超时
stats uri /status #开启haproxy监控页面
listen
www.example.com *:80 #监听的实例名称,地址和端口
cookie SERVERID rewrite
balance roundrobin #负载均衡算法
server app1_1 192.168.122.163:80
cookie app1inst1 check inter 2000 rise 2 fall 5
server app1_2 192.168.122.193:80
cookie app1inst2 check inter 2000 rise 2 fall 5
注释:
cookie
app1inst1 表示serverid为applinst1
check inter2000 检测心跳频率
rise 2 表示2次正确认为服务器可用
fall 5 表示5次失败认为服务器不可用
[root@server25
~]# vim /etc/keepalived/keepalived.conf
vrrp_script
check_haproxy {
script "/opt/check_haproxy.sh"
interval 2
weight 2
}
global_defs
{
notification_email {
root@localhost
}
notification_email_from keepalived@server25.example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance
VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.122.178
}
track_script {
check_haproxy
}
}
[root@server25
~]# vim /opt/check_haproxy.sh (脚本内容任选其一即可)
脚本一: #!/bin/bash
/etc/init.d/haproxy
status &> /dev/null || /etc/init.d/haproxy restart &>
/dev/null
if
[ $? -ne 0 ];then
/etc/init.d/keepalived
stop &> /dev/null
fi
脚本二:#!/bin/bash
[
-f /var/run/haproxy.pid ] || /etc/init.d/haproxy restart &>
/dev/null
if
[ $? -ne 0 ];then
/etc/init.d/keepalived
stop &> /dev/null
fi
脚本for
rhel7:
#!/bin/bash
systemctl
status haproxy &> /dev/null || systemctl restart haproxy &>
/dev/null
if
[ $? -ne 0 ];then
systemctl
stop keepalived
fi
[root@server25
~]# chmod +x /opt/check_haproxy.sh
以下步骤在server19和server25上实施:
[root@server19
~]# /etc/init.d/keepalived start
(此处只需手动把keepalived启动,keepalived将调用check_haproxy.sh脚本把haproxy启动)
测试:
访问192.168.122.178反复刷新页面,每次出现的页面都不同,将server19的keepalived关闭,执行ip
addr show查看虚拟IP是否浮动到server25上,然后再
将server19上的keepalived启动,执行ip
addr show查看虚拟IP是否会浮动回server19上.
Rhel6-haproxy+keepalived配置文档的更多相关文章
- haproxy官方配置文档地址
http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#4-option%20http-keep-alive
- MYSQL服务器my.cnf配置文档详解
MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...
- 转!!Java代码规范、格式化和checkstyle检查配置文档
为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...
- Hibernate配置文档详解
Hibernate配置文档有框架总部署文档hibernate.cfg.xml 和映射类的配置文档 ***.hbm.xml hibernate.cfg.xml(文件位置直接放在src源文件夹即可) (在 ...
- Java代码规范、格式化和checkstyle检查配置文档
http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...
- Spring Hibernate4 整合配置文档
1 applicationContext.xml配置文档 <?xml version="1.0" encoding="UTF-8"?><bea ...
- Kerberos主从配置文档
Kerberos主从配置文档 1. Kerberos主从同步机制 在Master上通过以下命令同步数据: kdb5_util dump /var/kerberos/krb5kdc/slave_db ...
- python常用模块-配置文档模块(configparser)
python常用模块-配置文档模块(configparser) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. ConfigParser模块用于生成和修改常见配置文档,当前模块的名称 ...
- azkaban编译安装配置文档
azkaban编译安装配置文档 参考官方文档: http://azkaban.github.io/azkaban/docs/latest/ azkaban的配置文件说明:http://azkaban. ...
随机推荐
- Mybatis 的分页插件PageHelper-4.1.1的使用
Mybatis 的分页插件 PageHelper 项目地址:http://git.oschina.net/free/Mybatis_PageHelper 文档地址:http://git.oschin ...
- jsp实时显示后台批处理进度 - out分块,简单的长连接方式
这两天在实现一个批处理操作,但是想让前台实时显示后台批处理进度,本想着用复杂一些的框架可以实现异步信息调用 但是鉴于是内部管理系统,且只有一两个人用到这个功能,所以做了一个简单的长连接方式的实时响应 ...
- 工作流学习——Activiti流程变量五步曲 (zhuan)
http://blog.csdn.net/zwk626542417/article/details/46648139 ***************************************** ...
- HM中字典编码分析
LZ77算法基本过程 http://jpkc.zust.edu.cn/2007/dmt/course/MMT03_05_2.htm LZ77压缩算法详解 http://wenku.baidu.com/ ...
- C++ Primer 第三章 标准库类型vector+迭代器iterator 运算
1.vector: 标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它也常被称作容器( ...
- mysql:恢复mysql表结构
mysql,frm格式恢复mysql表结构,以tuser.frm格式为例 新增数据库,如下,创建数据库名为ab 打开数据库,双击打开数据库 点右键新建表结构 新增表,里面只添加一个字段 ...
- java 集合2(迭代器)
迭代器方法:(把迭代器想象成抓娃娃机的爪子) hasNext() 问是否有元素可遍历,如果有元素可以遍历,返回true,否则返回false 工作原理:这一个迭代的过程是这样的,获取到迭代器时候 ...
- 【转】 C++ vector用法
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<in ...
- 华为面试题——一道关于指针方面的编程题(C/C++)
int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素 ...
- JSONObject和JSONArray使用
1.所依赖JAR包 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar common ...