August 22, 2010
LVS集群的通用结构
"\u003cp\u003eLVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2010/08/lvs-architecture.jpg\"\u003e\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/lvs-architecture.jpg\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e图2.1:LVS集群的体系结构\u003c/p\u003e\n\u003cp\u003e为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。LVS集群的体系结构如图2.1所示,它有三个主要组成部分:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址上的。它可以是用IP负载均衡技术的负载调度器,也可以是基于内容请求分发的负载调度器,还可以是两者的结合。\u003c/li\u003e\n\u003cli\u003e服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。\u003c/li\u003e\n\u003cli\u003e后端存储(backend storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e调度器采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当客 …\u003c/p\u003e"
August 20, 2010
Keepalived服务器状态监测
"\u003cp\u003ekeepalived是一个类似于layer3, 4 \u0026amp; 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。\u003c/p\u003e\n\u003cp\u003eLayer3,4\u0026amp;5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:\u003c/p\u003e\n\u003cp\u003eLayer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器\u003c/p\u003e\n\u003cp\u003e发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,…\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e相关keepalived实现的教程:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e基于LVS的集群配置:\u003c/p\u003e\n\u003cp\u003e利用LVS+Keepalived 实现高性能高可用负载均衡服务器:\u003c/p\u003e\n\u003cp\u003eCentOS5.5环境下布 …\u003c/p\u003e"
August 20, 2010
在FreeBSD上安装Squid
"\u003cp\u003e\u003cstrong\u003eSquid 2.5下载 \u0026amp; 安装\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003esquid的2.5最新版本是squid-2.5.STABLE7,先下载安装包,再安装:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e #cd /tmp\n #mkdir squidinstall\n #cd squidinstall\n #fetch http://www.squid-cache.org/Versions/v2/2.5/squid-2.5.STABLE7.tar.gz\n #tar xzvf squid-2.5.STABLE7.tar.gz\n #cd squid-2.5.STABLE7\n #./configure –prefix=/usr/local/squid\n #make\n #make install\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e看到类似于下图的提示,并且没有出现 Error Code :1 之类的错误提示,证明Squid已经安装完成了!\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e/usr/local/squid/sbin/squid -z\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e/usr/local/squid/sbin/squid\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cstrong\u003e配置Squid.conf\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e好,接下来要做的仅仅是配置Squid.conf.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#ee …\u003c/p\u003e\u003c/blockquote\u003e"
August 19, 2010
mysql各种HA方案
"\u003cp\u003emysql的单点一直是一个让人很烦恼的事情,特别是master的单点。\u003c/p\u003e\n\u003cp\u003e现在外面的解决方案主要如下: 双master方案,heartbert(HA)+rhcs(分布式文件系统),heartbert(HA)+DRBD.\u003c/p\u003e\n\u003cp\u003e双master存在的问题是master有2个IP,这样意为着前端需要指向2个的masterIP,同时bin-log也是双向同步的,会不会比单向同步的量更多呢?\u003c/p\u003e\n\u003cp\u003e第二种方案是挺不错的,但是必须要分布式文件系统,要是实在不行就可以用NFS来代替,但是这样存在的问题就是数据文件是单点,所以必须使用分布式文件系统。\u003c/p\u003e\n\u003cp\u003e第三种是关键是DRBD,这个是在网络层做RAID1,在A机器上收到数据后DRBD会写到本地硬盘上,同时通过网络传输到另外一台机器上。这样保证了2台机器的一致。特别是DRBD传输的时候有多种协议可以选择,但是一般看到网上大家都是使用协议C(C表示收到远程主机的写入确认后,视为写入完成)\nDRBD的架构如下:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2010/08/drbd.png\"\u003e\u003cimg src=\"http://blogx.haohtml.com/wp-content/uploads/2010/08/drbd.png\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e今天在high scalability有个文档专门比较各种mysql HA的方案。基本上大家可以根据这个比较来做自己合适的的MySQL HA了\n\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2010/08/different-ha.png\"\u003e\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/different-ha.png\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e"
August 17, 2010
[教程]freebsd下SVN服务器配置
"\u003cp\u003e**注意:**这里主要介绍使用svnserver服务器这种方式,在安装的时候使用的是ipv4,所以最好如果没有必要的话,尽量将ipv6的一些选项给取消.\u003c/p\u003e\n\u003cp\u003e安装svn服务器软件.由于要通过Web访问SVN所以要加载mod_dav模块,所以在安装apche的时候要添加一些参数:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#cd /usr/ports/devel/subversion\n#make WITH_MOD_DAV_SVN=yes WITHOUT_BDB=yes install clean\n#rehash\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e下边介绍两种使用方式:\u003c/strong\u003e\n\u003cstrong\u003e第一种方式:使用svnserve服务器\u003c/strong\u003e,自己的协议和客户端,在freebsd我在/usr/local/www/apache22/data下用FTP上传了一个blog目录\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e#cd /usr/local/www/apache22/data\u003c/p\u003e\n\u003cp\u003e#svnadmin create myblog\n#svn import blog -m “init”\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e上面第三条命令是将blog文件夹里的内容,导入到svn项目中,这种原来的文件就会在 …\u003c/p\u003e"
August 17, 2010
$HTTP_RAW_POST_DATA 和 $_POST的区别
"\u003cp\u003e这是手册里写的\u003c/p\u003e\n\u003cp\u003e总是产生变量包含有原始的 POST 数据。否则,此变量仅在碰到未识别 MIME 类型的数据时产生。不过,访问原始 POST 数据的更好方法是 php://input。$HTTP_RAW_POST_DATA 对于 enctype=”multipart/form-data” 表单数据不可用。\u003c/p\u003e\n\u003cp\u003e问题: $HTTP_RAW_POST_DATA == $_POST 吗?\u003c/p\u003e\n\u003cp\u003e照手册所写 ,答案应该就为否。\n假如不一样的话,他们的区别是什么呢?\u003c/p\u003e\n\u003cp\u003e我知道答案了,如下:\u003c/p\u003e\n\u003cp\u003eThe RAW / uninterpreted HTTP POst information can be accessed with:\n$GLOBALS[‘HTTP_RAW_POST_DATA’]\u003c/p\u003e\n\u003cp\u003eThis is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).\u003c/p\u003e\n\u003cp\u003e也就是说,基本上$GLOBALS[‘HTTP_RAW_POST_DATA’] 和 $_POST是一样的。但是如 …\u003c/p\u003e"
August 17, 2010
PHP输入流php://input
"\u003cp\u003e在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组。所以,这里主要探讨php输入流php://input\u003c/p\u003e\n\u003cp\u003e对于\u003ca href=\"http://php.net/manual/en/wrappers.php.php\"\u003ephp://input\u003c/a\u003e介绍,PHP官方手册文档有一段话对它进行了很明确地概述。\u003c/p\u003e\n\u003cp\u003e“php://input allows you to read raw POST data. It is a less memory intensive alternative to \u003ca href=\"http://www.php.net/manual/en/reserved.variables.httprawpostdata.php\"\u003e$HTTP_RAW_POST_DATA\u003c/a\u003e and does not need any special php.ini directives. php://input is not available with \u003cem\u003eenctype=”multipart/form-data”\u003c/em\u003e.\n翻译过来,是这样:\n“php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置。php://input不能用于enctype=multipart/form-data”\u003c/p\u003e\n\u003cp\u003e我们应该怎 …\u003c/p\u003e"
August 16, 2010
如何设置服务器之间时间同步
"\u003cp\u003eHP-UX系统的服务器之间的时间需要同步,利用自带的NTPD可以很好的达到目的。\u003c/p\u003e\n\u003cp\u003e假设我们要host1作时间服务器,host2定期去跟host1的系统时间同步,那么需要作以下设置,全部用root用户执行。\u003c/p\u003e\n\u003cp\u003e1。设置host1机器\n编辑/etc/rc.config.d/netdaemons,修改下面行\nexport NTPDATE_SERVER= \u003cstrong\u003e–因为这台机器将作为服务器,所以这个参数保持为空值即可\u003c/strong\u003e\nexport XNTPD=1 \u003cstrong\u003e–默认是0,改为1表示ntp进程将随系统启动自动启动\u003c/strong\u003e\nexport XNTPD_ARGS=\u003c/p\u003e\n\u003cp\u003e编辑/etc/ntp.conf,添加下面行\n这个文件默认是全部注释的,可以当成ntp的文档来阅读,我们只需要在最后添加,表示将用本地系统时间作为服务器时间\nserver 127.127.1.1\nfudge 127.127.1.1 stratum 10\u003c/p\u003e\n\u003cp\u003e启动ntp守护进程\n/sbin/init.d/xntpd start\u003c/p\u003e\n\u003cp\u003e检查进程情况\nntpq -p\u003c/p\u003e\n\u003cp\u003e2。设置host2机器\n编辑/etc/rc.config.d/netdaemons,修改下面行\nexport …\u003c/p\u003e"
August 16, 2010
ntpdate linux时间同步命令
"\u003cp\u003entpdate linux时间同步命令\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e名称\u003c/strong\u003e\nntpdate – 通过NTP 设置日期和时间\n\u003cstrong\u003e概要\u003c/strong\u003e\nntpdate [ -Bbdpqsuv ] [ -a key# ] [ -e authdelay ] [ -k keyfile ]\n[ -o version ] [ -p samples ] [ -t timeout ] server[ … ]\n\u003cstrong\u003e说明\u003c/strong\u003e\nntpdate 通过轮询指定为服务器参数的网络时间协议(NTP) 服务器来设置本地日期和时间,从而确定正确的时间。它必须以根用户身份在本地主机上运行。从每个指定的服务器中可获取大量的示例,并且还应用了NTP 时钟过滤器和选择算法的子集,以选择最佳的算法。请注意, ntpdate 的准确性和可靠性取决于服务器的数量、每次运行它时的轮询数以及运行之间的时间间隔。\u003c/p\u003e\n\u003cp\u003entpdate 根据需要可以手动运行来设置主机时钟,也可以从主机启动脚本中运行,在引导时设置时钟。某些情况下,它可用于在启动NTP 守护程序xntpd 之前对时钟进行初始设置。\u003c/p\u003e\n\u003cp\u003e也可以从cron 脚本中运行ntpdate 。但是务必要注意,包含人为产生的cron 脚本的ntpdate …\u003c/p\u003e"
August 14, 2010
NoSQL总结分类
"\u003cp\u003eNoSQL数据库异军突起,随着Digg和 sf.net大型应用不断采取NoSQL,NoSQL运动已经蓬勃发展,NoSQL数据库很多,如何对他们分类,以便方便地根据自己应用特色选择不同的NoSQL数据库呢?\u003c/p\u003e\n\u003cp\u003eNoSQL = HVSP 无(传统关系数据库的)join或明显事务的高容量简单处理。\u003c/p\u003e\n\u003cp\u003e按照数据模型保存性质将当前NoSQL分为四种:\u003c/p\u003e\n\u003cp\u003e1.Key-value stores键值存储, 保存keys+BLOBs (二进制大对象Binary Large OBjects)\u003c/p\u003e\n\u003cp\u003e2.Table-oriented 面向表, 主要有Google的BigTable和Cassandra.\u003c/p\u003e\n\u003cp\u003e3.Document-oriented面向文本, 文本是一种类似XML文档,MongoDB 和 CouchDB\u003c/p\u003e\n\u003cp\u003e4.Graph-oriented 面向图论. 如Neo4J.\u003c/p\u003e\n\u003cp\u003eNoSQL一般都是分布式数据库,高性能是其特点,因此,数据是如何被分布、复制/碎片以及合成就成为关键,这其中涉及你的应用对数据一致性的要求,见CAP原理,不同一致性处理方式决定不同类型:\u003c/p\u003e\n\u003cp\u003e1.基本上基于Dynamo. 核心思想就是在多个节点之间获得最 …\u003c/p\u003e"
August 14, 2010
Cassandra数据模型
"\u003cp\u003e提起NoSQL这个话题,仿佛不应该是DBA要关注的事,而是架构师应该关心的。但是作为一名DBA,在使用传统的关系型思想建模时,应该有必要了解NoSQL的建模方法。\u003c/p\u003e\n\u003cp\u003e各种NoSQL数据库有很多,我最关注的还是\u003cstrong\u003eBigTable\u003c/strong\u003e类型,因为它是一个高可用可扩展的分布式计算平台,用来处理海量的结构化数据,而数据库同样也是处理结构化数据,所以除了没有SQL,在数据模型方面有相似之处。\u003cstrong\u003eCassandra\u003c/strong\u003e是facebook开源出来的一个版本,可以认为是BigTable的一个开源版本,目前twitter和digg.com在使用。我们尝试从DBA的角度出发去理解Cassandra的数据模型。\u003c/p\u003e\n\u003cp\u003eNoSQL并不能简单的理解为\u003cstrong\u003eNo SQL\u003c/strong\u003e,其本质应该是\u003cstrong\u003eNo Relational\u003c/strong\u003e,也就是说它不是基于关系型的理论基础,而我们所有传统的数据库都是基于这套理论而发展起来的,所以SQL并不是问题的关键所在,比如有些NoSQL数据库可以提供SQL类型的接口,允许你通过类SQL的语法去访问数据。而Friendfeed则是反其道而行之,利用关系型数据库MySQL,采用了去关系化的设计方法,去实现自己的KeyValue存储。所 …\u003c/p\u003e"
August 13, 2010
Apache禁止目录访问方法介绍
"\u003cp\u003e在PHP网站开发中,基于WEB服务器和PHP网站程序代码的安全考虑,我们需要对相关的目录或者文件访问权限进行控制,以防止意外情况的发 生,那么我们如何来实现这种功能呢?我们可以通过Apache来实现禁止目录访问(禁止游览列出的目录或文件列表)、禁止或允许IP与域名访问目录的功 能。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e环境说明\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e我使用的是DedeCMS DedeAmpz的PHP运行环境,PHP版本5.2.4,Apache版本2.2.4\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e在Apache中配置禁止目录访问,即禁止游览列出的目录/文件列表的方法\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e访问网站目录时Apache默认配置为可列出目录/文件列表,即当你访问http://localhost时会列出相关的目录和文件列表,我们可以通过修改Apache配置文件httpd.conf来实现禁止列出目录/文件列表,方法如下:\u003c/p\u003e\n\u003cp\u003e1、打开apache配置文件httpd.conf\u003c/p\u003e\n\u003cp\u003e2、找到\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eOptions Indexes\nAllowOverride None\nOrder allow,deny\nAllow from all\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e只需要\u003cstrong\u003e修改Options Indexes为Options None\u003c/strong\u003e即可,\u003cstrong\u003e注\u003c/strong\u003e:根据\u003ca href=\"http://www.leapsoul.cn/?tag=php%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE\" title=\"PHP环境配置\"\u003ePHP运行环境\u003c/a\u003e安装包的 …\u003c/p\u003e"
August 11, 2010
可扩展性设计之数据切分
"\u003cp\u003e可能很多读者朋友在网上或者杂志上面都已经多次见到关于数据切分的相关文章了, 只不过在有些文章中称之为数据的 Sharding 。其实不管是称之为数据的 Sharding 还是数据的切分,其概念都是一样的。简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。 数据的切分同时还可以提高系统的总体可用性,因为单台设备 Crash 之后,只有总体数据的某部分不可用,而不是所有的数据。\u003c/p\u003e\n\u003cp\u003e数据的切分( Sharding )根据其切分规则的类型,可以分为两种切分模式。\n\u003cstrong\u003e垂直(纵向)切分:\u003c/strong\u003e 一种是按照不同的表(或者 Schema )来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;\n\u003cstrong\u003e水平(横向)切分:\u003c/strong\u003e 另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。\u003c/p\u003e\n\u003cp\u003e垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很小,业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业务模块所 …\u003c/p\u003e"
August 7, 2010
FreeBSD+Rsync文件同步
"\u003cp\u003e\u003cstrong\u003e一.服务端和客户端安装一样\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ewoody-207#cd /usr/ports/net/rsync\nwoody-207#make install\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e二.配置rsync服务端\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e****woody207# vi /usr/local/etc/rsyncd.conf\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e添加以下内容\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[www]\ncomment = web server backup\npath = /www\nauth users = woody\nuid = nobody\ngid = nogroup\nsecrets file = /usr/local/etc/rsyncd.secrets\nread\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e启动rsync的daemon模式\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003evi /usr/local/etc/rc.d/rsyncd\n修改这一行内容,使用IPV4协议\ncommand_args=”-4 –daemon”\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e系统服务配置\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e****#echo ‘rsyncd_enable=”YES”’ \u0026raquo; /etc/rc.conf\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e启动服务\u003c/strong\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e****woody-207# /usr/local/etc/rc.d/rsyncd start\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e检查Rsync daemon …\u003c/strong\u003e\u003c/p\u003e"
August 7, 2010
[教程]freebsd中使用rsync同步文件
"\u003cp\u003ersync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync\n它的特性如下:\n可以镜像保存整个目录树和文件系统。\n可以很容易做到保持原来文件的权限、时间、软硬链接等等。\n无须特殊权限即可安装。\n优化的流程,文件传输效率高。\n可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。\n支持匿名传输,以方便进行网站镜象。\u003c/p\u003e\n\u003cp\u003e测试环境freebsd6.3 server:192.168.1.3 client:192.168.1.4\n\u003cstrong\u003e1、server端配置(备份源服务器)\u003c/strong\u003e\n安装rsync\n#cd /usr/ports/net/rsync\n#make install clean\n安装成功后编辑rsync的配置文件\n#vi /usr/local/etc/rsyncd.conf\n加入以下内容\u003c/p\u003e\n\u003cp\u003e[test] #rsync区段的设定名称\ncomment = test rsync backup #注释\npath = /var/www/htdocs/ #需要同步的数据所在路径\nauth users …\u003c/p\u003e"