LVS基于DR模型实现简单负载均衡集群和持久连接

本文实现在RS1上安装DISCUZ论坛,通过数据同步将RS1上数据目录下的内容推送到RS2,两台服务器提供同一个论坛服务,并实现数据同步,同时RS1与RS2都可同时提供http和https服务,Director上设置规则实现持久连接
基于LVS-DR模型部署discuz,实验环境设计
Direcor:

  • DIP: eth0:10.33.1.129
  • VIP: eth0:0:10.33.1.120

RealServer:

  • RS1:10.33.1.157
  • RS2:10.33.1.139

MySQL Server:10.33.1.117
RealServer与MySQL三台服务器的OS为Rhel6,环境都已经搭建好并可以正常提供服务,HTTP,PHP,MySQL均为编译安装,详细配置过程可参见LAMP中相关博文,这里不再赘述。
LVS基于DR模型实现简单负载均衡集群和持久连接_第1张图片
在 RS2:10.33.1.157部署DISCUZ论坛前,在MySQL服务器上先创建数据库用户,并授予相应权限
LVS基于DR模型实现简单负载均衡集群和持久连接_第2张图片
安装论坛进行创建数据库时,数据库服务器名设置为数据库服务器IP,数据库名,用户名和密码与刚才在数据库服务器上创建数据库名,用户名和密码要保持一致,DISCUZ安装完成后即可进行实现数据同步相关的设置
LVS基于DR模型实现简单负载均衡集群和持久连接_第3张图片
Inotify&Sersync
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,它满足各种各样的文件监控需要,不仅限于安全和性能。linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
Sersync使用 Inotify 监控操作系统对磁盘的操作事件,通过接收到的事件生成带特定参数的rsync命令行并执行,从而达到实时增量同步的目的。

Rsync+Inotify-tools与Rsync+sersync两种架构的区别
1、Rsync+Inotify-tools

  • Inotify-tools只能记录下被监听的目录发生了变化(包括增加、删除、修改),并没有记录发生了变化的具体文件或者目录;
  • rsync并不知道具体发生了变化的文件或者目录,每次要对整个目录遍历查找,对比文件进行同步,当数据量很大时,效率很低。

2、Rsync+sersync

  • sersync是使用c++编写,基于boost1.43.0,inotify api,rsynccommand开发,类似于Inotify-tools的工具,主要用于服务器同步,web镜像等功能。其对linux系统文件系统产生的临时文件和重复的文件操作能够进行过滤,可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快,更适合线上使用。
  • rsync在同步的时候,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,因此,效率很高。

3、小结:当同步的目录数据量不大时,建议使用Rsync+Inotify-tools;当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync。

选用Rsync+sersync架构,实现将sersync推送端/usr/local/apache/htdocs/下的数据实时同步到rsync接收端/usr/local/apache/htdocs/目录下,设置rsync服务器为sersync的镜像服务器
当前版本的sersync依赖于rsync进行同步。如下图所示,在主服务器上运行sersync服务,将监控路径中的文件推送到目标服务器,用于接收文件的服务器(目标服务器)则运行rsync守护进程,主服务器上文件的变化会被sersync实时同步到多个目标服务器。在Rhel6系统下默认已经安装了rsync,只需进行配置,并开启rsync守候进程即可。
LVS基于DR模型实现简单负载均衡集群和持久连接_第4张图片
在使用sersync之前,必须安装配置好目标服务器RS2 (接收端)的rsync
1.关闭selinux和防火墙:
这里写图片描述
2.查询rsync客户端是否安装,如果没有可以使用yum安装或者源码编译
这里写图片描述
这里写图片描述
安装xinetd

[root@RS2 ~]# yum install xinetd

3.编辑配置文件 /etc/xinetd.d/rsync设置disable=no 启动rsync服务
注:服务的提供总是需要进程的运行,rsync没有stand alone daemon,而是由xinetd这个super daemon来管理的(没有客户端请求时,rsync处于未启动状态,等到有来自客户端的请求时,xinetd才会唤醒rsync这个服务,当客户端请求结束,被唤醒的rsync也会关闭并释放资源)详细介绍请查阅daemon与serveice相关内容
这里写图片描述
这里写图片描述
手动添加配置文件
uid&gid#服务器端传输文件时,要指定用户和用户组来执行,默认是nobody。 如果用nobody 用户和用户组,可能遇到权限问题,为了方便,用了root 。可以在定义同步目录的模块中指定用户来解决权限的问题。
use chroot = yes #用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,可以保护系统。但是是需要root权限。另外会排除符号链接文件的同步,只会把符号链接名同步下来,并不会同步符号链接的内容。修改为no,增加对目录文件软连接的备份
hosts allow #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
LVS基于DR模型实现简单负载均衡集群和持久连接_第5张图片
模块定义:定义服务器哪个目录要被同步。每个模块都要以[name]形式。这个名字就是在rsync 客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过path 指定的。可以根据自己的需要来指定多个模块。每个模块要指定认证用户,密码文件、但排除并不是必须的
[DISCUZ] # rsync模块名,后面配置sersync会用到
path = /usr/local/apache/htdocs/ # 该同步目录只要uid所指定的用户有写权限即可
secrets file = /etc/rsync.pass # 密码认证文件,必须为600权限,否则rsync传输会报错
auth users = root #认证用户是必须在服务器上存在的用户
list #不显示rsync服务端资源列表
4.创建认证密码文件
LVS基于DR模型实现简单负载均衡集群和持久连接_第6张图片
在RS1(推送端)上安装Sersync工具,实时触发rsync进行同步
1.查看内核是否支持inotify:Linux支持inotify最小内核为2.6.13
这里写图片描述
2.查看系统默认参数值可根据实际情况做相应修改:
LVS基于DR模型实现简单负载均衡集群和持久连接_第7张图片
参数说明:
max_queued_events:最大队列长度,如果值太小,会出现”* Event Queue Overflow *“错误,导致监控文件不准确
max_user_watches:要同步的文件包含目录个数,可以先统计在设置,必须保证max_user_watches值大于统计结果

[root@RS1 ~]# find /usr/local/apache/htdocs/ -type d |wc -l
324

max_user_instances:每个用户创建inotify实例最大值
以上参数可根据实际情况使用sysctl -w命令调整对应值的大小或者在/etc/sysctl.conf中添加相应内容

[root@RS1 ~]# sysctl -w fs.inotify.max_queued_events="99999999"
fs.inotify.max_queued_events = 99999999
[root@RS1 ~]# sysctl -w fs.inotify.max_user_watches="99999999"
fs.inotify.max_user_watches = 99999999
[root@RS1 ~]# sysctl -w fs.inotify.max_user_instances="65535"
fs.inotify.max_user_instances = 65535

3.安装配置sersync
LVS基于DR模型实现简单负载均衡集群和持久连接_第8张图片
4.Vim confxml.xml 修改相应内容:
LVS基于DR模型实现简单负载均衡集群和持久连接_第9张图片
参数说明:
watch=”/usr/local/apache/htdocs/” 主服务器同步目录:
Remote ip=”10.33.1.139” name=”DISCUZ” 分别是:目标服务器IP和目标服务器rsync同步目录模块名称
users=”root” passwordfile=”/etc/rsync.pass” 目标服务器rsync同步用户的用户名和密码在主服务器的存放文件。
start=”true” schedule=”600” 设置TRUE ,每隔600分周公执行一次全盘同步。
5.创建连接rsync的密码文件
这里写图片描述
6.设置sersync监控开机自动执行:
这里写图片描述
7.在RS1上启动sersync同步数据目录下的文件
如果需要将待同步数据目录下文件或目录全部同步到远程,要以-r参数运行sersync,将本地与远程整体同步一次。
如果设置了过滤器,即在.xml文件中,filter为true,-r参数将会无效,则暂时不能使用-r参数进行整体同步。
使用-o参数指定配置文件。
LVS基于DR模型实现简单负载均衡集群和持久连接_第10张图片
在RS2上查看数据文件成功同步
LVS基于DR模型实现简单负载均衡集群和持久连接_第11张图片
8.添加脚本监控sersync是否正常运行:
LVS基于DR模型实现简单负载均衡集群和持久连接_第12张图片
9.设置自动任务
这里写图片描述
配置RS1,RS2为https,http同时支持的web服务,RS1,RS2使用同一个证书(相关https配置的详细过程见LAMP中内容)
LVS基于DR模型实现简单负载均衡集群和持久连接_第13张图片
这里要说明的是两台RS1与RS2配置虚拟主机支持使用fcgi,相应的在ssl.conf配置文件中也要添加
ProxyRequests Off和ProxyPassMatch两项设置,否则浏览器无法解析PHP页面
RS1与RS2hpptd服务配置相同
[root@RS1 ~]# vim /etc/httpd/extra/httpd-vhosts.conf
LVS基于DR模型实现简单负载均衡集群和持久连接_第14张图片
[root@RS1 ~]# vim /etc/httpd/extra/httpd-ssl.conf
LVS基于DR模型实现简单负载均衡集群和持久连接_第15张图片
LVS基于DR模型实现简单负载均衡集群和持久连接_第16张图片
LVS基于DR模型实现简单负载均衡集群和持久连接_第17张图片
一切准备就绪,使用持久连接机制将对80和443的访问始终定向为同一个RealServer
在Director即10.33.1.129编辑脚本并执行
27,28行通过对80端口和443端口做一个防火墙标记来实现让这两个不同的端口当做同一个集群服务
LVS基于DR模型实现简单负载均衡集群和持久连接_第18张图片
LVS基于DR模型实现简单负载均衡集群和持久连接_第19张图片
LVS基于DR模型实现简单负载均衡集群和持久连接_第20张图片
在RS1,RS2上编辑脚本并执行
LVS基于DR模型实现简单负载均衡集群和持久连接_第21张图片
LVS基于DR模型实现简单负载均衡集群和持久连接_第22张图片
这里写图片描述
这里写图片描述
物理机访问10.33.1.120,在基于ssl访问10.33.1.120,在Director查看连接状态
这里写图片描述

你可能感兴趣的:(Cluster)