小编在这里给大家带来windows server R2虚拟化高可用群集之四配置高可用虚拟机(共含10篇),希望大家喜欢!同时,但愿您也能像本文投稿人“巴普洛夫的狗”一样,积极向本站投稿分享好文章。
本篇将介绍在群集创建虚拟机及安装虚拟机分为创建虚拟机以及安装虚拟机两个步骤
1. 创建虚拟机
在任意一台hyper虚拟化主机中创建均可,本实验选择c1来进行安装
在C1上单击创建虚拟机
为虚拟机输入一个名字,当然在IT标准化的公司中有自己的命名规范,例如ns1,ns2,mail等,本例简单为主,直接命名2K8,注意看路径,已经是创建在我们的群集共享磁盘卷上了
然后这里输入内存选择,实际环境1GB为妙,实验而已,512MB即可,分配256即可,xp分配128即可,各自根据需要配置
选择虚拟机的网络,这里就明白,为什么虚拟网络名要求一样了吧
这里配置硬盘选项,本例是创建在共享磁盘卷上的2k8.vhd,大小为自由扩充的127GB,2008是需要30GB来作为系统盘的,这里127GB也不会真的就产生一个127GB的vhd文件,它会按需增加!
配置信息总揽
单击完成来完成虚拟机的创建
2. 安装虚拟机
这里我们单击媒体来插入iso镜像进行系统的安装,本例安装的是windows server 2008 SP2,安装过程就不再详细描述了
配置IP为245,方便后续测试快速迁移和实时迁移
配置安装完成后关闭虚拟机以便下篇介绍的创建高可用虚拟机!
出处:ccfxny.blog.51cto.com/350339/191872
本篇将已经存在于hyper中的虚拟机加入到群集中,使之高可用,当然也可以在如图的服务和应用程序中单击虚拟机-创建虚拟机这样来创建一个高可用虚拟机,本文就不讨论先有蛋还是先有鸡的问题.
单击配置服务或应用程序
出现配置高可用向导
选择一个要配置的服务,本篇选择虚拟机即可
然后向导会自动搜索群集中的虚拟机,这里注意一定要关闭虚拟机才能继续下一步并使之高可用
确认选择的虚拟机
开始创建高可用虚拟机,配置完成
现在在服务里应该能看到虚拟机了,可以看到当前虚拟机位于何服务器,以及虚拟机状态
也可以在这里进行管理虚拟机,启动以及连接到虚拟机控制台和关闭等操作,我们启动虚拟机如图
启动后如图可以看到虚拟机已经联机,我们可以单击连接到虚拟机来管理虚拟机
打开虚拟机如图所示,跟在hyper中使用连接到虚拟机功能差不多.经过本篇,总算环境都差不多,下篇我们可以测试虚拟机的高可用以及快速迁移,实时迁移等等,呵呵,兴奋ing
出处:ccfxny.blog.51cto.com/350339/191873
上篇我们已经将环境准备好了,角色功能均安装到位,现在我们开始创建群集和配置群集吧
首先我们从管理工具中打开故障转移群集管理器,在c1和c2上打开均OK,可以看见常见的任务,验证配置和创建群集以及管理现有群集,验证配置在我们做了上篇的准备后可以略过,直接创建群集吧
本篇分为
1.创建群集
2.配置仲裁磁盘
3.配置群集共享磁盘
4.配置hyper使用群集共享磁盘
```````````````````````````````````````````````华丽的分割线`````````````````````````````````````````````````
下面开始正题
1.创建群集
单击创建一个群集出现创建群集向导以创建一个新的故障转移群集
选择要加入群集的虚拟化主机,可以是一台也可以是两台,可以同时加入,也可以先加入一台再加入另一台,这点跟不一样,2003在创建群集时,第一台加入时要关闭第二台,然后打开第二台加入群集,2008R2这里可以同时加入了,呵呵.有俩台就加入俩,有三就加入三
这里会要求我们是否验证,直接选否吧,skip!
这里输入群集对外的名称,输入cc,也就是群集对外的名称就是cc加域名也就是cc.ccfxny.com这样一个对外的域名,然后下面选择一个对外IP
信息总揽,确认就进行下一步开始创建群集
OK,开始创建群集完成并自动进行下一步到这个界面了,创建OK,没有意外
这里我们就可以看到群集管理界面了,我们要做的就是配置仲裁磁盘和添加群集共享磁盘
2.配置仲裁磁盘
首先确认存储这里的磁盘,应该可以看到我们的iscsi共享磁盘,如果没有请手动选择添加磁盘,正常情况下这里已经有磁盘了,并且状态显示联机,在计算机管理的磁盘管理中状态显示为保留!
群集存储已经确认添加存在于群集管理器中,那么我们就来设置仲裁磁盘,右键单击群集名称,更多操作-配置群集仲裁设置
出现开始向导来配置仲裁磁盘,有点晕,没必要整个向导,下一步继续
这里会自动根据我们的群集节点数和磁盘数来自动选择的,基本上不需要修改,直接默认设置下一步即可
这里开始选择仲裁磁盘,应该选择iscsi磁盘中比较小的那一个,1GB的iscsi共享磁盘即可
单击下一步出现确认选项,下一步以开始配置仲裁磁盘设置
配置成功完成
3.配置群集共享磁盘
仲裁已经配置完成,下面我们就该配置为群集的服务提供磁盘的群集磁盘,我们还是在群集名称上单击右键-选择启用群集共享
同意协议并启用群集共享磁盘
启动后在群集管理菜单下多了一个群集共享卷这个管理单元,我们要为他添加磁盘,单击右键选择添加存储以添加群集共享存储
在这里选择我们剩下的唯一一个群集磁盘来作为群集共享卷的存储
添加完成后可以看到如图的群集共享卷的路径和状态,其中黄色标注的就是我们可以使用来存储虚拟机的虚拟的一个映射路径,如果我们的系统在c盘这里就是c开头的路径,如果是在g盘或者其他盘,这里的路径就不一样了,会变成d或者其他路径,需要用mklink命令来重新映射路径
4.设置hyper使用群集共享卷
然后我们在两台hyper服务器上设置虚拟硬盘和虚拟机的路径均为上图的c:\clusterstorage\volume1这个路径,这个路径实际上市对应到我们设置的群集磁盘Q盘的,这里我们不能填写路径为Q盘,而必须填写这个路径才能正常使用群集共享磁盘!
出处: ccfxny.blog.51cto.com/350339/190672
昨天完成了2008R2的虚拟化高可用群集,微软总算有了能和vmware ha相媲美的产品了,心里兴奋,虽说2008R2要8月14日才能从msdn上下载到,但是cc忍不住兴奋,还是从远景下载了泄露版,并使用180天试用版key激活使用,为了通俗易懂,特别使用远景泄露版之中文包,方便不懂英文的同学.2008R2的虚拟化高可用群集比2008的群集多了实时迁移和快速迁移!
首先我们需要准备实验环境或者是生产环境
分为1.软件环境和2.硬件环境
一.硬件环境:
1.存储是必须的,可以使用硬件存储或者软件存储(例如windows storage server 2008,openfiler等)至于使用wss创建存储和在客户机上连接存储我的博文之前已经有介绍,就不再另外为大家演示
2.高可用虚拟化的宿主机:至少两台支持虚拟化的主机,内存至少2GB.
3.网络环境为千兆为佳,
4.虚拟化宿主机的硬件最好完全一样!实在没办法也就将就了吧,本实验是一台支持虚拟化的本本和台式机来完成的,但是要注意如果宿主机的硬件不一样,例如如图的c1和c2,那么在创建虚拟机需要选择处理器兼容性这个选项!
二.软件环境
1.两台机器都安装windows server 2008 R2,系统最好都装在C盘,这样存储映射后的盘才都是C盘的格式
2.都加入网域
3.安装角色hyper-v
4.安装功能:故障转移群集
5.hyper中的虚拟网络都命名为hyper
6. 在storage server上创建两个iscsi磁盘,一个为虚拟机存放数据文件使用,一个为仲裁磁盘使用,虚拟机数据文件也就是快照和状态和配置以及磁盘文件,按需求分配,但是要注意的是,一般windows server 2008需要c盘30GB左右才能正常工作,2003为20GB左右,仲裁磁盘为1GB左右即可
7.在虚拟化宿主机c1和c2上将两块iscsi磁盘连接到c1和c2并将数据盘命名为Q盘,仲裁盘命名为R盘,注意两台机器上都要这样设置!
出处: ccfxny.blog.51cto.com/350339/190365
如果将web服务器集群当作一个城池,那么负载均衡服务器则相当于城门,重要性不言而喻,
Nginx双机高可用
。如果“城门”关了,与外界的通道也就断了,如果只要一台均衡服务器,当该服务器发生故障时,则会导致整个网站无法访问。因此我们需要来两台以上的服务器,实现故障转移与高可用。双机高可用一般是通过虚拟IP(飘移IP)方法来实现的,基于linux/unix的IP别名技术。双机高可用方法目前分为两种:(1):一台服务器加一台热被备务器,正常情况下,主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器处于空闲状态,当主服务器发生故障时,热备服务器接管主服务器的公网虚拟IP,提供负载均衡服务;
(2):两台负载均衡服务器都处于活动状态,各自绑定一个公网虚拟IP,提供负载均衡服务,当其中一台发生故障时,另一台接管发生故障服务器的公网虚拟IP。
第一种方式:
(1)www.yourdomin.com域名解析到虚拟IP 61.1.1.2
(2)正常情况下,主机61.1.1.4绑定虚拟IP 61.1.1.2
/sbin/ifconfig eth0:1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up/sbin/route add -host 61.1.1.2 dev eth0:1/sbin/arping -I eth0 -c 61.1.1.2 61.1.1.1
(3):用户访问:www.yourdomin.com(虚拟IP: 61.1.1.2)实际访问的是主机61.1.1.4,而备用机 61.1.1.5 则处于空闲状态。
(4):如果主机61.1.1.4发生故障,背机61.1.1.5将在几秒钟内接管虚拟IP61.1.1.2,与自己绑定,并发送APping的公网网关刷新MAC地址。
/sbin/ifconfig etho:1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up/sbin/ifconfig add -host 61.1.1.2 dev eth0:1/sbin/arping -I etho -c 3 -s 61.1.1.2 61.1.1.1
(5):这时,用户访问www.yourdomin.com(虚拟IP)实际上访问的是备机 61.1.1.1,从而实现故障转移与高可用,避免了单点故障。
另外,第一种方式可以利用基于VRRP路由协议的Keeoalive软件实现的。
第二种方式:
(1):www.yourdomin.com 域名通过DNS轮询解析到虚拟IP 61.1.1.2和61.1.1.3上。
(2)正常情况下,服务器个绑定一个虚拟IP。
在服务器161.1.1.4上执行以下命令
/sbin/ifconfig etho:1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/ifconfig add -host 61.1.1.2 dev eth0:1
/sbin/arping -I etho -c 3 -s 61.1.1.2 61.1.1.1
在服务器161.1.1.5上执行以下命令
/sbin/ifconfig etho:1 61.1.1.3 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/ifconfig add -host 61.1.1.2 dev eth0:1
/sbin/arping -I etho -c 3 -s 61.1.1.3 61.1.1.1
(3):用户访问www,yourdomin.com (虚拟IP 61.1.1.2和61.1.1.3)实际上是根据DNS轮询访问两台负载均衡服务器,两台服务器均处于活跃状态。
(4):如果服务器1发生故障,服务器2将在几秒钟内接管服务器1的虚拟IP 61.1.1.2,与自己已绑定,并发送ARPing包给IDC的公关网关刷新新的MAC地址。
在服务器2上执行以下命令:
/sbin/ifconfig etho:1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/ifconfig add -host 61.1.1.2 dev eth0:1
/sbin/arping -I etho -c 3 -s 61.1.1.2 61.1.1.1
我们可以写两个脚本,来实现第二种方式的自动故障转移。
以下是部署在Nginx负载均衡服务器1的脚本:
#!/bin/shLANG=Cdate=$(date -d “today” +“%Y-%m-%d %H:%M:%S”)function_bind_vip1{ /sbin/ifconfig etho:ha1 61.1.1.2 broadcast 219.232.254.255 netmask 255.255.255.192 up /sbin/route add -host 61.1.1.2 dev eth0:hal}function_bind_vip2(){ /sbin/ifconfig etho:ha2 61.1.1.3 broadcast 219.232.254.255 netmask 255.255.255.192 up /sbin/route add -host 61.1.1.2 dev eth0:ha2}function_restart_nginx(){ kill -USR1 'cat /usr/local/webserver/nginx/nginx.pid'}function_remove_vip1(){ /sbin/ifconfig etho:ha1 61.1.1.2 broadcast 219.232.254.255 netamsk 255.255.255.192 down}function_remove_vip2(){ /sbin/ifconfig etho:ha2 61.1.1.3 broadcast 219.232.254.255 netamsk 255.255.255.192 down}function_vip_arping1(){ /sbin/ifconfig -I eth0 -c 3 -e 611..1.1.2 61.1.1.1 >/dev/null 2>&1}function_vip_arping2(){ /sbin/ifconfig -I eth0 -c 3 -e 611..1.1.3 61.1.1.1 >/dev/null 2>&1}bind_time_vip1=“N”;bind_time_vip2=“N”;while truedo httpcode_arp1='/usr/bin/cur1 -o /dev/null s -w %{http_code} 61.1.1.4' httpcode_arp2='/usr/bin/cur1 -o /dev/null s -w %{http_code} 61.1.1.5' if [x$httpcode_rip1 == “x200”]; then function_bind_vip1 function_vip_arping1 function_restart_nginx bind_time_vip1=“Y” fi function_vip_arping1 else if [$bind_time_vip1 == “Y”]; thenfunction_remote_vip1bind_time_vip=“N” fi fi if [x$httpcode_arp2 == “x200”]; then if[ $bind_time_vip2 == “Y”] thenfunction_rempve_vip2bind_time_vip2=“N” fi else if[$bind_time_vip2 == “N”]; then function_bind_vip2 function_vip_arping2 function_restart_nginx bind_time_vip2=“Y” fi function_vip_arping2fisleep 5done
在Nginx服务器1将脚本驻留后台运行:
nohup /bin/sh ./nginx_hal.sh 2>&1 >dev/null &
以下代码部署在服务器2:
#!/bin/shLANG=Cdate=$(date -d “today” +“%Y-%m-%d %H:%M:%S”)function_bind_vip1(){ /sbin/ifconfig etho:ha1 61.1.1.3 broadcast 219.232.254.255 netmask 255.255.255.192 up /sbin/route add -host 61.1.1.3 dev eth0:hal}function_bind_vip2(){ /sbin/ifconfig etho:ha2 61.1.1.2 broadcast 219.232.254.255 netmask 255.255.255.192 up /sbin/route add -host 61.1.1.2 dev eth0:ha2}function_restart_nginx(){ kill -USR1 'cat /usr/local/webserver/nginx/nginx.pid'}function_remove_vip1(){ /sbin/ifconfig etho:ha1 61.1.1.3 broadcast 219.232.254.255 netamsk 255.255.255.192 down}function_remove_vip2(){ /sbin/ifconfig etho:ha2 61.1.1.2 broadcast 219.232.254.255 netamsk 255.255.255.192 down}function_vip_arping1(){ /sbin/ifconfig -I eth0 -c 3 -e 61.1.1.3 61.1.1.1 >/dev/null 2>&1}function_vip_arping2(){ /sbin/ifconfig -I eth0 -c 3 -e 61.1.1.2 61.1.1.1 >/dev/null 2>&1}bind_time_vip1=“N”;bind_time_vip2=“N”;while truedo httpcode_arp1='/usr/bin/cur1 -o /dev/null s -w %{http_code} 61.1.1.5' httpcode_arp2='/usr/bin/cur1 -o /dev/null s -w %{http_code} 61.1.1.4' if [x$httpcode_rip1 == “x200”]; then function_bind_vip1 function_vip_arping1 function_restart_nginx bind_time_vip1=“Y” fi function_vip_arping1 else if [$bind_time_vip1 == “Y”]; thenfunction_remote_vip1bind_time_vip=“N” fi fi if [x$httpcode_arp2 == “x200”]; then if[ $bind_time_vip2 == “Y”] thenfunction_rempve_vip2bind_time_vip2=“N” fi else if [$bind_time_vip2 == “N”]; then function_bind_vip2 function_vip_arping2 function_restart_nginx bind_time_vip2=“Y” fi function_vip_arping2fisleep 5done
在Nginx服务器2将脚本驻留后台运行:
nohup /bin/sh ./nginx_ha2.sh 2>&1 >dev/null &
本篇分为测试虚拟机的
1.实时迁移,
2.快速迁移,
3.移动虚拟机,
4.高可用四种功能
首先打开一个ping 192.168.0.245 –t窗口来持续不断的ping虚拟机
如图的管理工具上我们可以看到实时迁移以及快速迁移和移动虚拟机的几个选项卡
1. 测试虚拟机的实时迁移功能
实时迁移也就是将虚拟机不断线快速迁移到另一台虚拟机
我们呢可以直接在虚拟机上单击实时迁移到另一节点选项来进行迁移,因为本例只有2个节点,所以迁移到的目标那里也就只有一个节点可选,如图我们讲2k8实时迁移到C2
需要注意的是如果实验或者在生产环境中,节点的物理CPU不一样的话,需要设置虚拟机的处理器属性选项卡中的迁移到具有不同处理器版本的物理计算机,否则无法进行迁移和高可用
整个过程是联机作业的,我们从大约9:44开始作业
整个过程ping一直没断,也就是说虚拟机一直在提供服务
在9:45迁移完成,开始转换到新物理机上去运行虚拟机
经过1分左右的时间完成操作,中间只有1次闪断,如果我们的环境是千兆,也许就没这一次闪断!
看看虚拟机的状态,现在已经运行到C2这个节点上,运行正常!下面玩玩快速迁移,也就是将虚拟机快速移动到另一节点,中间会断线!
2. 快速迁移
快速迁移,也就是将虚拟机快速移动到另一节点
同样是图形化操作,将虚拟机迁移到节点C1吧
时间9:51
开始保存虚拟机状态以便迁移,中间断ping了
保存状态完成,开始向心机器恢复状态
向新节点还原状态
OK,花了2分钟时间完成完全迁移到新节点工作,这适用于虚拟机没有创建在群集共享卷才需要做这样的迁移
看看状态已经迁移回C1节点.
3. 虚拟机移动
我们测试在没有共享卷的环境中使用这个移动虚拟机功能
同样是将虚拟机挂起,然后保存状态,然后恢复到新节点C2去,开始于9:54
还在保存状态
1分钟后开始还原状态
再过1分钟移动完成,这功能跟快速迁移好像差不多
看看虚拟机状态又回到C2了
4. 测试虚拟机的高可用性HA
我们将节点C2关闭,因为当前虚拟机在节点C2上,
关机后群集侦测到C2宕机,立即将虚拟机挂起,然后跟vmware ha一样将虚拟机自动重新启动了
一直到启动完成,虚拟机这里显示联机了,但是虚拟机还在启动过程中
看这里正在重新启动虚拟机
启动完成,恢复服务,呵呵,整个过程基本上完了,如果配合scvmm2008做一个负载均衡,就跟vmware ha差不多啦,啥功能都有了,虚拟机实时迁移,高可用,负载均衡!
出处:ccfxny.blog.51cto.com/350339/192062
Coreosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等,它是一个新兴的软件,推出,但其实它并不是一个真正意义上的新软件,在的时候有一个项目Openais , 它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais. Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。Corosync是未来的发展方向,
在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件 luci+ricci.
介绍内容摘自 blog.csdn.net/deansrk/article/details/6780639
项目主页:www.open-open.com/lib/view/home/1338942164312
一、 环境描述
Linux server A (CentOS release 5.8 Final) 实IP:192.168.4.97 虚IP:192.168.4.96
Linux server B (CentOS release 5.8 Final) 实IP:192.168.4.99 虚IP:192.168.4.98
域名环境(DNS轮询解析到虚IP):
server.osapub.com 192.168.4.96
server.osapub.com 192.168.4.98
二、 简单架构示意图
描述:前端两台NGINX做DNS轮询,通过虚IP漂移+HA监控脚本相结合,实现前端两台NGINX高可用,利用NGINX反向代理功能对后端varnish实现高可用集群,
三、软件环境搭建
3.1 编译安装nginx
?#!/bin/bash####nginx 环境安装脚本,注意环境不同可能导致脚本运行出错,如果环境不同建议手工一条一条执行指令。#创建工作目录mkdir -p /dist/{dist,src}cd /dist/dist#下载安装包wget bbs.osapub.com/down/google-perftools-1.8.3.tar.gz &> /dev/nullwget bbs.osapub.com/down/libunwind-0.99.tar.gz &> /dev/nullwget bbs.osapub.com/down/pcre-8.01.tar.gz &> /dev/nullwget bbs.osapub.com/down/nginx-1.0.5.tar.gz &> /dev/null#------------------------------------------------------------------------# 使用Google的开源TCMalloc库,忧化性能cd /dist/srctar zxf ../dist/libunwind-0.99.tar.gzcd libunwind-0.99/## 注意这里不能加其它 CFLAGS加速编译参数CFLAGS=-fPIC ./configuremake cleanmake CFLAGS=-fPICmake CFLAGS=-fPIC installif [ “$?” == “0” ]; then echo “libunwind-0.99安装成功.” >> ./install_log.txtelse echo “libunwind-0.99安装失败.” >> ./install_log.txt exit 1fi##----------------------------------------------------------## 使用Google的开源TCMalloc库,提高MySQL在高并发情况下的性能cd /dist/srctar zxf ../dist/google-perftools-1.8.3.tar.gzcd google-perftools-1.8.3/CHOST=“x86_64-pc-linux-gnu” CFLAGS=“-march=nocona -O2 -pipe” CXXFLAGS=“-march=nocona -O2 -pipe” \./configuremake cleanmake && make installif [ “$?” == “0” ]; then echo “google-perftools-1.8.3安装成功.” >> ./install_log.txtelse echo “google-perftools-1.8.3安装失败.” >> ./install_log.txt exit 1fiecho “/usr/local/lib” > /etc/ld.so.conf.d/usr_local_lib.conf/sbin/ldconfig################ 安装nginx ###########################安装Nginx所需的pcre库cd /dist/srctar zxvf ../dist/pcre-8.01.tar.gzcd pcre-8.01/CHOST=“x86_64-pc-linux-gnu” CFLAGS=“-march=nocona -O2 -pipe” CXXFLAGS=“-march=nocona -O2 -pipe” \./configuremake && make installif [ “$?” == “0” ]; then echo “pcre-8.01安装成功.” >> ./install_log.txtelse echo “pcre-8.01安装失败.” >> ./install_log.txt exit 1ficd ../## 安装Nginx## 为优化性能,可以安装 google 的 tcmalloc ,之前己经安装过了## 所以我们编译 Nginx 时,加上参数 --with-google_perftools_module## 然后在启动nginx前需要设置环境变量 export LD_PRELOAD=/usr/local/lib/libtcmalloc.so## 加上 -O2 参数也能优化一些性能#### 默认的Nginx编译选项里居然是用 debug模式的(-g参数),在 auto/cc/gcc 文件最底下,去掉那个 -g 参数## 就是将 CFLAGS=“$CFLAGS -g” 修改为 CFLAGS=“$CFLAGS” 或者直接删除这一行cd /dist/srcrm -rf nginx-1.0.5tar zxf ../dist/nginx-1.0.5.tar.gzcd nginx-1.0.5/sed -i 's#CFLAGS=“$CFLAGS -g”#CFLAGS=“$CFLAGS ”#' auto/cc/gccmake cleanCHOST=“x86_64-pc-linux-gnu” CFLAGS=“-march=nocona -O2 -pipe” CXXFLAGS=“-march=nocona -O2 -pipe” \./configure --user=www --group=www \--prefix=/usr/local/nginx \--with-http_stub_status_module \--with-google_perftools_modulemake && make installif [ “$?” == “0” ]; then echo “nginx-1.0.5安装成功.” >> ./install_log.txtelse echo “nginx-1.0.5安装失败.” >> ./install_log.txt exit 1ficd ../#创建Nginx日志目录mkdir -p /data/logschmod +w /data/logschown -R www:www /data/logscd /usr/local/nginx/mv conf conf_bakln -s /data/conf/nginx/ confecho 'export LD_PRELOAD=/usr/local/lib/libtcmalloc.so' > /root/nginx_startecho 'ulimit -SHn 51200' >> /root/nginx_startecho '/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf' >> /root/nginx_startecho '/usr/local/nginx/sbin/nginx -t' > /root/nginx_reloadecho 'kill -HUP `cat /usr/local/nginx/logs/nginx.pid`' >> /root/nginx_reloadchmod 700 /root/nginx_*
3.2 编译安装varnish
#!/bin/bash#进入工作目录cd /dist/dist#下载安装包wget bbs.osapub.com/down/varnish-3.0.0.tar.gz &> /dev/nullcd /dist/srcrm -fr varnish-3.0.0export PKG_CONFIG_PATH=/usr/local/lib/pkgconfigtar zxvf ../dist/varnish-3.0.0.tar.gzcd varnish-3.0.0#编译参数可以根据自己需要定制./configure -prefix=/usr/local/varnish -enable-debugging-symbols -enable-developer-warnings -enable-dependency-trackingmake && make installif [ “$?” == “0” ]; then echo “varnish-3.0.0安装成功.” >> ./install_log.txtelse echo “varnish-3.0.0安装失败.” >> ./install_log.txt exit 1fi#设置启动、重启脚本cat > /root/varnish_restart.sh < 三、 配置varnish一些参数说明: Backend servers Varnish有后端(或称为源)服务器的概念。后端服务器是指Varnish提供加速服务的那台,通常提供内容。 第一件要做的事情是告诉Varnish,哪里能找到要加速的内容。 vcl_recv vcl_recv是在请求开始时调用的。完成该子程序后,请求就被接收并解析了。用于确定是否需要服务请求,怎么服务,如果可用,使用哪个后端。 在vcl_recv中,你也可以修改请求。通常你可以修改cookie,或添加/移除请求头信息。 注意在vcl_recv中,只可以使用请求对象req。 vcl_fetch vcl_fetch是在文档从后端被成功接收后调用的。通常用于调整响应头信息,触发ESI处理,万一请求失败就换个后端服务器。 在vcl_fecth中,你还可以使用请求对象req。还有个后端响应对象beresp。Beresp包含了后端的HTTP头信息。 varnish 3.X 配置参考文档:anykoro.sinaapp.com/?p=261 编辑:/usr/local/varnish/vcl.conf ,文件不存在则创建。注意:Server A 与server B 配置一致! 配置详情如下: ?###########后台代理服务器########backend server_osapub_com{ .host = “192.168.4.97”; .port = “82”;}acl purge { “localhost”; “127.0.0.1”;}#############################################sub vcl_recv { #################BAN##########################begin if (req.request == “BAN”) { # Same ACL check as above: if (!client.ip ~ purge) { error 405 “Not allowed.”; } ban(“req.http.host == ” + req.http.host + “&& req.url == ” + req.url); error 200 “Ban added”; } #################BAN##########################end ###############配置域名################################## if(req.http.host ~ “^server.osapub.com” ||req.http.host ~ “.osapub.com” ) { #使用哪一组后台服务器 set req.backend = server_osapub_com; } ################################################## if (req.restarts == 0) { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For + “, ” + client.ip; } else { set req.http.X-Forwarded-For = client.ip; } } if (req.http.Accept-Encoding) { if (req.url ~ “\.(jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$”) { remove req.http.Accept-Encoding; } elsif (req.http.Accept-Encoding ~ “gzip”) { set req.http.Accept-Encoding = “gzip”;} elsif (req.http.Accept-Encoding ~ “deflate”) { set req.http.Accept-Encoding = “deflate”;} else { remove req.http.Accept-Encoding; } } if (req.http.Cache-Control ~ “no-cache”) { return (pass); } if (req.request != “GET” && req.request != “HEAD” && req.request != “PUT” && req.request != “POST” && req.request != “TRACE” && req.request != “OPTIONS” && req.request != “DELETE”) { return (pipe); } if (req.request != “GET” && req.request != “HEAD”) { return(pass); } if (req.http.Authorization || req.http.Cookie ||req.http.Authenticate) { return (pass); } if (req.request == “GET” && req.url ~ “(?i)\.php($|\?)”){ return (pass); } if (req.url ~ “\.(css|jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$”) { unset req.http.Cookie; } return (lookup);}sub vcl_fetch { set beresp.grace = 5m; if (beresp.status == 404 || beresp.status == 503 || beresp.status == 500 || beresp.status == 502) { set beresp.http.X-Cacheable = “NO: beresp.status”; set beresp.http.X-Cacheable-status = beresp.status; return (hit_for_pass); } #决定哪些头不缓存 if (req.url ~ “\.(php|shtml|asp|aspx|jsp|js|ashx)$”) { return (hit_for_pass); } if (req.url ~ “\.(jpg|jpeg|png|gif|gz|tgz|bz2|tbz|mp3|ogg|swf)$”) { unset beresp.http.set-cookie; } if (beresp.ttl <= 0s) { set beresp.http.X-Cacheable = “NO: !beresp.cacheable”; return (hit_for_pass); } else { unset beresp.http.expires; } return (deliver);}sub vcl_deliver {if (resp.http.magicmarker) { unset resp.http.magicmarker; set resp.http.age = “0”; }# add cache hit dataif (obj.hits > 0) { set resp.http.X-Cache = “HIT”; set resp.http.X-Cache-Hits = obj.hits;}else { set resp.http.X-Cache = “MISS”;}# hidden some sensitive http header returning to client, when the cache server received from backend server responseremove resp.http.X-Varnish;remove resp.http.Via;remove resp.http.Age;remove resp.http.X-Powered-By;remove resp.http.X-Drupal-Cache;return (deliver);}sub vcl_error { if (obj.status == 503 && req.restarts < 5) { set obj.http.X-Restarts = req.restarts; return (restart); }}sub vcl_hit {if (req.http.Cache-Control ~ “no-cache”) { if (! (req.http.Via || req.http.User-Agent ~ “bot|MSIE”)) { set obj.ttl = 0s; return (restart); }} return(deliver);} 配置完成后执行:/root/varnish_start.sh 如果启动成功则表示配置无误! 四、 配置nginx编辑: /usr/local/nginx/conf/nginx.conf ,nginx 的配置方法请参考网上文档资料。 Server A(192.168.4.97) nginx配置如下: ?user www www;worker_processes 16;error_log /logs/nginx/nginx_error.log crit;#Specifies the value for maximum file descriptors that can be opened by this process.worker_rlimit_nofile 65500;events{ use epoll; worker_connections 65500;}http{ include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128; client_header_buffer_size 64k; large_client_header_buffers 4 64k; client_max_body_size 10m; server_tokens off; expires 1h; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 200; fastcgi_send_timeout 300; fastcgi_read_timeout 600; fastcgi_buffer_size 128k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; fastcgi_temp_path /dev/shm; gzip on; gzip_min_length 2048; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_types text/plain text/css application/xml application/x-javascript ; log_format access '$remote_addr - $remote_user [$time_local] “$request” ' '$status $body_bytes_sent “$http_referer” ' '“$http_user_agent” $http_x_forwarded_for';################# include ################### upstream varnish_server { server 127.0.0.1:81 weight=2 max_fails=3 fail_timeout=30s; server 192.168.4.99:81 weight=2 max_fails=3 fail_timeout=30s; ip_hash; } server { listen 80; server_name 192.168.4.96 192.168.4.98; index index.html index.htm index.php index.aspx; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 200; proxy_send_timeout 300; proxy_read_timeout 500; proxy_buffer_size 256k; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_temp_path /dev/shm; proxy_pass varnish_server; expires off; access_log /logs/nginx/192.168.4.96.log access; } } server { listen 82; server_name 192.168.4.97; index index.html index.htm index.php; root /data/web/awstats/www; location ~ .*\.php$ { include fcgi.conf; fastcgi_pass 127.0.0.1:10080; fastcgi_index index.php; expires off; } access_log /logs/nginx/awstats.osapub.com.log access; } } server B (192.168.4.99)配置如下: ?user www www;worker_processes 16;error_log /logs/nginx/nginx_error.log crit;#Specifies the value for maximum file descriptors that can be opened by this process.worker_rlimit_nofile 65500;events{ use epoll; worker_connections 65500;}http{ include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 128; client_header_buffer_size 64k; large_client_header_buffers 4 64k; client_max_body_size 10m; server_tokens off; expires 1h; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 200; fastcgi_send_timeout 300; fastcgi_read_timeout 600; fastcgi_buffer_size 128k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; fastcgi_temp_path /dev/shm; gzip on; gzip_min_length 2048; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_types text/plain text/css application/xml application/x-javascript ; log_format access '$remote_addr - $remote_user [$time_local] “$request” ' '$status $body_bytes_sent “$http_referer” ' '“$http_user_agent” $http_x_forwarded_for';################# include ################### upstream varnish_server { server 127.0.0.1:81 weight=2 max_fails=3 fail_timeout=30s; server 192.168.4.97:81 weight=2 max_fails=3 fail_timeout=30s; ip_hash; } server { listen 80; server_name 192.168.4.96 192.168.4.98; index index.html index.htm index.php index.aspx; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 200; proxy_send_timeout 300; proxy_read_timeout 500; proxy_buffer_size 256k; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_temp_path /dev/shm; proxy_pass varnish_server; expires off; access_log /logs/nginx/192.168.4.98.log access; } } server { listen 82; server_name 192.168.4.99; index index.html index.htm index.php; root /data/web/awstats/www; location ~ .*\.php$ { include fcgi.conf; fastcgi_pass 127.0.0.1:10080; fastcgi_index index.php; expires off; } access_log /logs/nginx/awstats.osapub.com.log access; } } 启动nginx: /root/nginx_start 启动正常会监听80,82端口! 五、 运行nginx ha脚本 server A 的脚本下载地址:bbs.osapub.com/down/server_a_ha.tar.gz 解压力后得到三个脚本: nginx_watchdog.sh nginxha.sh nginx_ha1.sh server B 的脚本下载地址:bbs.osapub.com/down/server_b_ha.tar.gz 解压力后得到三个脚本: nginx_watchdog.sh nginxha.sh nginx_ha2.sh 注意:脚本建议放到:/data/sh/ha 目录下,否则需要修改nginxha.sh 里面的程序路径! 六、 测试1,测试之前先把nginx 负载去掉,可以在前面加#号暂时注释,只保留本机解析,确保测试结果准确, 2,修改本机host文件 添加:192.168.4.99 server.osapub.com 到末尾,保存后访问。 3,正常结果显示如下: 到这里整个架构基本能运行起来了,根据大家的实际需求,对配置文件进行调优,HA脚本也可以进一步调优,关于报警,请参考社区自动安装mutt报警的脚本! 来自:my.oschina.net/imot/blog/289208 如今的企业收集并储存了海量数据,学会充分利用这些数据不但可让企业稳固持续地发展,也能协助他们取得竞争优势,而基于准确信息的BI与分析是实现这一目标的重点。 新技术的发展 BI一直在不断演化发展。时至今日,企业已拥有了专业的工具和知识来根据实情做出决策。自然,决策需要有准确与一致的数据支持,这也正是BI战略的基本要素之一。 随着BI需求的增长,在IT行业中衍生了一系列的重要技术,不断将一切不可能变成可能。从初期的单一报表,到多维度分析,再到虚拟化与多层部署,不过直到现在,许多企业仍无法很好地把握BI所带来的优势。 实际上,任何企业在经营中都会涉及到部分的BI,它可以是简单的经营报表,也可以是复杂的电子表格应用。其中,最令人头疼的问题就是数据质量。信息的一致与准确是BI战略的关键,但当企业过于依赖某范围内的数据源时,他们就会面临数据不一致的风险。 数据不一致 在日常生活中,数据不一致的例子随处可见,比如收到写错姓名或地址的信函,这些错误会对通信产生负面的影响。 在企业中,这一问题更会被放大,因此它所带来的影响也被成倍放大。在一个商业环境下,数据不一致最终将导致决策失误。比如在CRM系统中或许会因为输入错误而导致同一地址下出现多家名字相似的供应商,造成不必要的麻烦。确保数据在两种或多种应用间转移的过程中的一致性与准确性,是企业必须要面对的严峻问题。 如今全球化市场所带来的竞争越来越激烈,企业对效率的要求也越来越高。竞争优势的重要意义提升到了一个新的高度。企业必须充分了解自己及对手的优势与弱势,这样才能成为未来的赢家。 成熟的市场 BI不只是一套软件与工具,同时也是建立在灵活性、响应速度和远见基础上的一套商业运作的方法, 随着越来越多的企业采用BI并从中获益,BI市场也在逐步壮大。所谓水涨船高,企业对自己所使用的软件工具力求精益求精。更多新客户的开发,更多新产品的面世,都将这种变革推向一个新的高度。 如今,企业绩效管理(CPM)大行其道。CPM这一名词最早是由分析机构Gartner于所提出。Gartner将其定义为“测量并管理公司绩效的所有流程、方法、度量与系统。”并由此衍生了许多新名词,比如商业绩效管理、运营绩效管理等。 实际上,CPM是传统BI的一种延伸与发展。所有的企业都在以某种形式的CPM运作着,它包括预算、计划、预测、盈利模式和优化、记分卡与分析、财务报告与财务整合在内的一系列职能。 每家企业都设定了自己的目标与测量方法,而CPM能对它们进行有效监控,并制定相应的计划来改善整体绩效。其实,CPM是一种循环的流程: 测量企业绩效 监控企业绩效 管理企业改善 BI能让企业访问大量的信息,分析了解日常经营状况。财务计划能让企业使用从BI中获取的深度信息来有效计划并制定预算。而CPM则能让企业通过单个、集成的平台来掌控所有的商业效率工具。 效率与盈利改善 为了保持竞争力或改善绩效,企业必须充分了解自己、客户,以及竞争对手。随着数据量的几何级增长,企业必须找到掌控数据的方法,并将它们转化为可用的信息。要做到以信息为中心,而又不仅仅是一座数据中心。只有基于准确一致的信息,决策才是有价值的,才能帮助企业设立确切的目标。准确、一致、可用、深入,这些都是企业成功部署信息资产的关键。 运行Sendmail的服务器群集能够在有竞争力的价格上提供高性能和高可用性,对于经验丰富的系统管理员,这一贯是常用的做法。本文描述了我们的研究,量化和描述实现高可用/可伸缩Sendmail 的方法。 我们研究了Linux上Sendmail群集的几种配置,并对它们的相对性能进行了量化。我们通过调整 Sendmail 的配置以及 Linux 操作系统中的参数,研究并测试了公共性能。我们还没有一个共享磁盘用于这些测试,因此我们将项目的范围限定在只包括 SMTP 路由和排队。这是位于专用网的边缘或作为内部邮件存储的前端的Sendmail群集的常用配置。 虽然我们的硬件资源很普通,但我们相信这些相对差异会使我们的结果对于那些要实现基于Linux的 Sendmail服务器群集的系统架构设计师是非常重要的,因为我们的结果说明了Sendmail群集的设计特性的相对重要性。 汇总结果 Sendmail、LDAP 和 DNS 有许多配置选项,但我们只考虑那些对于该应用程序很重要的选项, 除非另有声明,否则我们使用标准软件和缺省设置。在这些选项中,我们发现有少数因素可以对性能产生巨大影响,或者是实现可伸缩性必不可少的,如 LogLevel 和 QueueDirectory。 最后,我们发现即使正确配置了 Sendmail,所有这些重要因素也会告诉我们两个事实: Sendmail 是磁盘密集型的,磁盘速度越快,Sendmail 的速度就越快。 不受控因素也许会影响我们所感知到的性能。如,远程 DNS 服务器发生故障,路由失常、队列填满和其它第三方问题。 我们发现了什么 集群的服务器:通过集群两个服务器并在前端添加负载均衡器,我们发现了最佳消息吞吐量 — 大约每秒 100 条消息。这是最佳单服务器结果的性能的两倍,单服务器的最佳性能大约是每秒 50 条消息。当添加第三个服务器时,几乎看不到性能有所改进。篇9:结合BI与CPM 精炼高可用数据
篇10:Linux下高可用/可伸缩Sendmail研究服务器教程