Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15171561
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: BSD

2008-03-23 20:27:29

前些天子没有什么事干,就向这个话题“炮开”了,我全过程是用Vmware+FreeBSD6.2做测试,把自已的电脑当成了实验室。
 
有些人说Vmware不支持这个“实验”但实验表明是可以的,网上有好多这类型的文章,但大多数是不全或不齐,让我走了不少的弯路。其实这个主题有两个内容的一个是主机冗余(就是热机备用),还有一个就是(向热备的主机发送工作指令)。
 

如 果有其中一台(非Master主机)机断了线“能用ifconfig命令查看”。“主机冗余”单元通过carp协议通知“负载均衡”单元,不要发送工作指 令去那。如果断线的是Master主机“负载均衡”单元就完蛋了,冗余主机会接替Master,接着重建“负载均衡”单元(我写的教程要约一分钟才能重建 “负载均衡”单元,因为是使用cron)。如果原来的Master主机在次连接上和现有的Master主机发生冲突,Carp协议就会在俩者间选择一台主 机为Master主机。如果是现有的Master主机胜出,原来的Master主机就要关闭“负载均衡”单元,不然就会做成数据风暴。(我查阅了一些莫博 士的资料后加上经过多次实验后得出的,这就是有些人说Vmware不支持这个“实验”原因。) 别:在这“结构”上我不建议大伙们集群机超过4台。
 
话不多说现在开始了,我在主机上装了apache2+php+postgresql(远程)
 

 
首先是安装,看其它的文档。
 
第二步应该是make kernel,热机备用和负载均衡分别需要修改内核
 
热机备用自已看官方手册
 
 
负载均衡如下:
安装cvsup,ipvs只支持i386 如果你是用amd64就装不上。

#cd /usr/ports/net/ipvs/
 
#make
一定会出错,这是正常的。不出错才不正常。因为没有改内核。

#cp /usr/ports/distfiles/ipvs-0.4.0_2.tar.gz /tmp/
去到tmp目录

#tar -vzxf ipvs-0.4.0_2.tar.gz
 
#cp /tmp/ipvs-0.4.0_2/patch/OS-RELEASE/"加入你的版本" /usr/src
向内核加入源码。

#cd /usr/src
#patch -p0 < uipc_socket.c.patch
#patch -p0 < ip_input.c.patch
#patch -p0 < socketvar.h.patch
#patch -p0 < sys_conf_options.patch
“因为6.2的uipc_socket.c与6.0的uipc_socket.c文件不一样,所以补丁没全部打上,我们要手动修改uipc_socket.c.patch“

#ee sys/kern/uipc_socket.c
找到#include "opt_compat.h"这一行,在下面加上#include "opt_nfsockopt.h"

“另外,6.0的目录下没有sys_i386_conf_GENERIC.patch文件,所以要在内核文件加上选行

options NF_SOCKOPT
#nf_sockopt
API这一项.或者直接使用5.3-RELEASE下的sys_i386_conf_GENERIC.patch文件.不过我用另一个文件名,所以我手动修改这个内核文件.
下面就可以重新编译内核了.”
 
现在就去编译内核。话我不多

cd /usr/src/sys/i386/conf, config MYKERNEL, cd ../compile/MYKERNEL,  make depend, make, make install,reboot
完了编译就去装回port - ipvs
我还要装我的apache2+php
 

装好ipvs后加入接连

ln -s /usr/local/sbin/ipvsadm /usr/bin/ipvsadm
新建个rc.local(各主机)

#ee /etc/rc.local
加入(如果按官方手册说的就不要加入这几句话仔细查看手册)
ifconfig carp0 create
ifconfig carp0 vhid 1 advskew 100 pass ghos 192.168.78.170/28 up
ifconfig carp0 up
ifconfig lo0 alias 192.168.78.170 netmask 0xffffffff -arp up #指令设置VIP,

#ee /etc/carpipvs
(注意是否有权力执行)
加入shell语句(意思是如果是Master主机就打开ipvsadm,不然就开闭“不信会发生数据风暴的就打开试试,用 -if 1命令查看”。ipvsadm我是加权最小连接数法,喜欢的可以使用其它的。)

#!/bin/sh
if ( ifconfig -a |grep "carp: MASTER" 1>/dev/null) then
        if ( ! ipvsadm | grep "IP Virtual Server version" 1>/dev/null) then
        kldload /boot/modules/ipvs.ko
        kldload /boot/modules/ip_vs_wlc.ko
        /usr/local/sbin/ipvsadm -A -t 192.168.78.170:80 -s wlc
        /usr/local/sbin/ipvsadm -a -t 192.168.78.170:80 -r 192.168.78.173:80 -g
        /usr/local/sbin/ipvsadm -a -t 192.168.78.170:80 -r 192.168.78.172:80 -g
        /usr/local/sbin/ipvsadm -a -t 192.168.78.170:80 -r 192.168.78.171:80 -g
        fi
fi
if ( ifconfig -a |grep "carp: BACKUP" 1>/dev/null) then
        if ( ipvsadm | grep "IP Virtual Server version" 1>/dev/null) then
        ipvsadm -C
        kldunload ip_vs_wlc
        kldunload ipvs
        fi
fi

ee /etc/crontab
加入(每一分钟运行一次,检测是不是为Master)
 
*/1     *       *       *       *       root    /etc/carpipvs
 
 
http页面就会不停的转变。
 

好了现在就试试主机集群,拨去其中的一台主机,另一个主机就补上。如果需要增加一台主机,只要向Master主机“负载均衡”单元加入一句命令插上网线和电源(其实是向各台主机),就并了。
因为少弟不才只能写了个shell程序。希望有那位大侠能写个C的,不用一分钟左右就重建成了“负载均衡”单元
阅读(826) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~