规划:
1、使用lvs的nat模型,负载均衡两台 Discuz 服务器。
2、Discuz 服务器的数据共享解决方案:
部署 Discuz! 论坛程序要解决两大问题:
(1)、用户上传的附件属于非结构化的数据要保存在文件系统中。
要解决两台提供Discuz!论坛服务的附件共享问题:
(A)、当用户上传附件时通过地址重写机制把它定向到一台Discuz!服务器,再通过
rsync+innotify实时数据同步方式把附件同步到另一台Discuz!服务器。
(B)、使用rsync推、拉数据的方式,实现用户上传的附件同步,这样无论用户把附件上传
到那台服务器都可以附件同享。
(2)、论坛结构化的数据保存在共享数据库服务器。
3、Discuz!论坛程序是.php格式的。意思是:这里选择使用:lamp 平台运行论坛程序。php 以模块的方式与 httpd 服务器交互。
整个 Discuz! 论坛系统的结构如下图所示:
一、构建LAMP平台,用来运行:Discuz! 论坛程序
在 real1.9527du.com(192.168.60.99) 和 real2.9527du.com(192.168.60.40 两台主机部署 LAMP 平台中的:httpd 和 php.php 以模块的方式与 httpd 交互
MySQL 数据库安装在 DataServer.9527du.com(192.168.60.88)主机,作为两台 Discuz! 服务器的共享数据库服务器
LAMP 平台使用的软件:
httpd-2.4.1.tar.bz2 php-5.4.26.tar.bz2 mariadb-5.5.36-linux-i686.tar.gz
在 real1.9527du.com(192.168.60.99) 编译安装 httpd和php
1、编译安装 httpd
解压
[[email protected] lamp]# tar -xf httpd-2.4.1.tar.bz2 [[email protected] lamp]# cd httpd-2.4.1
编译配置
[[email protected] httpd-2.4.1]# ./configure \ --prefix=/usr/local/httpd-2.4.1 \ 指定程序的安装位置 --sysconfdir=/etc/httpd-2.4.1 \ 指定配置文件的存放位置 --enable-so \ 使用动态装载模块的功能, --enable-mods-shared=all \ 编译所有的模块 --enable-ssl \ 支持 https 加密数据传输 --enable-mpms-shared=all \ 安装所有的mpm --with-mpm=prefork \ 设置默认使用的MPM --enable-info \ 开启httpd的状态信息功能 --enable-cgi \ 支持cgi --enable-rewrite \ 支持地址重定向功能 --with-apr=/usr/local/apr-1.4/ \ 指定依赖的apr位置, --with-apr-util=/usr/local/apr-util-1.4/ --with-pcre --with-z 支持压缩传输,节省带宽但消耗CPU时间周期
编译
[[email protected] httpd-2.4.1]#make && make install
2、安装 php
解压
[[email protected] admin]# tar -xf php-5.4.26.tar.bz2 [[email protected] admin]# cd php-5.4.26
编译配置
[[email protected] php-5.4.26]# ./configure --prefix=/usr/local/php-6.4 \ 指定程序的安装位置 --with-apxs2filter=/usr/local/httpd-2.4.1/bin/apxs \ 把php编译成httpd的模块 --enable-mod-charset \ 支持更多的字符集 --with-config-file-path=/etc \ 配置文件的路径 --with-config-file-scan-dir=/etc/php.d \ php一般会到php.d 找它模块的配置文件 --with-libxml-dir \ 支持xml --with-openssl \ 支持openssl 加密传输 --with-zlib \ 支持zlib压缩 --with-bz2 \ 支持bz2压缩 --with-pcre-dir \ --with-gd \ 图形库显示图形必需的 --with-jpeg-dir \ 支持jpeg格式的图片 --with-png-dir \ 支持png格式的图片 --with-zlib-dir --with-freetype-dir \ --enable-mbstring \ 支持中文 --enable-sockets \ 支持UNIX SOCK --enable-maintainer-zts \ 安全的线程 --with-mysql=mysqlnd \ 使用php内置连接数据库的驱动。这样就不需要事先安装好数据库了。 --with-mysqli=mysqlnd \ 使用php内置连接数据库的驱动 --with-pdo-mysql=mysqlnd 使用php内置连接数据库的驱动
编译安装
[[email protected] php-5.4.26]# make && make install
提供php的配置文件
[[email protected] php-5.4.26]# cp php.ini-production /etc/php.ini
(1)、设置httpd的配置文件让httpd支持动态格式的网页.php
设置支持.php格式的主页
<IfModule dir_module> DirectoryIndex index.php index.html </IfModule>
添加.php格式的网页的处理器
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
查看是否加载php模块
[[email protected] ~]# grep "LoadModule[[:space:]]*php" /etc/httpd-2.4.1/httpd.conf LoadModule php5_module modules/libphp5.so
说明:
在 rele2.9527du.com(192.168.60.99)主机也是一样的编译安装httpd、php程序和设置。
3、在 DataServer.9527du.com(192.168.60.88)安装 MariaDB 数据库服务器。
(1)、准备好安装 MariaDB 数据库的条件
创建MariaDB数据库的数据目录
[[email protected] /]# mkdir -p mysqldata/mysql
创建初始化数据库的用户 mysql,且把该用户创建成系统用户默认登陆shell为:/sbin/nologing
[[email protected] /]# user -r -s /sbin/nologin mysql [[email protected] /]# id mysql uid=388(mysql) gid=388(mysql) groups=388(mysql)
因为发起对数据目标中的数据操作(增、删、改、查)的进程的属主是:mysql,所以要修改数据目录的属主属组为:mysql.
[email protected] mysqldata]# chown mysql:mysql mysql [[email protected] mysqldata]# ll total 4 drwxr-xr-x 2 mysql mysql 4096 Sep 8 10:41 mysql
(2)、安装 MariaDB数据库
解压数据库程序到 /use/local 目录下
[[email protected] admin]# tar -xf mariadb-5.5.36-linux-i686.tar.gz -C /usr/local/ [[email protected] admin]# cd /usr/local/
创建软链接,不直接修改目录名称,为了以后升级方面
[[email protected] local]# ln -sv mariadb-5.5.36-linux-i686 mysql create symbolic link `mysql‘ to `mariadb-5.5.36-linux-i686‘ [[email protected] local]# ll mysql lrwxrwxrwx 1 root root 25 Sep 8 09:30 mysql -> mariadb-5.5.36-linux-i686
修改解压后的所有程序的属主属组为:mysql ,因为做数据库的初始化时,需要以mysql的身份执行一些初始化脚本。
[email protected] local]# cd mysql/ [[email protected] mysql]# chown -R mysql:mysql ./* [[email protected] mysql]# ll total 216 drwxr-xr-x 2 mysql mysql 4096 Sep 8 09:34 bin -rw-r--r-- 1 mysql mysql 17987 Feb 24 2014 COPYING -rw-r--r-- 1 mysql mysql 26545 Feb 24 2014 COPYING.LESSER drwxr-xr-x 3 mysql mysql 4096 Sep 8 09:34 data drwxr-xr-x 2 mysql mysql 4096 Sep 8 09:34 docs ....
初始化数据库
[[email protected] mysql]# ./scripts/mysql_install_db --datadir=/mysqldata/mysql/ --user=mysql Installing MariaDB/MySQL system tables in ‘/mysqldata/mysql/‘ ... OK Filling help tables... OK
说明:
初始化数据库已经成功。
(3)、提供启动 MariaDB 数据库的条件
为数据库提供配置文件
[[email protected] mysql]# cp support-files/my-large.cnf /etc/my.cnf
根据实际情况修改数据库的数据目录的位置等参数
[[email protected] mysql]# vim /etc/my.cnf thread_concurrency = 2 datadir = /mysqldata/mysql/
为 MariaDB 数据库提供启动脚本
[[email protected] mysql]# cp support-files/mysql.server /etc/init.d/mysqld [email protected] mysql]# ll /etc/init.d/mysqld -rwxr-xr-x 1 root root 11844 Sep 8 10:48 /etc/init.d/mysqld
为了安全考虑,修改数据库程序的属主为:root 属组为:mysql
[[email protected] mysql]# chown -R root:mysql ./* [[email protected] mysql]# ll total 216 drwxr-xr-x 2 root mysql 4096 Sep 8 09:34 bin -rw-r--r-- 1 root mysql 17987 Feb 24 2014 COPYING -rw-r--r-- 1 root mysql 26545 Feb 24 2014 COPYING.LESSER drwxr-xr-x 3 root mysql 4096 Sep 8 09:34 data drwxr-xr-x 2 root mysql 4096 Sep 8 09:34 docs .....
为了使用 MariaDB 数据库提供的工具命令方便,把它所在的路径导出来
[[email protected] /]# vim /etc/profile.d/mysql.sh PATH=$PATH:/usr/local/mysql/bin/
(3)、启动 MariaDB 数据库并测试
启动数据库服务
[[email protected] /]# service mysqld start Starting MySQL.. [ OK ]
使用客户端工具mysql连接数据库
[email protected] /]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.36-MariaDB-log MariaDB Server Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. MariaDB [(none)]>
说明:
数据库已经顺利启动。
(4)、修改数据库资源的访问,原因安装数据数据库时默认安装的用户是没有密码的。极其不安全。
删除多余的默认用户
MariaDB [(none)]> drop user ‘root‘@‘dataserver.9527du.com‘; MariaDB [(none)]> drop user ‘root‘@‘::1‘; MariaDB [(none)]> drop user ‘‘@‘localhost‘; MariaDB [(none)]> drop user ‘‘@‘dataserver.9527du.com‘; MariaDB [(none)]> drop user ‘root‘@‘localhost‘;
给保留的用户添加密码,
MariaDB [(none)]> set password for ‘root‘@‘127.0.0.1‘ = password(‘root‘); Query OK, 0 rows affected (0.00 sec)
设置远程管理数据库的用户
MariaDB [(none)]> grant all on *.* to ‘admin‘@‘%.%.%.%‘ identified by ‘admin‘; Query OK, 0 rows affected (0.00 sec)
修改后的 MariaDB 数据库的用户列表
MariaDB [(none)]> select user,host,password from mysql.user; +-------+-----------+-------------------------------------------+ | user | host | password | +-------+-----------+-------------------------------------------+ | admin | %.%.%.% | *4ACFE3202A5FF5CF467898FC58AAB1D615029441 | | root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | +-------+-----------+-------------------------------------------+ 2 rows in set (0.00 sec)
远程测试是否能够登陆操作数据库
D:\>mysql -uadmin -h192.168.60.88 -p Enter password: ***** Welcome to the MySQL monitor. Commands end with ; or \g. 。。。。。 Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+
说明:
MariaDB数据库已经安装完成
(5)、创建Discuz论坛使用的数据库
MariaDB [(none)]> create database discuz; Query OK, 1 row affected (0.00 sec)
创建Discuz论坛程序访问数据库的用户,采用最小权限法则,该用户只有:Discuz 数据库的所有权限。
MariaDB [(none)]> grant all on discuz.* to ‘discuz‘@‘192.168.60.%‘ identified by ‘discuz‘; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec)
说明:
LAMP 平台的数据库已经安装测试成功。
4、测试,LAMP 平台
说明:都是在real1.9527du.com(192.168.60.99)主机,通过【curl】访问测试的。
(1)、添加测试页
[[email protected] htdocs]# cat index.php <?php $link = mysql_connect(‘192.168.60.88‘,‘admin‘,‘admin‘); if ($link) echo "Success..."; ----> 如果连接数据库成功会输出:Success... else echo "Failure..."; ----> 如果连接数据库失败会输出:Failure... ?>
(2)、测试real1.9527du.com(192.168.60.99)主机搭建的 lamp 平台
[[email protected] httpd-2.4.1]# curl http://192.168.60.99/index.php Success...
说明:
连接数据库成功
通过ssh远程工具,关闭数据库服务
[[email protected] httpd-2.4.1]# ssh 192.168.60.88 ‘service mysqld stop‘ [email protected]‘s password: Shutting down MySQL.[ OK ]
再次测试是否能够连接数据库
[[email protected] httpd-2.4.1]# curl http://192.168.60.99/index.php Failure...
说明:
连接数据库失败。
192.168.60.99 主机的:lamp 平台已经搭建成功!!!
(3)、测试real2.9527du.com(192.168.60.40)主机搭建的:lamp 平台
把测试页面发送到 192.168.60.40
[[email protected] httpd-2.4.1]# scp ./htdocs/index.php 192.168.60.40:/usr/local/httpd-2.4.1/htdocs/ [email protected]‘s password: index.php 100% 146 0.1KB/s 00:00
测试 是否能够连接到数据库
[[email protected] httpd-2.4.1]# curl http://192.168.60.40/index.php Failure...
说明:
连接数据库失败。
通过ssh远程工具,开启数据库服务
[[email protected] httpd-2.4.1]# ssh 192.168.60.88 ‘service mysqld start‘ [email protected]‘s password: Starting MySQL....[ OK ]
再次访问测试
[[email protected] httpd-2.4.1]# curl http://192.168.60.40/index.php Success...
说明:
已经连接到数据库服务器了。192.168.60.40 主机的:lamp 平台已经搭建成功!!!
说明:
提供 Discuz 论坛服务的两个LAMP平台都搭建成功。
二、使用rsync数据同步服务解决,两台 Discuz! 服务器数据共享问题;
使用rsync 数据同步服务为:real1.9527du.com(192.168.60.99)和
real2.9527du.com(192.168.60.40) 两台提供 Discuz 论坛服务的服务器的提供数据共享解决方案。
real1.9527du.com(192.168.60.99)作为rsync的服务器端
real2.9527du.com(192.168.60.40)作为rsync客户端
1、安装配置rsync服务器
(1)使用lvm逻辑卷保存论坛程序
查看VG卷组是否还有剩余空间
[[email protected] /]# vgdisplay vg0 | grep "[[:space:]]*\/[[:space:]]*Size" Alloc PE / Size 6656 / 52.00 GiB Free PE / Size 1023 / 7.99 GiB
创建lvm
[[email protected] /]# lvcreate -L 4G -n lvrsync vg0 Logical volume "lvrsync" created
格式化lvm
[[email protected] /]# mke2fs -t ext4 /dev/vg0/lvrsync [[email protected] /]# echo $? 0
(2)、挂载
创建挂载点
[[email protected] /]# mkdir /web
设置开机自动挂载
[[email protected] /]# vim /etc/fstab /dev/mapper/vg0-lvrsync /web ext4 defaults,acl 0 0 [[email protected] /]# mount -a [[email protected] /]# mount | grep "lvrsync" /dev/mapper/vg0-lvrsync on /web type ext4 (rw)
(3)安装 rsync程序并为其提供配置文件
[[email protected] /]# yum install rsync
让 rsync 以独立守护进程方式工作。
rsync工作成服务模式,要有配置文件,为rsync服务器提供配置文件
[[email protected] /]# vim /etc/rsyncd.conf # # uid = nobody gid = nobody use chroot = no max connections = 10 ------> 并发量 strict modes = yes pid file = /var/run/rsyncd.pid -----> rsync的PID文件位置 log file = /var/log/rsyncd.lock -----> 锁文件的位置 [web] -----> rsync服务器导出的存储空间的标识 path = /web ------> 寻出的存储空间在文件系统的位置 ignore errors ------> 数据同步时是否忽略一些IO错误,继续实现数据同步 read only = no -------> 允许客户端上传数据 write only = no -------> 允许客户端拉取数据 hosts allow = 192.168.60.0/24 --------> 允许访问rsync服务器的客户端端 hosts deny = * list = false --------> 不允许列出rsync服务器导出的存储空间 uid = root gid = root
2、配置 rsync 客户端实时向rsync服务器推送数据。
使用 innotify 机制实现数据的实时同步
(1)、使用lvm逻辑卷做为rsync导出的存储空间。
查看卷组是否还有空间创建lvm
[[email protected] /]# vgdisplay | grep "[[:space:]]*\/[[:space:]]*Size" Alloc PE / Size 6656 / 52.00 GiB Free PE / Size 1023 / 7.99 GiB
创建lvm
[[email protected] /]# lvcreate -L 4G -n web vg0 Logical volume "web" created
格式化lvm
[[email protected] /]# mke2fs -t ext4 /dev/vg0/web [[email protected] /]# echo $? 0
(2)、挂载
创建挂载点
[[email protected] /]# mkdir /web
设置自动挂载
[[email protected] /]# vim /etc/fstab /dev/mapper/vg0-web /web ext4 defaults,acl 0 0 [[email protected] /]# mount -a [[email protected] /]# mount | grep "web" /dev/mapper/vg0-web on /web type ext4 (rw)
(3)、安装: innotify
inotify-tools-3.14.tar.gz
[[email protected] admin]# tar -xf inotify-tools-3.14.tar.gz [[email protected] admin]#cd inotify-tools-3.14 [[email protected] inotify-tools-3.14]#./configure --prefix=/usr/local/inotify-tools [[email protected] inotify-tools-3.14]#Make && make install
(4)、配置 当 /web 目录的文件发生改变(create、move、delete、modify)就触发 rsync 客户端向 rsync 服务端推送数据。
脚本如下:
#/bin/bash # # rsyncServer=192.168.60.99 src=/web/ dst=web rsync -azrtopg --delete $src $rsyncServer::$dst /usr/local/inotify-tools/bin/inotifywait -mrq -e create,move,delete,modify $src | while read files;do rsync -azrtopg --delete $src $rsyncServer::$dst done
(5)、在 rsync 服务端启动rsync 服务
[[email protected] /]# rsync --daemon --config=/etc/rsyncd.conf --ipv4
查看是否监听
[[email protected] /]# netstat -antpl | grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2382/rsync
在服务端以后台方式运行innotify监测脚本
[[email protected] ~]# ./inotify.sh & [1] 2348
(6)、测试:rsync + inotify 实现数据实时同步:
在 rsync 客户端创建文件
[[email protected] ~]# touch /web/test.txt
查看 rsync 服务器端导出的存储空间是否有该文件
[[email protected] web]# ll total 16 drwx------. 2 root root 16384 Sep 8 11:32 lost+found -rw-r--r--. 1 root root 0 Sep 8 11:47 test.txt
说明:
在rsync 客户端,innotify 已经监测到 /web 文件系统的 create 事件
在 rsync 客户端修改 test.txt 文件
[[email protected] ~]# echo "test rsync server" > /web/test.txt
看看 rsync 服务器端的 test.txt 文件的内容是否改变
[[email protected] web]# cat test.txt test rsync server
说明:
在 rsync 客户端,innotify 已经监测到 /web 文件系统的"modify"文件的事件
在 rsync 客户端删除 test.txt 文件
[[email protected] ~]# rm -f /web/test.txt
看看 rsync 服务端的 test.txt 文件是否也被删除
[[email protected] web]# ll total 16 drwx------. 2 root root 16384 Sep 8 11:32 lost+found
说明:
从上面测试得知,使用 rsync + innotify 实现两台服务器的论坛程序共享已经成功。
3、由于没有做策略,当用户上传附件时候,把它定向到某台特定的discuz!服务器。
所以,做周期性任务计划,定时从rsync 服务器端拉取数据到本地,实现无论用户上传附件到哪台服务器。都可以实现附件共享。
[[email protected] ~]# crontab -e crontab: installing new crontab */1 * * * * /usr/bin/rsync -aptgoz 192.168.60.99::web /web
使用 rsync 客户端,向rsync发出数据同步请求的方式:拉取数据到本地和推送数据到rsync导出的存储空间。
从而实现,无论用户访问 Discuz 时被 lvs 分发到哪台主机都可有下载用户上传的附件。
三、部署 Discuz! 论坛程序.
1、在 real2.9527du.com(192.168.60.40) 部署 Discuz! 论坛程序.
也就是在 rsync客户端部署 Discuz! 论坛程序,会自动通过 rsync的数据同步服务,同步到另一台Discuz 服务器上。
(1)、创建部署论坛程序的目录
[[email protected] /]# cd web/ [[email protected] /web]# mkdir html
(2)、修改 httpd 的配置文件,【DocumentRoot】定义的文档根目录为:/web/html
修改real2 主机的httpd配置文件
[[email protected] upload]# vim /etc/httpd-2.4.1/httpd.conf DocumentRoot "/web/html" <Directory "/web/html"> Options -Indexes -FollowSymLinks AllowOverride None Require all granted </Directory>
同样也修改 real1.9527du.com 的配置文件
[[email protected] web]# vim /etc/httpd-2.4.1/httpd.conf DocumentRoot "/web/html" <Directory "/web/html"> Options -Indexes -FollowSymLinks AllowOverride None Require all granted </Directory>
(3)、启动 httpd 服务
[[email protected] upload]# cd /usr/local/httpd-2.4.1/ [[email protected] httpd-2.4.1]# ./bin/apachectl restart
(4)、安装:
[[email protected] html]# unzip Discuz_X2.5_SC_GBK.zip
点击“我同意”
按要求修改上述目录的权限
填写连接数据库的信息
在该台服务器部署 Discuz!成功!
2、启动 rsync 服务, 把Discuz 论坛程序同步到另一台服务器(real1.9527du.com)。
(1)、启动rsync服务
[[email protected] web]# rsync --daemon --config=/etc/rsyncd.conf --ipv4 [[email protected] web]# netstat -anptl | grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2330/rsync
(2)、在rsyn客户端启动innotify监测脚本
[[email protected] ~]# ./inotify.sh & [1] 2561
(3)、查看数据是否同步过来
[[email protected] web]# ll html/ total 9312 -rw-r--r--. 1 root root 9522601 Aug 16 13:54 Discuz_X2.5_SC_GBK.zip drwxr-xr-x. 2 root root 4096 Oct 31 2012 readme drwxr-xr-x. 12 root root 4096 Oct 31 2012 upload drwxr-xr-x. 4 root root 4096 Oct 31 2012 utility
(4)、启动 real1.9527du.com 主要的http服务
[email protected] web]# cd /usr/local/httpd-2.4.1/ [[email protected] httpd-2.4.1]# ./bin/apachectl start
3、访问测试
访问另一台服务器,查看测试结果
在 192.168.60.44发贴,测试在另一台服务器是否看到
查看192.168.60.99服务器是否看到在192.168.60.40服务器上传的附件。
已经测试过,还能下载。
说明:
两台服务器部署 Discuz! 论坛程序已经成功!!!
四、配置基于 lvs 的 nat 模型负载均衡两台 Discuz! 服务器。
lvs 的nat 模型工作原理:
ipvs 捕获到访问的是集群服务时,通过调度算法计算该访问应该被调度到后端的那个 Real Server ,然后ipvs修改访问集群服务的数据报文的目标IP地址为选中的 Real Server,再把数据报文发送到 Real Server.
当 Real Server 构建完成响应了,数据报文的源IP是RIP,目标IP是CIP。互联网的数据报文路由是根据目标IP路由的,如果,该 Real Server 能够连接到外网,该数据报文是可以传输到CIP客户端的。但是客户端不会接收(因为客户端请求的是VIP)。所以,Real Server 响应客户端时,还应该把数据报文的源地址修改为VIP。
所以,RealServer 还应该把数据报文送给 Directory,由它根据nat目标地址转换会话表,把响应的数据报文的源地址修改为:VIP,再送给客户端。
为了配合 ipvs 完成上述过程,要解决以下问题:
(1)、Real Server 响应客户端时,发现自己访问的网络与自己不在同一网络,怎么把数据报文送给 Director?
通过默认网关。只要访问的网络是别的网络,都把数据报文送给网关。DIR做为 Real Server 的默认网关。
所以,还要求DIP与RIP在同一个网络中。
(2)、Real Server 把响应报文通过默认网关送达 Director 。数据报文经过 FORWARD 链,送达 POST_ROUTING 会根据nat会话表完成源地址的转换。
此时,Director 相当于工作在网络防火墙状态,要使用到系统的转发功能。所以要开启Linux的 ip_forward 功能。才可以把数据报文送达 POST_ROUTING链。
如下图:
1、在 real1 配置默认网关(DIP:192.168.60.1)。
[[email protected] ~]# route add default gw 192.168.60.1 [[email protected] ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.60.1 0.0.0.0 UG 0 0 0 eth1 192.168.60.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
2、在 real2 配置默认网关(DIP:192.168.60.1)
[[email protected] ~]# route add default gw 192.168.60.1 [[email protected] ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.60.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.60.1 0.0.0.0 UG 0 0 0 eth0
3、配置 lvs 规则。
开启数据报文转发功能
[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
定义集群服务,使用lvs的持久连接功能。
[[email protected] ~]# ipvsadm -A -t 172.16.60.22:80 -s wlc -p 30
定义集群服务的 Real Server
[[email protected] ~]# ipvsadm -a -t 172.16.60.22:80 -r 192.168.60.40 -m -w 1 [[email protected] ~]# ipvsadm -a -t 172.16.60.22:80 -r 192.168.60.99 -m -w 1
查看lvs规则
[[email protected] ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.16.60.22:80 rr -> 192.168.60.99:80 Masq 1 0 0 -> 192.168.60.40:80 Masq 1 0 0
4、访问测试:
不断刷新之后。。。
到此为止,LVS负载均衡两台: Discuz! 已经成功!!!!