博客统计信息

51cto专家博客 51cto博客之星
用户名:sery
文章数:191
评论数:2878
访问量:1283149
无忧币:11539
博客积分:8262
博客等级:9
注册日期:2006-03-29

可扩展、高可用、负载均衡网站架构设计方案
2008-07-05 22:13:00
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://sery.blog.51cto.com/10037/85910
可扩展、高可用、负载均衡网站架构设计方案
作者:田逸(sery@163.com) 本作品已刊登在《IT实验室周报》第6期第6版
基本需求:
1、  高可用性:将停止服务时间降低到最低甚至是不间断服务
2、  可扩展性:随着访问的增加,系统具备良好的伸缩能力
3、  可视性:系统、服务的状态处于一个实时的监控之下
4、  高性能高可靠性:经过优化的体系结构及合理的备份策略
5、  安全性:结构上的安全及主机的安全策略
 
基本思路
1、对于访问频繁,用户量大的对象(bbs,blog)采用某种合理的方式负载到多个服务器上。把数据库独立出来,准备2mysql数据库,以实现主从复制,即减轻负载,又提高了可靠性。更近一步,使用mysql proxy技术,实现主从服务器的读写分离,大大提高这个系统的性能和负载能力。
2、数据库与外部网络隔离,只允许web服务器(bbs,blog等)通过私有地址方式访问。这样就提高了数据库的安全性,同时也节省了宝贵的带宽。
3、部署监控系统,通过监控主机存活、服务、主机资源,实时把系统的健康状态置于可视状态,对系统的运营状态心中有数。
4、备份是想都不用想的事情,使用单独的服务器集中备份,是一个比较不错的主意。
 
拓扑结构
 
业务逻辑
 
技术实现
1、负载均衡。2台同样配置的linux服务器,内核支持lvs,配置keepalived工具,即可实现负载转发。一旦其后的真实服务器出现故障,keepalived会自动把故障机器从转发队列删除掉,等到故障修复,它又会自动把真实服务器的地址加入转发列表。由于lvs支持会话保持,因此对于bbs 这样的应用,一点也不用担心其登录丢失。
2mysql主从复制。即保证数据的安全,又提高了访问性能。我们在前端的每个web服务器上加入mysql proxy这个工具,即可期待实现读写的自动分离,让写的操作发生在主数据库,让查询这类读操作发生在从数据库。
3nagios是一个开源的,受广泛欢迎的监控平台。它可对主机的存活、系统资源(磁盘空间、负载等)、网络服务进行实时监控。一旦探测到故障,将自动发送邮件(短信)通知故障。
4、备份。包括web数据和数据库服务器的备份。对于web服务而言,GNU tar即可实现备份的一切愿望。简单的设置一下crontab 就可以让系统在我们做梦的时刻老老实实的帮我们备份了。但是,由于空间的限制,不可能一直备份下去,所以要做一个合适的策略,以不断的用新的备份去替换陈旧的备份数据;多少天合适?看磁盘容量吧。对于数据库,先mysqldump一下,再tar.完成这些工作后把备份文件传输到备份服务器集中。一个比较省事的方法是把备份服务器以NFS方式挂接到web服务器及数据库服务器。
5web服务器。至少包括apachemysql proxy这两个组件。Apachebbsblog的容器,以虚拟机方式把用户的请求转发到bbs目录或blog目录。
6、安全措施。包含两层安全,一层是主机本身,另一层是结构(mysql从外部网络隔离)。实践证明,iptables是一个非常值得信赖的防火墙工具。在实际应用中,采取先关门后开窗的策略,大大增强系统的安全性。
 
组件
一、 硬件: 负载均衡2(dell 1950),web服务器2-3(dell1950),数据库2(dell 2950),存储NAS(5T格式化后容量),备份4u服务器(带磁盘阵列5T容量),监控服务器1(dell1850).
二、 软件:操作系统centos 5(定制安装),负载均衡ipvsadmkeepalived,监控nagios,web服务apache+php等,数据库mysql,数据库代理mysql proxy.
 
进度安排
1、  lvs负载均衡配置及测试:2-3
2、  web服务器配置:2-3
3、  mysql主从服务器配置:1-3
4、  web数据迁移:1
5、  数据库数据迁移:2
6、  上线测试:1-2
7、  正式上线:2
 
 
keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
 
vrrp_instance VI_1 {
    state  master
    interface eth0
    virtual_router_id 59
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
        }
  virtual_ipaddress {
  61.61.61.100
  #61.61.61.101
  }
}
 
virtual_server 61.61.61.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
real_server 61.61.61.102 80 {
        weight 100
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    real_server 61.61.61.103 80 {
        weight 100
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
     }
    }
 
真实服务器虚拟ip设置脚本
#!/bin/bash
#description : start realserver
VIP=61.61.61.100
./etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac

本文出自 “sery” 博客,请务必保留此出处http://sery.blog.51cto.com/10037/85910

分享至
更多
一键收藏,随时查看,分享好友!
baiying、wgkgood、lcmust
4人
了这篇文章
类别:linux企业应用技术圈()┆阅读()┆评论() ┆ 推送到技术圈返回首页

文章评论

 
2008-07-05 22:20:42
顶一下,今天师傅的现场讲解很不错哈。很困的我都没有想睡觉的想法了

2008-07-05 22:34:55
发视频!~我顶!!可怜我这样的外地人!

2008-07-05 22:53:45
黑心 有视频呢 一样的效果

2008-07-06 09:40:46
田老师,你好,昨天听了你的讲解,感觉很不错。只可惜时间有点紧,不然还想多听一会。

这里有个问题还想请教一下,关于“mysql主从服务器配置”,主mysql服务器和从的mysql服务器之间是不是还要连一根网线呢?
我总觉得如果它们之间没有网线连接的话,数据是无法保持一致性的。即:主的mysql上被写了数据,从的mysql上又没写,怎么能读到呢?

2008-07-06 11:03:24
看来很有必要搞次mysql的交流活动

2008-07-06 13:52:19
..........田老师,你就解答一下吧。主从的两个MYSQL到底要不要直连呢?

在线苦等。。。。。

2008-07-06 14:17:05
不需要

2008-07-06 14:18:00
先把主从复制原理弄明白

2008-07-06 17:13:34
来点基础的交流活动吧!

2008-07-06 17:51:26
多谢田老师。

2008-07-06 21:27:01
能不能搞过培训班什么的?

2008-07-07 14:02:27
以后这种技术沙龙会有很多吧?

嘿嘿,再次期待老大精彩讲解。

2008-07-07 15:22:49
期待视频

2008-07-08 23:11:12
学习 ,很不错~~·也期待视频讲座呀~~

2009-02-19 17:02:42
lvs能否配置超过两台,并对lvs进行负载均衡和全局互备.

2009-02-19 18:41:29
最理想的情况就是2个

2009-06-23 14:50:34
恩 你说的这个我看明白了 我想问下 ,进行软件架构设计的时候应该如何具体考虑这些问题。谢谢

2009-06-23 16:27:55
流量大 要求高

2009-06-30 00:11:15
不错,值得学习

2009-08-17 11:00:19
我的keepalived在centos 5下试验的有点问题,用的是1.17,


http://bbs3.chinaunix.net/thread-1538462-1-1.html

2009-08-17 12:43:50
http://www.keepalived.org/LVS-NAT-Keepalived-HOWTO.html 最完整的文档

2009-08-17 13:08:38
对,我就是按这个做的,不知道您有没有看我发的链接!谢谢!

2009-08-19 11:46:16
看来就我一人这样,重新做了几次还是如此,我是在虚假机中做的,可能有关吧,有时间拿真机试试
博主回复:
2010-12-14 22:07:15
虚拟机里稍有不同 我记得远程给一个网友实际配置过

2011-08-22 08:01:20
写的非常实用!都是精华!顶一个!

 

发表评论            

【技术门诊】专家解析:软考重点难点及应试技巧
昵  称:
登录  快速注册
验证码:

请点击后输入验证码博客过2级,无需填写验证码

内  容: