haoman 发表于 2019-1-3 12:37:39

集群LVS 实现数据共享

  实验内容介绍:

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

  

  实验环境结构图:
      http://s3.运维网.com/wyfs02/M01/70/AC/wKioL1W7Nfai3YWcAAFa_VBtC4A658.jpg
  

  一.实验步骤:
   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
http://s3.运维网.com/wyfs02/M00/70/AC/wKioL1W7OyCChbZRAAAmrnpHuMU553.jpg
          # 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
      # tar xf php-5.6.8.tar.bz2
      # tar xf libmcrypt-2.5.7.tar.gz
      # 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
         # chkconfig --list | grep php-fpmphp-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://s3.运维网.com/wyfs02/M00/70/AC/wKioL1W7Po2CqiwqAACE8Rl37Mg185.jpg


配置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
   http://s3.运维网.com/wyfs02/M01/70/AC/wKioL1W7P7SQVbWxAADyFh_ynhM627.jpg
      2.配置httpd的配置文件,让apache能识别php格式的文件。
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
   
    DirectoryIndex index.html index.php
   
      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文件   
      
      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
      
            Options none
            AllowOverride none
            Require all granted
      
       http://s3.运维网.com/wyfs02/M00/70/AF/wKiom1W7PsSjGIl_AAFIRmB6lhs096.jpg


  二.在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
    # 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
解决:# 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.cnfhttp://s3.运维网.com/wyfs02/M01/70/AC/wKioL1W7RFyTLb7nAAAnRFgzmtM416.jpg
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用户密码:
http://s3.运维网.com/wyfs02/M01/70/AD/wKioL1W7RYiRCrziAAC3Ylp-V70135.jpg
  5.向MySQL服务器中的root用户授权,允许两个real Server能通过远程连接10.33.200.203上的mysql:(记住关闭防火墙:或者想一下此时防火墙规则怎么写)
mysql> grant all privileges on *.* to 'root'@'%' identified by 'zkchang' with grant option;
http://s3.运维网.com/wyfs02/M00/70/B0/wKiom1W7REGwVLDVAABD8OytaAY110.jpg
http://s3.运维网.com/wyfs02/M01/70/AD/wKioL1W7RkDR7_TwAAA7kToBgns841.jpg


在realserver 10.33.200.201 上安装Discuz:
   http://s3.运维网.com/wyfs02/M02/70/B0/wKiom1W7RLTiVjXlAAEGEkUo7fI672.jpg
   http://s3.运维网.com/wyfs02/M00/70/AD/wKioL1W7RrrDx_d-AACUuYOPc0A150.jpg
    http://s3.运维网.com/wyfs02/M01/70/AD/wKioL1W7Rt7ihb8vAABnseQSkhI488.jpg




三.进行网页数据同步服务的安装
   在RS1上安装Rsync服务端:

      1.关闭selinux

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

      3.安装rsync服务端软件:

       #yum install rsync xinetd

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

       vim /etc/xinetd.d/rsync

      Disable=no修改为no

      http://s3.运维网.com/wyfs02/M00/70/AD/wKioL1W7SHjwyHKrAACosceolio518.jpg
   4.创建rsyncd.conf配置文件:vim /etc/rsyncd.conf

      http://s3.运维网.com/wyfs02/M02/70/AD/wKioL1W7SU-i20tjAAICQEZSdn4580.jpg
5.创建用户认证文件:
         # vim /etc/rsync.pass内容:zkc:123456
6.设置文件权限:
      # chmod 600 /etc/rsyncd.conf         
      # chmod 600 /etc/rsync.pass 7.启动rsync:
Service xinetd start


   在RS2上进行操作   
1.安装rsync客户端
2.关闭selinux和防火墙和在realserver1 上的设置相同:
      3.安装rsync客户端软件
http://s3.运维网.com/wyfs02/M02/70/AD/wKioL1W7SmnzVXwuAABwO_WhDiA590.jpg
只安装xinetd即可
Yum install xinetd
设置开机启动rsync
      # vim /etc/xinetd.d/rsyn
http://s3.运维网.com/wyfs02/M00/70/AD/wKioL1W7SuDiDm_fAABezbieqeE449.jpg
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/ zkc@10.33.200.202::kcforum --password-file=/etc/passwd.txthttp://s3.运维网.com/wyfs02/M01/70/B0/wKiom1W7SXTRipOJAABrKEmOaJc056.jpg
http://s3.运维网.com/wyfs02/M02/70/AD/wKioL1W7S4bzN78fAACBDnhe9_g276.jpg




  在RS1上安装Sersync工具,实时触发rsync进行同步
1.查看内核是否支持inotify:
    http://s3.运维网.com/wyfs02/M02/70/B0/wKiom1W7ShqCcpCLAACFcAwTCuA733.jpg
     Linux支持inotify最小内核为2.6.13
2.查看系统默认参数值并做相应修改:
    # sysctl -a | grep "max_queued_events"   
    fs.inotify.max_queued_events = 16384
    # sysctl -a | grep "max_user_instances"
    fs.inotify.max_user_instances = 128
    # sysctl -a | grep "max_user_watches"
    fs.inotify.max_user_watches = 8192
    修改参数:
    # sysctl -w fs.inotify.max_queued_events="99999999"
    fs.inotify.max_queued_events = 99999999
    # sysctl -w fs.inotify.max_user_watches="99999999"
    fs.inotify.max_user_watches = 99999999
    # sysctl -w fs.inotify.max_user_instances="65535"
      fs.inotify.max_user_instances = 65535

      在/etc/sysctl.conf中添加如下内容:
http://s3.运维网.com/wyfs02/M00/70/AD/wKioL1W7TKTgjbCGAACD94sq6ak782.jpg

参数说明:
      max_queued_events:inotify队列最大长度,如果值太小,会出现                现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches:要同步的文件包含多少目录,可以用:find /home/www.iyunv.com -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/www.iyunv.com为同步文件目录)
max_user_instances:每个用户创建inotify实例最大值


3.安装sersync
http://s3.运维网.com/wyfs02/M00/70/B0/wKiom1W7S_2QcWfMAABmX8z__fs397.jpg

4.配置sersync
http://s3.运维网.com/wyfs02/M02/70/AD/wKioL1W7TjmTj0sJAAC-9An6NJI958.jpg
5.Vimconfxml.xml 修改相应内容:
http://s3.运维网.com/wyfs02/M02/70/B0/wKiom1W7TQPzC0zVAABjP9Rtt5U251.jpg
http://s3.运维网.com/wyfs02/M00/70/B0/wKiom1W7TRXDSG08AABX7909uIU612.jpg
http://s3.运维网.com/wyfs02/M01/70/AD/wKioL1W7Txbx2YgCAABFj2w7QcM598.jpg
参数说明:
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
http://s3.运维网.com/wyfs02/M00/70/AD/wKioL1W7T8-BxYL8AAFrcppN5GQ992.jpg
     在RS2 /www/kcforum/目录中查看详情
http://s3.运维网.com/wyfs02/M01/70/AD/wKioL1W7UAnjsCkzAABd4KmwfOg678.jpg
   数据同步成功!




  四.配置DNS服务器
在RS1上配置DNS服务器进行解析域名:
使用的域名为www.kcforum,com
配置文件:
http://s3.运维网.com/wyfs02/M00/70/AD/wKioL1W7UjaR3hn-AACj4W-Gn60932.jpg
正向区域解析文件:
http://s3.运维网.com/wyfs02/M01/70/AD/wKioL1W7UmWijR19AADf16cTosc317.jpg
反向解析文件;
http://s3.运维网.com/wyfs02/M02/70/B0/wKiom1W7ULyTPx7PAAC74_kTb9k687.jpg

五.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执行结果:
http://s3.运维网.com/wyfs02/M02/70/B0/wKiom1W7UhLBDnC7AADzRPDpaaI527.jpg
http://s3.运维网.com/wyfs02/M00/70/AD/wKioL1W7VByi57kUAACmgDNUZY4778.jpg
  2.两个RS执行脚本:RealServer.sh。脚本内容如下:
http://s3.运维网.com/wyfs02/M02/70/AD/wKioL1W7VIXBKNutAAGTRN9HOEY505.jpg
http://s3.运维网.com/wyfs02/M00/70/AD/wKioL1W7VJbDQ5KlAAEeytP557w030.jpg
执行结果:
http://s3.运维网.com/wyfs02/M01/70/B0/wKiom1W7UuSQqBQbAACXQt2lsyg582.jpg
六 .测试:
在本地主机WIN7系统上进行测试:修改本地的DNS:(修改为:10.33.200.201)
http://s3.运维网.com/wyfs02/M00/70/B0/wKiom1W7U1SxQ89SAACxTFV3GcA817.jpg
测试:
http://s3.运维网.com/wyfs02/M01/70/B0/wKiom1W7U4TB3076AAGj6pDnVDo565.jpg
http://s3.运维网.com/wyfs02/M02/70/AD/wKioL1W7VZvDQuoHAAEX2rjcLJg753.jpg



页: [1]
查看完整版本: 集群LVS 实现数据共享