利用lvs-nat实现两台web服务器负载均衡的简单案例



写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正。如有不明白的地方,愿可一起探讨。



案例拓扑图



配置主机1



安装ipvsadm

# yum -y install ipvsadm
# ipvsadm -A -t 10.170.2.80:80 -s rr
# ipvsadm -a -t 10.170.2.80:80 -r 192.168.3.101 -m
# ipvsadm -a -t 10.170.2.80:80 -r 192.168.3.102 -m
# echo 1 > /proc/sys/net/ipv4/ip_forward

配置主语2和3



编译安装apr-1.5.0

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

编译安装apr-util-1.5.3

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

编译安装httpd-2.4.9

# tar xf httpd-2.4.9.tar.bz2 
# cd httpd-2.4.9
# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --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=all --with-mpm=event
# make && make install

修改httpd主配置文件,设置Pid文件的路径

# vim /etc/httpd24/httpd.conf

在ServerRoot "/usr/local/apache"行下面添加一行:

PidFile "/var/run/httpd.pid"

提供SysV服务脚本/etc/rc.d/init.d/httpd24,这个文件需要新建

# vim /etc/rc.d/init.d/httpd24
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve #        HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
  echo -n $"Stopping $prog: "
  killproc -p ${pidfile} -d 10 $httpd
  RETVAL=$?
  echo
  [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}
# See how we were called.
case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  status)
        status -p ${pidfile} $httpd
  RETVAL=$?
  ;;
  restart)
  stop
  start
  ;;
  condrestart)
  if [ -f ${pidfile} ] ; then
    stop
    start
  fi
  ;;
  reload)
        reload
  ;;
  graceful|help|configtest|fullstatus)
  $apachectl [email protected]
  RETVAL=$?
  ;;
  *)
  echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
  exit 1
esac
exit $RETVAL
# chmod +x /etc/rc.d/init.d/httpd24 
# chkconfig --add httpd24
# chkconfig httpd24 on

启动http24服务并测试

 # service httpd24 start

在主机2和主机3上添加不同的页面

主机2

# vim /usr/local/apache/htdocs/test.html
    <h1>Hello,WEB1</h1>

主机3

# vim /usr/local/apache/htdocs/test.html
    <h1>Hello,WEB2</h1>

在浏览器键入10.170.2.80/test.html,并刷新可以得到不同的结果

编译安装php-5.4.26

# tar xf php-5.4.26.tar.bz2
# cd php-5.4.26
# ./configure --prefix=/usr/local/php --with-mysql=mysqlnd --with-openssl 
    --with-mysqli=mysqlnd --enable-mbstring --with-freetype-dir --with-jpeg-dir 
    --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets 
    --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt  --with-config-file-path=/etc 
    --with-config-file-scan-dir=/etc/php.d --with-bz2  --enable-maintainer-zts
# make && make install

为php提供配置文件

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

编辑httpd配置文件,以支持php

# vim /etc/httpd24/httpd.conf
在AddType application/x-gzip .gz .tgz行下面添加下面两行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
将DirectoryIndex index.html这一行改为:
DirectoryIndex index.php index.html

给主机2和主机3添加测试页

主机2

# vim /usr/local/apache/htdocs/index.php
    <h1>Hello,WEB1</h1>
    <?php
        phpinfo();
    ?>

主机3

# vim /usr/local/apache/htdocs/index.php
    <h1>Hello,WEB2</h1>
    <?php
        phpinfo();
    ?>

重启主机2和主机3的httpd24服务

# service httpd24 restart

在浏览器中键入10.170.2.80,刷新可以得到不同的结果

配置主机4



编译安装mariadb-5.5.36

# tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local
# cd /usr/local/
# ln -sv mariadb-5.5.36-linux-x86_64/ mysql
# mkdir -pv /mysql/data
# groupadd -r mysql
# useradd -g mysql -s /sbin/nologin -M -d /mysql/data -r mysql
# chown -R mysql:mysql /mysql
# chown -R mysql:mysql /mysql/data

为数据库提供配置文件:

# cd mysql
# mkdir /etc/mysql
# chown -R root.mysql ./*
# cp support-files/my-large.cnf /etc/mysql/my.cnf
修改文件/etc/mysql/my.cnf文件内容,在thread_concurrency = 8行下添加一行:
datadir = /mysql/data

为数据库提供SysV启动脚本,并设置为开机启动:

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

初始化数据库并启动数据库:

# echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
# source /etc/profile.d/mysql.sh 
# echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
# ldconfig
# ln -sv /usr/local/mysql/include/ /usr/include/mysql
# scripts/mysql_install_db --user=mysql --datadir=/mysql/data/
# /etc/init.d/mysqld start

创建数据库并授权:

MariaDB [(none)]> CREATE DATABASE discuz;
MariaDB [(none)]> GRANT ALL ON discuz.* TO [email protected]‘192.168.3.%‘ IDENTIFIED BY ‘dscpass‘;
MariaDB [(none)]> FLUSH PRIVILEGES;

启动nfs共享服务

# useradd -u 600 discuz
# vim /etc/exports
    /var/www/html 192.168.3.0/24(rw,no_root_squash)
# /etc/init.d/rpcbind start
# /etc/init.d/nfs start
# /etc/init.d/nfslock start

将Discuz_X2.5_SC_GBK解压到/var/www/html下并修改权限

# unzip Discuz_X2.5_SC_GBK.zip .
# cd upload
# chmod -R go+w config
# chmod -R go+w data
# chmod -R go+w uc_*

搭建测试环境并进行测试



在主机2和主机3上进行相关配置

# useradd -u 600 discuz
# mount -f nfs 192.168.3.36:/var/www/html /usr/local/apache/htdocs

在浏览器中键入10.170.2.80/upload,可以得到安装discuz论坛页面

点击“我同意”-->点击“下一步”-->点击“下一步”-->根据数据库授权信息,填写“安装数据库内容”,然后点击“下一步”-->数据库安装成功后,在显示的页面上点击“暂不开通”即可得到论坛页面

时间: 2024-10-13 00:07:45

利用lvs-nat实现两台web服务器负载均衡的简单案例的相关文章

heartbeat 配置两台web服务器高可用集群案例

通过heartbeat 配置两台web服务器高可用集群案例: 拓扑: web1:192.168.0.101 hostname: web1.example.com web2:192.168.0.102 hostname:web2.example.com vip:192.168.0.254 nfs服务器:192.168.0.100(存放web页面) 注意: 1主机名要与uname -n 保持一致 2.web1与web2主机的date时间保持同步 3.web1与web2,ssh双机互信通信 4.关闭i

利用nfs共享实现多台web服务器的负载均衡(转载,没实现过)

一.实验目的 本实验主要通过nfs解决多台web服务器负载均衡的问题和数据同步的问题. 二.实验环境: 如上拓扑图所示,在server1上安装有mysql数据库,server2和server3通过nfs共享server1上的mysql数据库,同时,将discuz网站的源码放在server1上,即:server1只运行mysql,而server2和server3只运行php和apache.这样可以保证用户不管访问server2或者server3都可以得到相同的结果. 三.实验步骤 1.server

两台web服务器做文件共享,负载均衡

服务器环境:httpd.php.MySQL.DNS.NFS共配置4台虚拟机,web服务各一台,PHP.DNS一台,MySQL.NFS一台. 网段使用172.16.0.0/16 注:httpd,php,DNS服务在此前的博客中有详细说明,这里就不在详细演示,在此前的基础上追加安装,MySQL,NFS 一.安装mysql-5.5.33 下载mysql-5.5.33-linux2.6-x86_64.tar.gz软件包 1.准备数据存放的文件系统 因为数据总是在动态增长的,所以我们要创建一个逻辑卷来保存

两台web服务器实现负载均衡的解决方案

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 总体方案 平台规划拓扑图如下: 总体解决方案: 两台web服务通过DNS实现负载均衡,共享NFS服务器,通过NFS服务器共享MySQL服务器 说明:接下来将搭建DNS服务器.两台web服务器.NFS服务器以及MySQL服务器,在此过程中只给出实现过程及其步骤,望理解. 搭建DNS服务器 1.编辑主配置文件 # vim /etc/named.conf options { directory   "

LVS详解及基于LVS实现web服务器负载均衡

前言 LVS(Linux Virtual Server)Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.通过LVS提供的负载均衡技术和Linux操作系统可实现一个高性能.高可用的服务器群集,从而以低成本实现最优的服务性能. 集群基础 集群简介 集群(Cluster)是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理.一个客户与集群相互作用时,集群像是一个独立的服务器.集群配置是用

利用lvs keepalived配置redis高可用及负载均衡

需求 我们用ES做日志服务,架构是 上游数据来源=>redis=>logstash=>ES redis目前还是单点, 没有做高可用, 现在数据量越来越多, 如果下游消费不出问题还好, redis里面数据来了就走,但是下游一旦出问题, 分给redis的内存半小时就撑满了. 看到redis3.0 beta版本已经提供了集群功能, 但是需要client以集群模式接入, 我们这么多上游用户, 不太可能统一要求他们改造. 公司也有硬件的LB, 同事在E公司的时候就是用的硬件LB. 但接入还要申请,

CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

一.系统环境 实验拓扑: 实验环境: Vmware 9.01 + Windows 8 x64 企业版+8G内存 虚拟机步骤: 1.安装一台CentOS 6.3 x64主机,内存为1GB,网络为NAT模式,注意检查Vmware中EDIT菜单下Virtual Network Editor中VMnet8 2. 加电,安装系统.基础知识了,不再多说,注意:选择英文而不要选择中文,选择是Basic Server模式,系统名称:LVS-MASTER 3.安装系统后,用root用户登录进去,执行 ifconf

公司网络web服务器负载均衡解决方案

公司网络web服务器负载均衡解决方案 随着公司产品业务的推广发展壮大,对服务器的硬件性能.相应速度.服务稳定性.数据可靠性的要求越来越高.今后服务器的负载将难以承受所有的访问.从公司的实际情况,运营成本网络安全性考虑,排除使用价格昂贵的大型服务器.以及部署价格高昂的专用负载均衡设备. DNS轮询负载均衡解决方案虽然成本低廉但是安全性能不是很好,加上公司产品的特殊性需要用户验证的体系,在会话保持方面是一大缺陷,会话保持,如果是需要身份验证的网站,在不修改软件构架的情况下,这点是比较致命的,因为DN

CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡【转】

CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalived版本:keepalived-1.2.4 三.安装 0.安装LVS前系统需要安装popt-static,kernel-devel,make,gcc,openssl-devel,lftp,libnl*,popt*