集群LVS 实现数据共享

实验内容介绍:

本次实验是根据LVS的DR模式下实现负载均衡。在两台的Real Server 上安装web服务,并在服务器上搭建Discuz,而两台RS上的网页内容一样,通过rsync+sersync实现网页数据的同步。在共享存储上我们使用一台mysql服务器,来进行数据的存储。在试验过程中还需一台DNS服务器进行域名解析,来解析RS上的域名。

实验环境结构图:

一.实验步骤:

1.两台Real Server主机的配置:(两台配置相同)

安装编译环境:

        # yum groupinstall "Desktop Platform Development"
        # yum groupinstall "Development Tools"

安装Apache

(1)准备工作:

安装apr和apr-util

安装apr

    # tar xf apr-1.5.2.tar.bz2         
    # ./configure --prefix=/usr/local/apr
    # make && make install

出现问题:rm: cannot remove `libtoolT‘: No such file or directory

解决:

Vim configure

把 $RM “$cfgfile” 那行注释掉

安装apr-util

    # tar xf apr-util-1.5.4.tar.bz2
    #./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
    # make && make install

(2)安装Apache:

    # tar xf httpd-2.4.12.tar.bz2
    # ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=most --with-mpm=event

遇到的错误:

rror: pcre-config for libpcre not found

解决:yum install pcre-devel

error: mod_ssl has been requested

解决:yum install openssl-devel

error: MPM most does not support dynamic loading.

解决:--enable-mpms-shared=all

(3)后续配置:

1.将httpd服务的pid文件放置到/var/run/目录下

编辑httpd.conf配置文件,添加一项:PidFile “/var/run/httpd.pid”

2.将httpd服务新增为系统服务

将/usr/local/apache/bin/apachectl 这个文件复制到/etc/rc.d/init.d/目录下,改名为httpd并添加两行

# cp apachectl /etc/rc.d/init.d/httpd

          # chkconfig --add httpd
          # chkconfig --list | grep httpd
          # chkconfig --level 2345 httpd on

3.想让/usr/local/apache/bin/apachectl 这个命令能直接执行。添加PATH变量:

在/etc/profile.d/目录项创建以文件为httpd.sh.

内容为:export PATH=$PATH:/usr/local/apache/bin

4.到此Apache安装完成,后面有基于虚拟域名的设置

安装PHP:

(1)准备工作:

安装libmcrypt

        [[email protected] lamp]# tar xf php-5.6.8.tar.bz2 
        [[email protected] lamp]# tar xf libmcrypt-2.5.7.tar.gz 
        [[email protected] lamp]# cd libmcrypt-2.5.7
        # ./configure --prefix=/usr/local/libmcrypt
        # make && make install

(2)安装php:

        # tar xf php-5.6.8.tar.bz2
        # cd php-5.6.8
        # ./configure --prefix=/usr/local/php --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt=/usr/local/libmcrypt/ --with-config-file-path=/etc/ --with-config-file-scan-dir=/etc/php.d --with-bz2
        #make && make install

错误解决:

1.error: xml2-config not found

yum install libxml2-devel (本地yum源安装)

2.error: Please reinstall the BZip2 distribution

yum install bzip2-devel (本地yum源安装)

(3)后续配置:

1.为php提供配置文件

安装完成之后在php-5.6.8目录下会有php.ini-production文件

          # cp php.ini-production /etc/php.ini

2.将php-fpm添加到系统服务:

在php-5.6.8目录下有一个文件sapi,该文件中fpm目录下有init.d.php-fpm文件

           # cp init.d.php-fpm /etc/rc.d/init.d/php-fpm            
           # chmod +x /etc/rc.d/init.d/php-fpm
           # chkconfig --add php-fpm
           [[email protected] fpm]# chkconfig --list | grep php-fpm

php-fpm     0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭

3.给php-fpm提供配置文件

          # cp /usr/local/php/etc/php-fpm.conf.default  /usr/local/php/etc/php-fpm.conf

4.编辑配置文件:

编辑fpm配置文件,选择我们需要的值,并启用pid文件。

pm.max_children = 50

pm.start_servers = 5

pm.min_spare_servers = 2

pm.max_spare_servers = 8

pid = /usr/local/php/var/run/php-fpm.pid

5.启动服务验证:

# service php-fpm start

配置HTTP服务i,使其支持虚拟主机及fcgi 

1.在httpd配置文件中启用httpd相应的模块:

在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载:

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

2.配置httpd的配置文件,让apache能识别php格式的文件。

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

<IfModule dir_module>

DirectoryIndex index.html index.php

</IfModule>

3.配置虚拟主机支持使用fcgi

编辑httpd.conf配置文件,注释掉中心主机:

#DocumentRoot "/usr/local/apache/htdocs"

4.在httpd.conf配置文件中启用虚拟主机:

# Virtual hosts

    Include /etc/httpd/extra/httpd-vhosts.conf

5.在/etc/httpd/extra目录下编辑httpd-vhost.conf文件

        <VirtualHost *:80>
        DocumentRoot "/www/kcforum/"
        ServerName kcforum.com
        ServerAlias www.kcforum.com
        ErrorLog "logs/dummy-host.example.com-error_log"
        CustomLog "logs/dummy-host.example.com-access_log" common
        ProxyRequests Off
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/kcforum/$1
        <Directory "/www/kcforum/">
            Options none
            AllowOverride none
            Require all granted
        </Directory>
    </VirtualHost>

二.在10.33.200.203上安装mysql

安装mysql(源码二进制安装)

1.创建一个逻辑卷,用来存放MySQL数据,MySQL的数据目录为/mysql/data

并将数据目录的属组和属主修改为MySQL;

    # chown mysql.mysql /mysql/data/

2.创建MySQL组和MySQL用户:

    # groupadd -r -g 333 mysql    
    # useradd -r -g 333 -u 333 mysql

3.解压二进制源码和进行相应的配置:

  # tar xf mysql-5.6.24-linux-glibc2.5-i686.tar.gz
  # cp -r mysql-5.6.24-linux-glibc2.5-i686 /usr/local/

在/usr/local/目录下为mysql-5.6.24-linux-glibc2.5-i686创建软连接

  # ln -sv mysql-5.6.24-linux-glibc2.5-i686/ mysql

将/usr/local/mysql目录下的所有文件的属主和属组改为mysq

    [[email protected] local]# chown mysql.mysql mysql/*

1.初始化Mysql:

        # scripts/mysql_install_db  --user=mysql --datadir=/mydata/data/

会出现错误:

Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

解决:[[email protected] mysql]# yum install libaio

2.将Mysql添加系统服务:

      # cp support-files/mysql.server /etc/rc.d/init.d/mysqld
      # chkconfig --add mysqld

3.为mysql添加配置文件并做相应的修改

       #cp my.cnf /etc/my.cnf
       # vim /etc/my.cnf

4.添加mysql的PATH变量

在/etc/profile.d/目录下创建文件mysql.sh文件:

export PATH=$PATH:/usr/local/mysql/bin/

5.输出mysql的man手册至man命令的查找路径

编辑/etc/man.config,添加如下行即可:

MANPATH  /usr/local/mysql/man

6.输出mysql的头文件至系统头文件路径/usr/include

        # ln -sv /usr/local/mysql/include  /usr/include/mysql       
        # ln -sv /usr/local/mysql/include/  /usr/include/mysql
        `/usr/include/mysql‘ -> `/usr/local/mysql/include/

7.输出mysql的库文件给系统库查找路径

# echo ‘/usr/local/mysql/lib‘ > /etc/ld.so.conf.d/mysql.conf

而后让系统重新载入系统库:

# ldconfig

4.启动Mysql,添加mysql用户密码:

5.向MySQL服务器中的root用户授权,允许两个real Server能通过远程连接10.33.200.203上的mysql:(记住关闭防火墙:或者想一下此时防火墙规则怎么写)

mysql> grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘zkchang‘ with grant option;

 在realserver 10.33.200.201 上安装Discuz

三.进行网页数据同步服务的安装

在RS1上安装Rsync服务端:

1.关闭selinux

2.关闭防火墙或者开启防火墙tcp873端口

3.安装rsync服务端软件:

#yum install rsync xinetd

编辑配置文件,设置开机启动rsync

vim /etc/xinetd.d/rsync

Disable=no  修改为no

4.创建rsyncd.conf配置文件:vim /etc/rsyncd.conf

5.创建用户认证文件:

         # vim /etc/rsync.pass

内容:zkc:123456

6.设置文件权限:

        [[email protected] ~]# chmod 600 /etc/rsyncd.conf         
        [[email protected] ~]# chmod 600 /etc/rsync.pass

7.启动rsync:

Service xinetd start

在RS2上进行操作

1.安装rsync客户端

2.关闭selinux和防火墙和在realserver1 上的设置相同:

3.安装rsync客户端软件

只安装xinetd即可

Yum install xinetd

设置开机启动rsync

# vim /etc/xinetd.d/rsyn

4.创建认证密码文件

    # vim /etc/passwd.txt

内容为:123456

    # Chmod 600 /etc/passwd.txt

5.测试realserver1 到realserver2之间的数据同步:

RS1源服务器上的/www/kcforum/目录中比RS2目标客户端上的/www/kcforum、目录多了一forum目录,是discuz目录:测试

在realserver1 即源服务器:10.33.200.201上执行如下命令:

        # rsync -avH --port=873 --progress --delete /www/kcforum/ [email protected]::kcforum --password-file=/etc/passwd.txt

在RS1上安装Sersync工具,实时触发rsync进行同步

1.查看内核是否支持inotify:

Linux支持inotify最小内核为2.6.13

2.查看系统默认参数值并做相应修改:

    [[email protected] kcforum]# sysctl -a | grep "max_queued_events"    
    fs.inotify.max_queued_events = 16384
    [[email protected] kcforum]# sysctl -a | grep "max_user_instances"
    fs.inotify.max_user_instances = 128
    [[email protected] kcforum]# sysctl -a | grep "max_user_watches"
    fs.inotify.max_user_watches = 8192
    修改参数:
    [[email protected] kcforum]# sysctl -w fs.inotify.max_queued_events="99999999"
    fs.inotify.max_queued_events = 99999999
    [[email protected] kcforum]# sysctl -w fs.inotify.max_user_watches="99999999"
    fs.inotify.max_user_watches = 99999999
    [[email protected] kcforum]# sysctl -w fs.inotify.max_user_instances="65535"
        fs.inotify.max_user_instances = 65535

在/etc/sysctl.conf中添加如下内容:

参数说明:

max_queued_events:inotify队列最大长度,如果值太小,会出现                现"** Event Queue Overflow **"错误,导致监控文件不准确

max_user_watches:要同步的文件包含多少目录,可以用:find /home/www.osyunwei.com -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/www.osyunwei.com为同步文件目录)

max_user_instances:每个用户创建inotify实例最大值

3.安装sersync

4.配置sersync

5.Vim  confxml.xml 修改相应内容:

参数说明:

watch="/www/kcforum/"  源服务器同步目录:

Remote ip="10.33.200.202" name="kcforum"  分别是:目标服务器IP和目标服务器rsync同步目录模块名称

users="zkc" passwordfile="/etc/passwd.txt"  目标服务器rsync同步用户的用户名和密码在源服务器的存放路径。

start="true" schedule="600"  设置TRUE ,每隔600分周公执行一次全盘同步。

6.设置sersync监控开机自动执行:

        # vim /etc/rc.d/rc.local

添加一行:

/usr/local/sersync/sersync2 -d -r -o /usr/local/sersync/confxml.xml

在/etc/profile.d/目录中创建一文件:vim /etc/profile.d/sersync.sh

内容为:exprot PATH=$PATH:/usr/local/sersync/

7.添加脚本监控sersync是否正常运行:

      #vim check_sersync.sh
     #!/bin/bash
     sersync="/usr/local/sersync/sersync2"
     confxml="/usr/local/sersync/confxml.xml"
     sstatus=$(ps aux | grep ‘sersync2‘ | grep -v ‘grep‘ | wc -l)
     if [ $sstatus -eq 0 ];then
             $sersync -d -r -o $confxml &
     else
             exit 0; 
     Fi
      # vim /etc/crontab
 */10 * * * * /root/check_sersync.sh >  /dev/null 2>&1 每隔十分钟执行一次脚本
 Service crond reload

8.测试:

在Realserver1的/www/kcforum/目录中添加以文件index.html

在RS1上手动执行命令:# sersync2 -d -r -o /usr/local/sersync/confxml.xml

在RS2 /www/kcforum/目录中查看详情

数据同步成功!

四.配置DNS服务器

在RS1上配置DNS服务器进行解析域名:

使用的域名为www.kcforum,com

配置文件:

正向区域解析文件:

反向解析文件;

五.LVS的设置及各个RS服务的网络设置(此部分是通过脚本实现)

1.DS 主机(10.33.200.200)执行Directory.sh脚本:脚本内容如下:

#!/bin/bash
. /etc/rc.d/init.d/functions
 
VIP=10.33.200.1
RIP1=10.33.200.201
RIP2=10.33.200.202
PORT=80
 
case "$1" in
start)
        /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        /sbin/route add -host $VIP dev eth0:0
 
        echo 1 > /proc/sys/net/ipv4/ip_forward
        /sbin/iptables -F
        /sbin/iptables -Z
        /sbin/ipvsadm -C
 
        /sbin/ipvsadm -A -t $VIP:$PORT -s wrr
        /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP1:$PORT -g -w 1
        /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP2:$PORT -g -w 2
        /bin/touch /var/lock/subsys/ipvsadm &> /dev/null
;;
stop)
        echo 0 > /proc/sys/net/ipv4/ip_forward
 
        /sbin/ipvsadm -C
        /sbin/ifconfig eth0:0 down
        /sbin/route del $VIP
 
        /bin/rm -f /var/lock/subsys/ipvsadm &> /dev/null
        echo "IPVS Stoped..."
;;
status)
        if [ ! -e /var/lock/subsys/ipvsadm ]; then
                echo "IPVS is Stoped..."
        else
                echo "IPVS is Running..."
                /sbin/ipvsadm -L -n
        fi
;;
*)
        echo "Please Usage: $0 {start|stop|status}"
;;
Esac

执行结果:

2.两个RS执行脚本:RealServer.sh。脚本内容如下:

执行结果:

六 .测试:

在本地主机WIN7系统上进行测试:修改本地的DNS:(修改为:10.33.200.201)

测试:

时间: 2024-11-08 20:18:23

集群LVS 实现数据共享的相关文章

linux下负载均衡集群 LVS之NAT类型

1.集群类型分下3种: LB: Load Balancing,负载均衡 HA:High Availability, 高可用 HP:High Performance, 高性能 2.LB负载均衡四层LVS类型分为以下3种:(Linux Virtual Server) NAT:地址转换 DR: 直接路由 TUN:隧道 2.1.NAT: 集群节点跟director必须在同一个IP网络中: RIP通常是私有地址,仅用于各集群节点间的通信: director位于client和real server之间,并负

Linux服务器集群LVS

本文主要介绍了Linux服务器集群系统–LVS(Linux Virtual Server),并简单描述下LVS集群的基本应用的体系结构以及LVS的三种IP负载均衡模型(VS/NAT.VS/DR和VS/TUN)的工作原理,以及它们的优缺点和LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法. 参考文献 http://www.linuxvirtualserver.org/zh/index.html 前言 LVS(Linux Virtual Server)的简写,翻译为Linux虚拟服

linux之集群LVS

负载均衡集群:LVS haproxy 高可用集:keepalived RHCS(主要用于金融机构) 一.LVS配置负载均衡集群 两种模式: 1.LVS/NAT模式负载均衡集群 2.LVS/DR模式负载均衡集群 三种工作模式 1.NAT网络地址转换模式,运用的时NAT地址转换 2.TUN模式:隧道模式,工作中不常用 3.DR模式:路由模式,不用做地址转换 1.配置LVS/NAT模式负载均衡集群 LVS服务器对客户端访问应用服务器时,对客户端到应用服务器的链接进行负载均衡,确保 应用服务器按照LVS

负载均衡集群LVS基础篇

一. LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org.现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能.        使用LVS技术要达到的目

集群——LVS理论(转)

原文:http://caduke.blog.51cto.com/3365689/1544229 当单个服务器性能 不能满足日益增多访问流量时,服务器的扩展策略: Scale Up :向上扩展,提升单个物理主机的性能,比如增加CPU.内存等. Scale Out:向外扩展,将相互依赖的服务器(LAMP等)做层次上的划分,然后将各个层次的服务器分别安装在不同的层次的物理主机上.当哪个层次的服务器无法承受压力时只要增加其层次的主机即可. 划分层次的过程也叫做解耦的过程,也就是将此程序之间的耦合度.不同

集群LVS之NAT、DR、TUN三种模式的应用配置

一.集群简介 集群的总类: 1.负载均衡集群(LB:Load Banlancing):实现将一个访问量或者任务量特别大的应用,给他 平均分配到不同的服务器上面,以提供高容量.大并发. 2.高可用集群(HA:High Avalibility):将多台计算机组合起来,避免一个服务因某台机器 出现故障,而导致服务中断的,在于保障服务的可持续性. 3.高性能集群(HP:High Performance)又叫科学运算集群:解决复杂的计算,组合起来的集群,一般要很大量的计算机组成.suse用的比较多 集群分

负载均衡--集群 &nbsp; LVS+keepalived

常用的负载均衡开源软件有: nginx.lvs.keepalived 商业的硬件负载设备: F5.Netscale 1. LB.LVS介绍LB集群是load balance 集群的简写,翻译成中文就是负载均衡集群http://www.aminglinux.com/bbs/data/attachment/forum/201406/16/115112w1we1x4e5ueewzrd.png LVS是一个实现负载均衡集群的开源软件项目 LVS架构从逻辑上可分为调度层(Director).server集

LB负载均衡集群--LVS

LB集群: LB集群是load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.keepalived ,商业的硬件负载设备F5.Netscale. LB集群架构: 当用户的请求过来时,会直接发到分发器(Director Server)上,然后它把用户的请求根据预先设置好的算法,智能均衡地分发到后端的真正服务器(real server)上.如果不同的机器,可能用户请求到的数据不一样,为了避免这样的情况发生,所以用到了共享存储,这样保证所有用户请求

负载均衡集群LVS实战篇

Keepalived+LVS的高可用集群系统 一.拓扑图结构: 二.Keepalived的安装 1.主服务器的安装 [[email protected] ~]# wget http://www.keepalived.org/software/keepalived-1.2.20.tar.gz [[email protected] ~]# tar -zxvf keepalived-1.2.20.tar.gz [[email protected] ~]# cd keepalived-1.2.20/ [