• 2008-06-30

    蜗牛赛跑 - [技术文档]


  • 1. Apache 的安装和配置

      安装 Apache:

      # emerge -av apache

      起动 Apache:

      # /etc/init.d/apache2 start

      让系统起动时自动起动 Apache:

      # rc-update add apache2 default

      配置 Apache:

      # vi /etc/apache2/conf/commonapache2.conf

      2. MYSQL 的安装和配置

      安装 MYSQL:

      # emerge -av mysql

      配置 MYSQL:

      # ebuild /var/db/pkg/dev-db/mysql-4.0.25-r2/mysql-4.0.25-r2.ebuild config

      (注:这将自动创建MYSQL数据库,并设置root用户的口令)

      起动 MYSQL:

      # /etc/init.d/mysql start

      让系统起动时自动起动 MYSQL:

      # rc-update add mysql default

      试用 MYSQL:

      $ mysql -u root --password

      mysql> SHOW DATABASES;

      3. PHP 的安装和配置

      安装 PHP:

      # emerge -av mod_php
    emerge dev-lang/php

      (注:这将自动同时安装 dev-php/php)

      让 PHP 自动加载 MYSQL 扩展:

      # vi /etc/php/apache2-php4/php.ini
      在该文件中加入以下设置:

      extension=mysql.so

      让 Apache 加载 PHP4 模块:

      # vi /etc/conf.d/apache2

      编辑该文件的 APACHE2_OPTS 的设置为:

      APACHE2_OPTS=\"-D SSL -D PHP4\"
      APACHE2_OPTS="-D DEFAULT_VHOST -D PHP5"

      经过这些步骤,一个基本的 LAMP 系统就安装和配置完成了,并可以正常使用了
  • 转自: http://hi.baidu.com/bluenuts

    对于新手,gentoo的安装往往令人却步。如果是第一次安装gentoo的话,应该选择从stage3或installcd安装,下面是我的硬盘安装安装过程。

    一、选择正确的安装介质
    (1)、三个stage
    从stage1开始安装,你能够完全自定义和控制编译过程的优化设置来初始你的系统。这使得高级用户可以知道自己在做什么。这也是一个让你更多了解Gentoo Linux核心的方法。
    从stage2开始安装,你可以跳过bootstrap,这样你可以应用到我们特别为stage2做的各种优化设置。
    从stage3 开始安装,你将可以快速地安装 Gentoo Llinux,这意味着你的系统将是我们为你所编译的(主要指比较完善的设置,较高的效率和稳定性)。Gentoo Linux的重要发布版本都有特别为stage3做的最佳优化,所以从stage3开始安装你将可以获得一个快速优化过的系统。
    我是新手,所以选择用stage3(stage3-i686-2006.0.tar.bz2)。
    (2)、Gentoo的小型LiveCD
    这是一个小而实用的启动CD,只用来启动系统、准备网络和让Gentoo的安装可以继续。它不包含任何stage(或者有时候只包含一个stage1文件)、源代码或者预编译软件包。比如,对于x86架构的LiveCD名为install-x86 -minimal-2006.0.iso。
    (3)、portage快照
    下载最新的portgae-20060403.tar.bz2。
    这三个文件可以从http://mirror.vmmatrix.net/或http://distro.ibiblio.org/pub/linux/distributions/获得。

    二、准备工作
    (1)、下载grub for dos到win的C盘。
    (2)、用虚拟光驱工具打开install-x86-minimal-2006.0.iso,复制所有文件到win的C盘根目录。
    (3)、复制stage3、portage文件到C盘。

    三、启动一个LiveCD
    由于我没有安装其他的linux系统,硬盘启动用gentoo的livecd分区出错(可能是只有一个硬盘的原因),因此选择lfs-livecd来分区和创建文件系统。
    启动lfs-livecd....
    1、分区
    默认的分区策略
    /dev/hda7   ext2    128M                    启动分区
    /dev/hda8   (swap) 512M                    交换分区
    /dev/hda9    reiserfs    Rest of the disk    根分区
    注:/dev/hda1为win的C盘,fat32格式;/dev/hda5、/dev/hda6为D、E盘。
    2、使用分区工具fdisk
    (1)、启用fdisk
    # fdisk /dev/hda
    Command (m for help):     代码:m     帮助
                                   p     列出当前磁碟分区情况
                                  n     新建分区
                                   d     删除分区
                                   t      选择分区类型
                                   w     写入储存
                                   q     退出
    (2)、创建分区
    我们首先来创建一个小的启动分区接着是swap、根分区。输入n来创建一个新的分区,然后输入l选择一个拓展分区。当提示第一个扇区时,点击enter。当提示最后的扇区时,输入+128M来创建一个大小为128Mbyte的分区。swap、根分区类推。创建交换分区时输入t来设定分区类型,8来选择你刚才创建的分区,然后输入82将分区类型设置为“Linux Swap”。
    (3)、保存分区表
    输入w保存分区表和退出fdisk
    3、 创建文件系统
    (1)、要对一个分区或者卷创建文件系统,对于每一个文件系统来说都有一些工具:
    文件系统            创建命令
    ext2                 mke2fs
    ext3                 mke2fs -j
    reiserfs              mkreiserfs
    xfs                  mkfs.xfs
    jfs                  mkfs.jfs
    (2)、给分区创建文件系统
    # mke2fs /dev/hda7
    # mkreiserfs    /dev/hda9
    (3)、激活交换分区
    # mkswap /dev/hda8      创建交换分区标识
    # swapon /dev/hda8      经创建并激活交换空间

    四、安装gentoo安装文件
    1、从硬盘启动gentoo的install livecd.....
    进入DOS,启动GRUB,在grub命令符下输入:
    grub > kernel (hd0,0)/isolinux/gentoo root=/dev/ram0 init=/linuxrc looptype=squashfs loop=/image.squashfs cdroot=/dev/hda1
    grub > initrd (hd0,0)/isolinux/gentoo.igz
    grub > boot
    2、ADSL用户的网络配置
    假设你需要使用PPPoE连接到因特网上,LiveCD(任何版本)里包含了方便设置的rp-pppoe。使用它提供的adsl-setup脚本可以配置网络连接。程序将会提示你输入连接到adsl调制解调器的以太网设备、用户名、密码、DNS服务器的IP地址和是否需要设置基本的防火墙,使用 rp-pppoe。
    # adsl-setup
    # adsl-star
    如果出现什么问题的话,查看/etc/ppp/pap- secrets或者/etc/ppp/chap-secrets来检查确认已经正确的输入用户名和密码,并要确认你使用的是正确的以太网设备。如果以太网设备不存在,你将必须加载准备的网络模块。那种情况下你应该从手动配置网络继续,那里我们解释了怎样加载正确的网络模块。
    3、挂载分区
    现在你的分区已经初始化并都使用了一个文件系统,该到挂在这些分区的时候了。使用mount命令来做这个。当然不要忘了给每个你创建的分区创建必要的挂载文件夹。作为一个例子,我们来挂载根分区和启动分区:
    # mount /dev/hda9 /mnt/gentoo
    # mkdir /mnt/gentoo/boot
    # mount /dev/hda7 /mnt/gentoo/boot
    我们也需要挂载proc文件系统(一个和内核的虚拟接口)到/proc。我们首先创建挂载点/mnt/gentoo/proc,然后挂载上这个文件系统:
    # mkdir /mnt/gentoo/proc
    # mount -t proc none /mnt/gentoo/proc
    注释: 如果你要你的/tmp为一个单独的分区,确认在挂载后修改它的权限:chmod 1777 /mnt/gentoo/tmp。对于/var/tmp也应该如此。
    可用df -h 命令查看分区使用情况,发现win的C盘(/dev/hda1)已挂载到/mnt/cdrom。
    4、设置时间
    (1)、正确的设置日期/时间
    在继续之前,你需要检查和更新一下你的系统日期/时间。一个配置错误的时钟可能在将来导致很奇怪的结果。
    A、运行date确认一下当前时间:
    # date
    Wed Apr 5 16:21:18 CEST 2006
    如果日期/时间显示错误,使用date MMDDhhmmYYYY语句(M是月份,D是日期,m是分钟,Y是年份)更新它。比如说,设定时间为2004年4月25日16时21分:
    B、设定日期/时间
    # date 042516212004
    5、安装stage3包
    (1)、进入文件夹/mnt/gentoo
    # cd /mnt/gentoo
    (2)、解开stage包
    # tar -xvjpf /mnt/cdrom/stage3-i686-2006.0.tar.bz2
    stage安装完成。
    6、安装portage快照
    # tar -xvfj /mnt/cdrom/portage-20060403.tar.bz2 -C /mnt/gentoo/usr
    注:如果win的C盘没有自动挂载,需先把分区挂载到/mnt/cdrom目录。

    五、安装gentoo基本系统
    1、复制DNS信息
    在我们进入新的环境之前还有一件事清要做,那就是复制/etc/resolv.conf里的DNS信息。你需要做这一步以确保进入新的环境后网络仍然可以工作。/etc/resolve.conf里包含了你的网络所需的域名解析服务器(参数"-L"是必须的,确保不是复制一个符号链接过去)。
    # cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
    2、进入新的环境
    现在,所有的分区已经初始化过了,基本的环境也已经安装了,该到使用chrooting进入我们新安装的环境里了。这意味着我们从当前的安装环境(LiveCD的安装介质)转移到你的安装系统(也就是初始后的分区)。
    这个chrooting过程三步可以完成。首先,我们使用chroot将根目录从/(在安装介质上的)转移到/mnt/gentoo(你的分区上)。然后我们将使用env-update来创建一个新的环境,主要是创建环境变量。最后我们使用source将这些变量载入内存中。
    # chroot /mnt/gentoo /bin/bash
    # env-update
    * Caching service dependencies...
    # source /etc/profile
    恭喜!你现在已经进入你自己的Gentoo Linux环境里了。
    3、更新Portage快照
    从因特网上下载一个最近的Portage树
    (1)、安装Portage
    # emerge sync
    (2)、通过一个普通的HTTP协议下载和安装一个portage快照。
    # emerge-webrsync
    4、让emerge使用最快的gentoo镜像
    # emerge -av mirrorselect
    # mirrorselect -s3

    六、配置内核

    1、时区
    你首先需要选择你的时区,这样你的系统知道起所在位置。在/usr/share/zoneinfo里查看你的时区,然后使用ln做一个符号链接到/etc/localtime:
    # ls /usr/share/zoneinfo
    (假设你要使用Asia/shanghai)
    # ln -sf /usr/share/zoneinfo/Asia/shanghai /etc/localtime
    # nano -w /etc/conf.d/clock
    将clock设置为local
    2、安装源码
    (1)、选择一个内核
    各个发行版的核心部分就是linux内核。这是处于用户程序和系统硬件之间的一层。 Gentoo给其用户提供了几个可能的内核源码。你可以在Gentoo内核指南中得到一个全面的有关列表和描述。对于我们已有的x86架构的系统,在其他内核当中,vanilla-sources(linux内核开发者用作开发的默认内核源码)、gentoo-sources(带很多增强性能补丁的内核源码)、gentoo-dev-sources(带增强性能补丁和改进的2.6版本的内核源码)、xfs-sources(带最新XFS支持的内核源码)、 gs-sources(用作服务器的内核源码)、gaming-sources(优化改进游戏性能的内核源码)、development-sources (2.6版本的vanlla内核源码),……
    如果你使用的是对网络依赖很小的安装,你不可以选择所有的上述版本,因为我们只提供其中的一部分。如果是这种情况,你被限制而只能使用gentoo-sources、vanilla-sources、development-sources或 gentoo-dev-sources。
    (2)、用emerge安装一个内核源码
    # emerge gentoo-dev-sources
    当你到/usr/src里看一下,你应该可以看到一个叫做linux/的符号链接指向你的内核源码:
    # ls -l /usr/src/linux
    lrwxrwxrwx    1 root     root           12 Oct 13 11:04 /usr/src/linux -> linux-2.4.25-gentoo
    如果不是这样(比如,符号链接指向一个不同的内核源码),在继续之前改变这个符号链接:
    # rm /usr/src/linux
    # cd /usr/src
    # ln -s linux-2.4.25-gentoo linux
    (3)、使用genkernel来配置和编译你的内核源码
    既然你的内核源码树已经安装,可以用我们的genkernel脚本来为你自动编译一个内核。genkernel配置内核就同我们的LiveCD 内核的配置几乎一样。这意味着你使用genkernel来编译你的内核,你的系统将会在启动时检测出你所有的硬件,这就同LiveCD一样。因为 genkernel不需要任何内核手动配置,这对于一些不大适应编译自己内核的用户来说,是一个绝好的处理办法。
    A、安装genkernel:
    # emerge genkernel
    B、运行genkernel all来编译你的内核。这里我们要注意到,因为genkernel编译一个支持几乎所有硬件的内核,编译的完成将会占用很长的时间。
    注意:如果你的boot分区没有使用ext2或者ext3作为文件系统,你需要用genkernel --menuconfig all来手动配置你的内核,并在内核中加上你的文件系统的支持(不要编译为模块)。
    # genkernel all
    C、 一旦genkernel完成,一个模块很全的内核和一个initial root disk(initrd)将会被创建。我们将在文档后面的配置启动程序时使用这个内核和initrd。在写启动程序的配置文件时,就直接写下这个内核和 initrd的名字。initrd将会在机器启动后和“真实”系统启动前运行,执行硬件的自动检测(就同LiveCD一样)。
    # ls /boot/kernel* /boot/initrd*
    D、我们再来执行一个步骤--安装hotplug,使得我们的系统更像LiveCD。当initrd自动检测到系统启动需要的硬件时,hotplug会自动检测到其他所有的东西。安装和启用hotplug,输入以下命令:
    # emerge coldplug
    # rc-update add coldplug boot
    # rc-update add hotplug default
    (4)、 安装不同的内核模块
    配置模块。你应该在/etc/modules.autoload.d/kernel-2.6中列出你要自动加载的模块。如果你需要,也可以给这些模块添加额外的选项。
    A、查看所有已有的模块,可以运行下面的find命令。不要忘了将"<kernel version>"换成你刚编译的内核的版本:
    # find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko'
    B、比如,为自动加载3c59x.o模块,编辑kernel-2.4或者kernel-2.6文件,并输入模块的名字。
    编辑/etc/modules.autoload.d/kernel-2.6
    (2.6内核的例子)
    # nano -w /etc/modules.autoload.d/kernel-2.6
    代码: /etc/modules.autoload.d/ kernel-2.6
    3c59x
    C、现在运行modules-update来提交对/etc/modules.conf文件的修改:
    # modules-update

    七、配置系统
    1、文件系统信息fstab
    在Linux下,系统所要用的分区都必须列表于文件/etc/fstab中。这个文件包含了这些分区的挂载点(在系统目录树结构中的位置),挂载方法(特殊的选项)和挂载的时间(是否自动挂载,是否可以用户挂载等)。 etc.).
    (1)、创建/etc/fstab
    # nano -w /etc/fstab
    (2)、/etc/fstab的一个完整例子
    /dev/hda1   /boot     ext2    noauto,noatime    1 2
    /dev/hda2   none      swap    sw                0 0
    /dev/hda3   /         ext3    noatime           0 1
    none        /proc     proc    defaults          0 0
    none        /dev/shm tmpfs   defaults          0 0
    /dev/cdroms/cdrom0    /mnt/cdrom    auto      noauto,user    0 0
    none        /proc/bus/usb   usbfs         defaults      0 0
    重新看一下你的/etc/fstab,保存并退出,继续我们的安装。
    2、网络信息
    (1)、主机名、域名等
    用户的一个选择就是给他(她)的机器命名。这看起来很简单,但是很多的用户却有困难为它们的Linux机器找到一个很好的名字。为加快这个进度,你应该知道不管什么名字到以后都可以重新修改的。一般来说,你可以称你的机器为tux,域名为homenetwork。
    A、设定主机名:
    # echo tux > /etc/hostname
    B、设定域名:
    # echo homenetwork > /etc/dnsdomainname
    C、如果你有一个NIS域(如果你不知道这是什么,那你就没有),你也需要定义一个:
    # echo nis.homenetwork > /etc/nisdomainname
    D、现在添加domainname脚本到默认运行级别:
    # rc-update add domainname default
    (2)、配置你的网络
    现在你将准备为你的Gentoo系统永久的配置好网络。
    所有的网络信息可以在/etc/conf.d/net里收集到。
    A、首先打开文件/etc/conf.d/net:
    # nano -w /etc/conf.d/net
    B、你找到的第一个变量是iface_eth0,它使用如下语法:
    iface_eth0="<your ip address> broadcast <your broadcast address> netmask <your netmask>"
    如果你使用DHCP(自动获取IP),你应该设定iface_eth0为dhcp。如果你使用rp-pppoe(如用作ADSL拨号),设定其为up。如果你需要手动设置网络,而又对上述名词不熟悉,在没有完成这些之前请先阅读理解网络名词。
    这样我们给出三个例子;第一个例子使用DHCP,第二个使用静态IP(192.168.0.2)和网络掩码为255.255.255.0,broadcast为192.168.0.255和网关为192.168.0.1,第三个只是激活给rp-pppoe使用的接口:
    对于DHCP)
    iface_eth0="dhcp"
    (对于静态IP)
    iface_eth0="192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0"
    gateway="eth0/192.168.0.1"
    我是adsl用户(对于rp-pppoe),所以是:
    iface_eth0="up"
    现在可以保存配置并退出,以继续下面的安装和配置。
    (3)、在启动时自动启用网络
    为在启动时激活网络接口,你必须添加这些到默认的运行级别。如果你有PCMCIA接口,你应该跳过这块儿,因为PCMCIA接口是由PCMCIA启动脚本启动。
    A、添加net.eth0到默认的运行级别
    # rc-update add net.eth0 default
    (4)、写下网络信息
    现在你需要告诉Linux有关你的网络。这个在/etc/hosts里定义并帮助将无法被你的域名解析服务器解析的主机名解析出IP地址。打比方说,如果你的内网由三台PC机组成:jenny(192.168.0.5)、benny(192.168.0.6)和tux(192.168.0.7,你的机器),你可以打开文件/etc/hosts并填入下列值:
    A、打开/etc/hosts
    # nano -w /etc/hosts
    B、填入网络信息
    127.0.0.1     localhost
    192.168.0.5   jenny.homenetwork jenny
    192.168.0.6   benny.homenetwork benny
    192.168.0.7   tux.homenetwork tux
    如果你的机器是单独的(或者域名解析服务器可以处理所有的域名解析),一行就足够了:
    单机或者全解析的机器的/etc/hosts
    127.0.0.1     localhost
    保存并退
    3、系统信息
    Gentoo使用/etc/rc.conf作为通用的系统范围的配置。打开/etc/rc.conf,然后好好看看这个文件里的注解:)
    # nano -w /etc/rc.conf
    我们完成配置/etc/rc.conf后,保存并退出编辑器,继续下面的过程。

    八、配置启动

    1、安装GRUB
    # emerge grub
    2、输入grub开始配置GRUB。你将会到一个grub>命令提示符下。现在,你需要输入正确的命令来安装GRUB启动记录到硬盘上。
    # grub
    (1)、把grub安装到硬盘的MBR
    grub> root (hd0,6)          (指出你的/boot分区的位置)
    grub> setup (hd0)           (安装GRUB到MBR)
    grub> quit                  (退出GRUB shell)
    注释: 如果你要安装GRUB到一个特定的分区,而不是MBR,你需要相对应的改变setup命令,使其指向正确的分区。比如说,如果你要安装GRUB到/dev/hda7,那么这个命令就变成setup (hd0,6),不过很少有用户需要这样做。
    (2)、虽然GRUB现在已经装上了,我们仍然需要给它写一份配置文件,这样GRUB会自动启动你最新建的内核。用nano(如果可以,也可用其他的编辑器)创建文件/boot/grub/grub.conf:
    # nano -w /boot/grub/grub.conf
    适用于genkernel用户的grub.conf
    default 0
    timeout 10
    splashimage=(hd0,6)/grub/splash.xpm.gz
    title=Gentoo Linux 2.6.16
    root (hd0,8)
    kernel /kernel-2.6.16-gentoo root=/dev/ram0 init=/linuxrc real_root=/dev/hda9
    initrd /initrd-2.6.16-gentoo
    # 用于双启动
    title=Windows 2003
    root (hd0,0)
    chainloader +1
    genkernel用户应该只到他们的内核使用同LiveCD一样的启动选项。比如说,如果你有SCSI设备,你应该添加doscsi内核选项。
    现在保存grub.conf文件并退出。到目前为止,GRUB已经全面的配置完毕。
    3、从windows启动
    (1)、把grub装到启动分区
    grub> root (hd0,6)
    grub> setup (hd0,6)
    grub> quit
    (2)、把boot分区的第一扇区写到文件bootsect.lnx
    # dd if=/dev/hda7 of=bootsect.lnx bs=512 count=1
    (3)、拷贝bootsect.lnx到windows启动分区根目录
    # mount -t vfat /dev/hda1 /mnt
    # cp bootsect.lnx /mnt/bootsect.lnx
    (4)、进入windows,编辑C盘根目录下的文件boot.ini添加一项
    C:\bootsect.lnx="Gentoo linux"

    九、安装必须的系统工具

    1、系统日志工具
    Gentoo提供了几个系统日志工具供你选择。这里有sysklogd(传统的系统日志伺服器)、syslog-ng(一个高级的系统日志工具)、metalog(一个可以高度配置的系统日志工具)。其他的也可能通过Portage得到,我们的软件包几乎每天都会有所增加,如果你不知道选哪个,就使用syslog-ng,因为这个很强大,并且自带非常好的默认设置。
    # emerge syslog-ng
    # rc-update add syslog-ng default
    2、 文件系统工具
    根据你使用的文件系统,你需要安装一个必须的文件系统工具(检测文件系统的完整性,创建额外的文件系统等)。
    文件系统     工具                  安装命令
    ReiserFS     reiserfsprogs         emerge reiserfsprogs
    3、网络工具
    如果你要使用rp-pppoe连接到因特网,你需要安装它。
    安装rp-pppoe
    # USE="-X" emerge rp-pppoe
    使用USE="-x"将会阻止因为依赖性(rp-pppoe有一个可视化工具;如果你需要这些,你可以稍后在XFree安装后重新编译rp-pppoe,而安装和编译XFree将会花掉很长的时间)而安装XFree。
    安装dhcpcd
    # emerge -av dhcpcd
    4、安装文件检索工具
    # emerge -av slocate

    十、完成Gentoo的安装
    1、用户管理
    (1)、设定超级用户的密码
    在你忘记之前,输入以下命令设定超级用户密码:
    # passwd
    如果你需要超级用户能够通过串行终端登录,添加tts/0到文件/etc/securetty:
    添加tts/0到/etc/securetty
    # echo "tts/0" >> /etc/securetty
    (2)、给日常使用添加一个普通用户
    在一个Unix/Linux系统上以超级用户身份工作是危险的和应该尽量避免的。因此,强烈推荐给日常使用添加一个用户。
    比如,创建一个属于wheel组(可以通过命令su切换到超级用户)、users组(所有用户的默认组)和audio组(可以使用音频设备)的名为john的用户:
    # useradd john -m -G users,wheel,audio -s /bin/bash
    # passwd john
    Password: (给john设定密码)
    Re-enter password: (重新输入密码以确认)
    如果一个用户需要以超级用户身份做某项工作,他们可以通过使用su -来暂时获得超级用户权限。另一个方法是使用sudo软件包,如果配置准确,也是很安全的一种方法。
    2、重启和享受你的新系统
    祝贺你!你的Gentoo系统已经可以使用。退出chroot的环境,并卸载所有已挂载的分区。然后输入一条你期盼已久的神奇的命令:reboot。
    # exit
    # cd /
    # umount /mnt/gentoo/boot /mnt/gentoo/proc /mnt/gentoo
    # reboot
    祝贺你,你的系统已经完全装备好了。
  • 2008-04-21

    Varnish - [技术文档]

    Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang  使用3台Varnish代替了原来的12台Squid,性能比以前更好。

    Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了CPU内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此Squid Cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。

    Varnish的理念是好的,但是Varnish还没有稳定到可以完全替代Squid的程度,现在就抛弃Squid选择Varnish是不明智的。
  • 转自:http://blog.sina.com.cn/s/blog_4e424e2101000c1o.html

    MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。

     

    为什么使用主从复制?

    1、主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。

    2、通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。但是不要同时在主从服务器上进行更新,这样可能引起冲突。

    3、使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。

     

    MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让主服务器发送二进制日志。主服务器创建一个线程将二进制日志中的内容发送到从服务器。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,从服务器使用此线程读取中继日志并执行日志中包含的更新。SHOW PROCESSLIST语句可以查询在主服务器上和从服务器上发生的关于复制的信息。

     

    默认中继日志使用host_name-relay-bin.nnnnnn形式的文件名,其中host_name是从服务器主机名,nnnnnn是序列号。用连续序列号来创建连续中继日志文件,从000001开始。从服务器跟踪中继日志索引文件来识别目前正使用的中继日志。默认中继日志索引文件名为host_name-relay-bin.index。在默认情况,这些文件在从服务器的数据目录中被创建。中继日志与二进制日志的格式相同,并且可以用mysqlbinlog读取。当SQL线程执行完中继日志中的所有事件后,中继日志将会被自动删除。

     

    从服务器在数据目录中另外创建两个状态文件--master.info和relay-log.info。状态文件保存在硬盘上,从服务器关闭时不会丢失。下次从服务器启动时,读取这些文件以确定它已经从主服务器读取了多少二进制日志,以及处理自己的中继日志的程度。

     

    设置主从复制:

     

    1、确保在主服务器和从服务器上安装的MySQL版本相同,并且最好是MySQL的最新稳定版本。

    2、在主服务器上为复制设置一个连接账户。该账户必须授予REPLICATION SLAVE权限。如果账户仅用于复制(推荐这样做),则不需要再授予任何其它权限。

    mysql> GRANT REPLICATION SLAVE ON *.*

        -> TO 'replication'@'%.yourdomain.com' IDENTIFIED BY 'slavepass';

    3、执行FLUSH TABLES WITH READ LOCK语句清空所有表和块写入语句:

    mysql> FLUSH TABLES WITH READ LOCK

    保持mysql客户端程序不要退出。开启另一个终端对主服务器数据目录做快照。

    shell> cd /usr/local/mysql/

    shell> tar -cvf /tmp/mysql-snapshot.tar ./data

    如果从服务器的用户账户与主服务器的不同,你可能不想复制mysql数据库。在这种情况下,应从归档中排除该数据库。你也不需要在归档中包括任何日志文件或者master.info或relay-log.info文件。

    当FLUSH TABLES WITH READ LOCK所置读锁定有效时(即mysql客户端程序不退出),读取主服务器上当前的二进制日志名和偏移量值:

    mysql > SHOW MASTER STATUS;

    +---------------+----------+--------------+------------------+

    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |

    +---------------+----------+--------------+------------------+

    | mysql-bin.003 | 73       | test         | manual,mysql     |

    +---------------+----------+--------------+------------------+

    File列显示日志名,而Position显示偏移量。在该例子中,二进制日志值为mysql-bin.003,偏移量为73。记录该值。以后设置从服务器时需要使用这些值。它们表示复制坐标,从服务器应从该点开始从主服务器上进行新的更新。

    如果主服务器运行时没有启用--logs-bin,SHOW MASTER STATUS显示的日志名和位置值为空。在这种情况下,当以后指定从服务器的日志文件和位置时需要使用的值为空字符串('')和4.

    取得快照并记录日志名和偏移量后,回到前一中端重新启用写活动:

    mysql> UNLOCK TABLES

    4、确保主服务器主机上my.cnf文件的[mysqld]部分包括一个log-bin选项。该部分还应有一个server-id=Master_id选项,其中master_id必须为1到232–1之间的一个正整数值。例如:

    [mysqld]

    log-bin

    server-id=1

    如果没有提供那些选项,应添加它们并重启服务器。

    5、停止从服务器上的mysqld服务并在其my.cnf文件中添加下面的行:

    [mysqld]

    server-id=2

    slave_id值同Master_id值一样,必须为1到232–1之间的一个正整数值。并且,从服务器的ID必须与主服务器的ID不相同。

    6、将数据备据目录中。确保对这些文件和目录的权限正确。服务器 MySQL运行的用户必须能够读写文件,如同在主服务器上一样。

    Shell> chown -R mysql:mysql /usr/local/mysql/data

    7、启动从服务器。在从服务器上执行下面的语句,用你的系统的实际值替换选项值:

     

            mysql> CHANGE MASTER TO

                -> MASTER_HOST='master_host_name',

                -> MASTER_USER='replication_user_name',

                -> MASTER_PASSWORD='replication_password',

                -> MASTER_LOG_FILE='recorded_log_file_name',

                -> MASTER_LOG_POS=recorded_log_position;

    8、启动从服务器线程:

            mysql> START SLAVE

    执行这些程序后,从服务器应连接主服务器,并补充自从快照以来发生的任何更新。

    9、如果出现复制错误,从服务器的错误日志(HOSTNAME.err)中也会出现错误消息。

    10、从服务器复制时,会在其数据目录中发现文件master.info和HOSTNAME- relay-log.info。从服务器使用这两个文件跟踪已经处理了多少主服务器的二进制日志。不要移除或编辑这些文件,除非你确切知你正在做什么并完全理解其意义。即使这样,最好是使用CHANGE MASTER TO语句。