首页 > 代码库 > haproxy+keepalived双主模型及动静分离的实现
haproxy+keepalived双主模型及动静分离的实现
实验目标:
1、haproxy统计页面的输出机制;
2、haproxy动静分离机制;
3、基于keepalived的高可用实现;
环境: vm8虚拟机
操作系统: centos 6.4
内核版本: 2.6.32-358.el6.x86_64
注:
(1) 每个haproxy各有两块网卡,外网网卡选择Bridge,内网网卡选择Vmnet2;
(2) 内部两台web服务器的网卡都是选择Vmnet2;
一、准备工作:
1、各节点IP地址相关设置
node1: ifconfig eth1 192.168.16.15/24 up
node2: ifconfig eth1 192.168.16.16/24 up
node3: ifconfig eth0 192.168.16.17/24 up
route add default gw 192.168.16.15
node4:ifconfig eth0 192.168.16.18/24 up
route add default gw 192.168.16.15
2、设置主机名
1) 临时设置主机名,即时生效
node1: hostname node1.ja.com
node2: hostname node2.ja.com
node3: hostname node3.ja.com
node4: hostname node4.ja.com
2) 确保主机重启之后,主机名仍保持不变
node1: sed -i ‘s/\(HOSTNAME=\).*/\1node1.ja.com/‘ /etc/sysconfig/network
node2: sed -i ‘s/\(HOSTNAME=\).*/\1node2.ja.com/‘ /etc/sysconfig/network
node3: sed -i ‘s/\(HOSTNAME=\).*/\1node3.ja.com/‘ /etc/sysconfig/network
node4: sed -i ‘s/\(HOSTNAME=\).*/\1node4.ja.com/‘ /etc/sysconfig/network
3、添加主机名称解析,在各节点执行如下操作:
cat >ed.txt<<EOF
\$a\172.16.16.15 node1.ja.com
\$a\192.168.16.15 node1.ja.com
\$a\192.168.16.16 node2.ja.com
\$a\192.168.16.17 node3.ja.com
\$a\192.168.16.18 node4.ja.com
EOF
sed -i -f ed.txt /etc/hosts
4、配置各节点与控制端的互信
# ssh-keygen -t rsa -P ‘‘
# ssh-copy-id -i .ssh/id_rsa.pub node2.ja.com
# ssh-copy-id -i .ssh/id_rsa.pub node3.ja.com
# ssh-copy-id -i .ssh/id_rsa.pub node4.ja.com
测试主机互信是否成功
# for i in `seq 2 4`;do ssh node$i.ja.com ‘date‘ &>/dev/null;done
5、各节点时间的时间同步
1) 命令行同步,立即生效:
ssh node2.ja.com ‘ntpdate 172.16.0.1‘;ntpdate 172.16.0.1
2) 设置定时任务,永久有效:
echo ‘*/5 * * * * /usr/sbin/ntpdate 172.16.0.1 &>/dev/null;/sbin/hwclock -s‘ >>/var/spool/cron/root
二、各节点的软件安装与配置
1、haproxy的安装与配置
node1:
==========================================================================================
# yum -y install haproxy
# cd /etc/haproxy/
# cp haproxy.cfg{,.ori}
# egrep -v ‘^$|^[[:space:]]*#‘ /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 webserver
bind *:80
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js .html
acl host_static hdr_beg(host) -i img. video. download. ftp. imgs. image. videos.
acl url_php path_end -i .php
use_backend static if url_static or host_static
use_backend dynamic if url_php
default_backend dynamic
backend static
balance roundrobin
server node3 192.168.16.17:80 check maxconn 3000
backend dynamic
balance roundrobin
server node4 192.168.16.18:80 check maxconn 1000
==========================================================================================
2、定义haproxy日志记录
==========================================================================================
# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2 将自己的日志交给本机的rsyslog去管理
# vim /etc/rsyslog.conf
启用下面几项(UDP或TCP其中之一即可),将rsyslog.conf作为日志服务器来工作
第一步:启动可以帮助服务器记录日志的功能
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
第二步:定义记录日志的设施
local2.* /var/log/haproxy.log
保存退出并重启rsyslog,haproxy 查看是否开始记录日志了
# service rsyslog restart
# service haproxy reload
在浏览器访问测试,然后查看日志,看是否记录日志了
# tail /var/log/haproxy.log
保持node1,node2上haproxy.cfg配置文件内容保持一致
在node1上操作:
# cd /etc/haproxy/
# scp -p haproxy.cfg node2.ja.com:/etc/haproxy/
在node2上操作:
编辑node2的/etc/rsyslog.conf,启用或添加内容同node1
至此,haproxy基本配置完毕!!!
==========================================================================================
3、WEB服务器配置
==========================================================================================
1) node3: 使用nginx处理静态页面
yum源中没有nginx,epel源中有nginx,所以需要先安装epel源
# rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm
# yum -y install nginx
# echo "node3.ja.com" >/usr/share/nginx/html/index.html
# service nginx start
# chkconfig nginx on
查看nginx是否可以正常提供的web服务
# curl http://172.16.16.17
2) node4: 使用apache处理动态页面
# yum -y install httpd php php-mysql
# echo "node4.ja.com" >/var/www/html/index.php
# service httpd start
# chkconfig httpd on
查看nginx是否可以正常提供的web服务
# curl http://172.16.16.18
3) 通过浏览器直接访问node3,node4上的web服务,看是否可以web服务器是否工作正常
4) 分别为node3,node4提供动静测试页
node3:
# cd /usr/share/nginx/html/
# for i in `seq 10`;do echo "<h1>node3.test$i</h1>" >test$i.html;done
# vim /usr/share/nginx/html/index.php
Welcome to node3.jacom
<?php
phpinfo();
?>
node4:
# cd /usr/share/nginx/html/
# for i in `seq 10`;do echo "<h1>node4.test$i</h1>" >test$i.html;done
# vim /usr/share/nginx/html/index.php
Welcome to node4.jacom
<?php
phpinfo();
?>
==========================================================================================
实现第一个目标:haproxy统计页面的输出机制
============================================================================================
在浏览器输入http://www.ja.com:7007/hpadmin?stats并回车,即会弹出如下身份验证的窗口,此时只需输入在haproxy中设置的用户名和密码即可
如下截图:即为成功登陆后,看到的内容
实现第二个目标: haproxy动静分离机制
============================================================================================
============================================================================================
实现第三个目标: 基于keepalived的高可用实现
============================================================================================
node1: 模拟node1上的haproxy服务意外关闭,看haproxy服务是否能够实现故障转移
# service haproxy stop
# service haproxy status
haproxy is stopped
浏览器访问测试,验证高可用效果
我们在浏览器请求某一图片资源,依然可以得到相应,就表示我们前端至少还有一个haproxy仍在工作着,及haproxy实现了高可用
本文出自 “Enjoy the process” 博客,请务必保留此出处http://1757513075.blog.51cto.com/8607255/1405834
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。