简单的网站架构设计方案 推荐
2012-08-23 20:36
671 查看
最近一直在找工作,好久都没有更新博客了。希望从这篇博客开始,自己继续以培训时的热情和动力去学习新的知识与技术;也希望自己从不自信和自卑中走出来,以自信饱满的姿态迎接以后的生活。同时也警示自己——快点找到工作吧,不然该饿肚子了。
这篇博客就是上篇博客中提到的夭折了的我的第一份毕业实训报告,为了以后能快速的找到就放在这里吧!和绝大多数计算机专业的毕业报告一样,前面的内容都是借鉴网上和其他人的毕业报告拼凑起来的,实在没什么营养,这里就略过了。下面所写的都是经过试验做出来的,然后写出来的,可靠性还是有保证的。废话不多说了,开始吧!
简单说明:
本网站架构设计方案采用LVS+Hearbeat实现Web集群的负载均衡和高可用;LNAMP架构提供Web服务;rsync+inotify实现数据的同步。
参考文献:高俊峰老师的《高性能Linux服务器构建实战》
操作系统:RHEL5.4——32位
第一部分 网站架构设计
1.1 网站架构设计
本网站大致使用了三个层次:第一层:LVS+Heartbeat的Director服务器,来实现负载均衡能力;第二层:提供Web服务的服务器,用来提供用户真正访问的服务;第三层:MySQL数据库层,提供数据的存储与查询,这里仅对MySQL服务器做主从设置,未采用高可用集群技术,因为没有用到共享存储,不过在实际应用环境中,是很有必要对MySQL做高可用的。
1.1.1 规划图
图1-1 逻辑示意图
IP命名规则:
1.1.2 IP地址规划
IP地址规划如表1-1所示:
主机命名规范,如表1-2所示
第二部分 实现与测试
本部分将按上面分的层次分别实现,并对其进行必要的测试。网站的构建采用的是Linux操作系统,为什么采用Linux系统作为服务器的理由就不多说了,你懂的。我们采用的是RedHat发行版的Linux----RHEL5.4系统上构建。
2.1 MySQL数据库
注:MySQL从服务器的MySQL数据库版本必须与主服务器的版本相同或更新,因为软件一般都是向下兼容的,如果主服务器的版本比从服务器的高,可能某些特性无法使从服务器识别,从而导致数据的不一致现象,这种事情是不应该也不允许发生的。
2.1.1 MySQL的安装与配置
Master MySQL Server and Slave MySQL Server的安装与配置相同。
参见我的另一篇博客:架设LAMP平台的WEB服务器第二小节MySQL的安装。
2.1.2 MySQL主从配置
1、主MySQL服务器配置
1)、登陆MySQL数据库,为从服务器创建用户账户:
复制需要REPLICATION CLIENT权限;监视和管理复制需要REPLICATION SLAVE权限。
2)、查看下二进制日志的信息:
2、从MySQL服务器配置
1)、编辑/etc/my.cnf配置文件
注:从服务器的server-id的值必须不能与主服务器的相同。
2)、登陆MySQL数据库,执行下列命令
2.1.3 MySQL的测试与验证
1)、在从服务器上使用下面命令查看状态信息:
图2-1 从服务器状态图
如图,如果Slave_IO_Running与Slave_SQL_Running状态为Yes,说明MySQL主从服务器配置正常
2)、测试数据是否可以同步
首先,在主服务器上创建一个数据库,如图2-2所示
图2-2 主服务器创建数据库
从服务器上查看数据库信息,如图2-3所示
图2-3 从服务器数据库信息
从图2-1、图2-2以及图2-3可以看出MySQL主从服务器配置成功,且能实现数据同步,至此,MySQL主从服务器配置宣告结束。至于其它配置,等需要到时候会有所提及。
2.2 RealServer的实现
RealServer即真正提供服务的服务器,也就是真正意义上的Web Server。这里Web Server采用LNAMP架构构建,并采用rsync+inotify的机制实现Web页面的同步。需要注意的是我们将MySQL服务单独分离出去,所以,在RealServer上不提供MySQL服务。
2.2.1 Apache的安装与配置
2.2.2 PHP的安装与配置
这两部分同样参见我的另一篇博客:架设LAMP平台的WEB服务器第一小节Apache的安装和第三小节PHP的安装
2.2.3 PHP的测试与验证
1)、测试数据库的连通性
修改/usr/local/httpd/htdocs/index.php文件
在Master MySQL Server 和Slave MySQL Server为两台Realserver创建授权用户。由于命令相同,所以仅给出在Master MySQL Server授权的命令。
通过浏览器分别对其访问,如图2-4,访问Realserver1。图2-5,访问Realserver2
图2-4
图2-5
从测试结果说明数据库连接正常。
2.2.4 Nginx
1、编译安装Nginx
1)、首先为nginx添加用户,实现以这个用户的身份来安全的运行nginx服务进程:
2)、执行下列命令
2、配置Nginx
为nginx提供SysV服务脚本/etc/rc.d/init.d/nginx,这样使我们可以使用service命令进行对其进行操作,因为在编译安装nginx的时候,默认是不提供这个服务脚本的。我们需要手动添加,脚本参见另一篇博客:RHEL5.4下实现LNMP中配置Nginx。
然后执行下列命令:
2.2.5 Nginx的测试与验证
通过浏览器分别访问Realserver1和Realserver2的Web服务,结果如图2-6,图2-7所示
图2-6 访问Realserver1
图2-7 访问Realserver2
从测试结果可以看出nginx工作正常。
2.2.6 Nginx的反向代理与缓存配置
这里将所有的动态请求转给Apache进行处理,静态页面直接通过Nginx进行响应。
1、编辑Nginx的配置文件/etc/nginx/nginx.conf,如没有特殊说明,则表示Realserver1和Realserver2的配置是一样的。
保存退出,创建缓存目录:
2.2.7 Nginx的反向代理与缓存的验证
1)、验证代理功能
查看分别查看Nginx和Apache的网页存放位置下有哪儿些文件。如图2-8所示
图2-8
通过浏览器访问Web页面,如图2-9所示
图2-9 Web访问页面
从图中可以看出通过浏览器访问Realserver1的动态请求转发给Apache处理,并返回结果。而静态请求直接从Nginx返回。由此可以验证反向代理功能已经正常工作。
2)、验证缓存功能
查看/var/nginx/cache缓存目录下是否有缓存文件存在,如图2-10所示
图2-10
由图中结果,可以看出,缓存已经生效。Realserver2的验证不再给出。
2.3 rsync+inotify实现数据同步
为了方便管理与维护,将Nginx与Apache的Web页面放置在/var/www目录下。具体配置不再给出。
2.3.1 安装rsync与inotify-tools
inotify-tools是用来监控文件系统变化的工具,因此必须安装在内容发布节点,服务节点无需安装inotify-tools,另外需要在Realserver1和Realserver2节点上安装rsync。在这个案例中,内容发布节点充当了rsync客户端的角色,而服务节点充当了rsync服务器端的角色,整个数据同步的过程,其实就是一个从客户端向服务端推送数据的过程。这里讲Realserver1配置为内容分发节点,Realserver2为服务节点。编译安装rsync
编译安装inotify-tools
2.3.2 Realserver2服务节点的rsync配置文件的配置
这个配置文件默认是没有的,需要手动创建。
创建认证文件
2.3.3 Realserver1上的配置
编写一个脚本来将文件同步到Realserver2上的/var/www目录中。脚本如下:
创建相应的认证文件
2.3.4 文件同步验证
在Realserver1的/var/www目录下创建一个文件,如图2-11
图2-11
从图中可以看出文件正在传输,我们再来看Realserver2的/var/www目录,如图2-12
图2-12
在Realserver2上已经同步到了相应的文件,由此可以看出,rsync+inotify配置成功。
2.4 LVS负载均衡的安装与配置
LVS是通过IPVS模块来实现的。IPVS是LVS集群系统的核心软件,主要用于完成用户的请求到达负载调度器后,如何将请求发送给每一个Realserver节点、Realserver节点如何响应数据给用户等。这里采用的是DR模型。
在配置之前,首先应该查看内核是否支持IPVS模块
如果有上面这些信息输出,表明内核支持IPVS模块。接下来就可以安装IPVS管理软件,并进行集群配置了。
2.4.1 安装ipvsadm管理软件
这里采用yum方式安装,yum源的配置上面已经给出,这里直接安装。
2.4.2 两台Director建立双机互信
1)、Master Director的配置生成一对密钥:(私钥).ssh/id_rsa,.ssh/id_rsa.pub
把公钥.ssh/id_rsa.pub复制到Slave Director的root用户的家目录下的.ssh目录中的authorized_keys文件中去
2)、Slave Director的配置
生成一对密钥:(私钥).ssh/id_rsa,.ssh/id_rsa.pub
把公钥.ssh/id_rsa.pub复制到Master Director的root用户的家目录下的.ssh目录中的authorized_keys文件中去
2.4.3 安装Heartbeat2.1.3
Heartbeat的安装需要安装libnet软件包,所以先编译安装libnet。Libnet是一个高层次的API工具,可以从http://sourceforge.net/projects/libnet-dev/下载。
1)、安装libnet
2)、安装heartbeat
为了保证ldirectord插件可用,需要安装perl-MailTools的rpm包
2.4.4 配置集群服务
1、配置heartbeat的主配置文件/etc/ha.d/ha.cf
将下面列出的字段启用或做相应更改:
2、配置heartbeat的资源文件/etc/ha.d/haresources
Haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源。文件每一行可以包含一个活多个资源脚本名,资源脚本名之间用空格隔开,参数之间使用两个冒号隔开。
3、配置heartbeat的认证文件/etc/ha.d/authkeys
Authkeys文件用于设定heartbeat的认证方式,该文件有3种可用的认证方式:crc、sha1和md5,这里使用sha1认证方式。设置如下:
而且这个文件的权限必须是600,所以执行下列命令:
4、配置Ldirectord的配置文件/etc/ha.d/ldirectord.cf
将相关选项修改为下面内容
5、将上面修改的配置文件复制到Slave Director上
6、Realserver上的配置
在LVS的DR模型下,用户的访问请求到达Realserver后,是直接返回给用户的,不再经过前端的Director Server,因此,需要在每个Realserver节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。增加VIP的操作可以通过创建脚本的方式来实现。创建文件/etc/init.d/lvsrs.脚本内容如下:
并在nginx的页面目录下创建.test.html文件
3.4.5 LVS的负载均衡的验证
1)、通过浏览器访问192.168.1.100,结果如图2-13所示
图2-13
查看集群资源,如图2-14所示
图2-14
查看虚拟IP,如图2-15所示
图2-15
从上面的内容可以看出配置的集群已经正常工作了。所有配置工作完成。
这篇博客就是上篇博客中提到的夭折了的我的第一份毕业实训报告,为了以后能快速的找到就放在这里吧!和绝大多数计算机专业的毕业报告一样,前面的内容都是借鉴网上和其他人的毕业报告拼凑起来的,实在没什么营养,这里就略过了。下面所写的都是经过试验做出来的,然后写出来的,可靠性还是有保证的。废话不多说了,开始吧!
简单说明:
本网站架构设计方案采用LVS+Hearbeat实现Web集群的负载均衡和高可用;LNAMP架构提供Web服务;rsync+inotify实现数据的同步。
参考文献:高俊峰老师的《高性能Linux服务器构建实战》
操作系统:RHEL5.4——32位
第一部分 网站架构设计
1.1 网站架构设计
本网站大致使用了三个层次:第一层:LVS+Heartbeat的Director服务器,来实现负载均衡能力;第二层:提供Web服务的服务器,用来提供用户真正访问的服务;第三层:MySQL数据库层,提供数据的存储与查询,这里仅对MySQL服务器做主从设置,未采用高可用集群技术,因为没有用到共享存储,不过在实际应用环境中,是很有必要对MySQL做高可用的。
1.1.1 规划图
图1-1 逻辑示意图
IP命名规则:
DIP:配置在Director网卡上用来与后方RealServer通信的IP地址; VIP:配置在Director网卡别名上用来提供服务的公有IP地址; RIP:配置在RealServer上,用来与Director和其它服务器通信的IP地址;
1.1.2 IP地址规划
IP地址规划如表1-1所示:
服务器 | IP | 说明 |
Master Director | DIP:192.168.1.11 | 与后端Realserver通信 |
Master Director | VIP:192.168.1.100 | 提供服务的网络地址 |
Master Director | eth1:10.10.10.1 | 用于与Slave Director传递心跳信息 |
Slave Director | DIP:192.168.1.12 | 与后端Realserver通信 |
Slave Director | eth1:10.10.10.2 | 用于与Master Director传递心跳信息 |
RealServer 1 | RIP:192.168.1.21 | 与前端Director通信 |
RealServer 1 | VIP:192.168.1.100 | 用来直接响应客户端的请求 |
RealServer 2 | RIP:192.168.1.22 | 与前端Director通信 |
RealServer 2 | VIP:192.168.1.100 | 用来直接响应客户端的请求 |
Master MySQL | 192.168.1.23 | |
Slave MySQL | 192.168.1.24 |
Server | Hostname |
Master Director | node1.rrl.com |
Slave Director | node2.rrl.com |
RealServer 1 | r1.rrl.com |
RealServer 2 | r2.rrl.com |
Master MySQL | master.mysql.com |
Slave MySQL | slave.mysql.com |
本部分将按上面分的层次分别实现,并对其进行必要的测试。网站的构建采用的是Linux操作系统,为什么采用Linux系统作为服务器的理由就不多说了,你懂的。我们采用的是RedHat发行版的Linux----RHEL5.4系统上构建。
2.1 MySQL数据库
注:MySQL从服务器的MySQL数据库版本必须与主服务器的版本相同或更新,因为软件一般都是向下兼容的,如果主服务器的版本比从服务器的高,可能某些特性无法使从服务器识别,从而导致数据的不一致现象,这种事情是不应该也不允许发生的。
2.1.1 MySQL的安装与配置
Master MySQL Server and Slave MySQL Server的安装与配置相同。
参见我的另一篇博客:架设LAMP平台的WEB服务器第二小节MySQL的安装。
2.1.2 MySQL主从配置
1、主MySQL服务器配置
1)、登陆MySQL数据库,为从服务器创建用户账户:
mysql>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO replay@’192.168.1.24’ IDENTIFIED BY '123456'; mysql>FLUSH PRIVILEGES; mysql>FLUSH MASTER;
复制需要REPLICATION CLIENT权限;监视和管理复制需要REPLICATION SLAVE权限。
2)、查看下二进制日志的信息:
mysql> SHOW MASTER STATUS; +------------------+--------+--------------+------------------+ | File |Position| Binlog_Do_DB | Binlog_Ignore_DB | +------------------+--------+--------------+------------------+ | mysql-bin.000003 | 107 | | | +------------------+--------+--------------+------------------+ 1 row in set (0.00 sec)
2、从MySQL服务器配置
1)、编辑/etc/my.cnf配置文件
#log_bin = mysql-bin #关闭二进制日志 server-id = 10 relayrelay_log = relay-bin #开启中继日志
注:从服务器的server-id的值必须不能与主服务器的相同。
2)、登陆MySQL数据库,执行下列命令
mysql> CHANGE MASTER TO -> MASTER_HOST='192.168.1.23', -> MASTER_USER='replay', -> MASTER_PASSWORD='123456', mysql>FLUSH SLAVE; mysql>START SLAVE;
2.1.3 MySQL的测试与验证
1)、在从服务器上使用下面命令查看状态信息:
mysql>SHOW SLAVE STATUS\G
图2-1 从服务器状态图
如图,如果Slave_IO_Running与Slave_SQL_Running状态为Yes,说明MySQL主从服务器配置正常
2)、测试数据是否可以同步
首先,在主服务器上创建一个数据库,如图2-2所示
图2-2 主服务器创建数据库
从服务器上查看数据库信息,如图2-3所示
图2-3 从服务器数据库信息
从图2-1、图2-2以及图2-3可以看出MySQL主从服务器配置成功,且能实现数据同步,至此,MySQL主从服务器配置宣告结束。至于其它配置,等需要到时候会有所提及。
2.2 RealServer的实现
RealServer即真正提供服务的服务器,也就是真正意义上的Web Server。这里Web Server采用LNAMP架构构建,并采用rsync+inotify的机制实现Web页面的同步。需要注意的是我们将MySQL服务单独分离出去,所以,在RealServer上不提供MySQL服务。
2.2.1 Apache的安装与配置
2.2.2 PHP的安装与配置
这两部分同样参见我的另一篇博客:架设LAMP平台的WEB服务器第一小节Apache的安装和第三小节PHP的安装
2.2.3 PHP的测试与验证
1)、测试数据库的连通性
修改/usr/local/httpd/htdocs/index.php文件
[root@r1 ~]#vim index.php <?php $link=mysql_connect(‘192.168.1.23’,’root’,’123456’); if ($link) echo “Successful”; else echo “Failure”; mysql_close(); ?>
在Master MySQL Server 和Slave MySQL Server为两台Realserver创建授权用户。由于命令相同,所以仅给出在Master MySQL Server授权的命令。
[root@master ~]#mysql -uroot -p123456 mysql>GRANT ALL PRIVILEGES ON *.* TO root@’192.168.1.21’ IDENTIFIED BY ‘123456’ mysql>GRANT ALL PRIVILEGES ON *.* TO root@’192.168.1.22’ IDENTIFIED BY ‘123456’
通过浏览器分别对其访问,如图2-4,访问Realserver1。图2-5,访问Realserver2
图2-4
图2-5
从测试结果说明数据库连接正常。
2.2.4 Nginx
1、编译安装Nginx
1)、首先为nginx添加用户,实现以这个用户的身份来安全的运行nginx服务进程:
[root@r1 ~]#groupadd -r nginx [root@r1 ~]#useradd -r -g nginx -s /sbin/nologin -M nginx
2)、执行下列命令
[root@r1 ~]#tar xf nginx-1.0.13.tar.gz [root@r1 ~]#cd nginx-1.0.13 [root@r1 nginx-1.0.13]#./configure --prefix=/usr/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock \ --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module \ --with-http_stub_status_module --with-http_gzip_static_module \ --http-client-body-temp-path=/var/tmp/nginx/client/ 、 --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ 、 --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre [root@r1 nginx-1.0.13]#make && make install
2、配置Nginx
为nginx提供SysV服务脚本/etc/rc.d/init.d/nginx,这样使我们可以使用service命令进行对其进行操作,因为在编译安装nginx的时候,默认是不提供这个服务脚本的。我们需要手动添加,脚本参见另一篇博客:RHEL5.4下实现LNMP中配置Nginx。
然后执行下列命令:
[root@r1 ~]#chmod +x /etc/rc.d/init.d/nginx [root@r1 ~]#chkconfig --add nginx [root@r1 ~]#chkconfig nginx on #设置为开机启动 [root@r1 ~]#service nginx start
2.2.5 Nginx的测试与验证
通过浏览器分别访问Realserver1和Realserver2的Web服务,结果如图2-6,图2-7所示
图2-6 访问Realserver1
图2-7 访问Realserver2
从测试结果可以看出nginx工作正常。
2.2.6 Nginx的反向代理与缓存配置
这里将所有的动态请求转给Apache进行处理,静态页面直接通过Nginx进行响应。
1、编辑Nginx的配置文件/etc/nginx/nginx.conf,如没有特殊说明,则表示Realserver1和Realserver2的配置是一样的。
[root@r1 ~]#vim /etc/nginx/nginx.conf 在http容器下,server容器外添加如下内容: proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g; 修改server容器中的server_name 字段 Realserver1的修改为:server_name r1.rrl.com; Realserver2的修改为:server_name r2.rrl.com; 在server容器中添加如下内容: location ~ \.php?$ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_cache STATIC; proxy_cache_valid 200 1d; proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; } location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; }
保存退出,创建缓存目录:
[root@r1 ~]#mkdir /var/nginx/cache –pv [root@r1 ~]#chown –R nginx.nginx /var/nginx/cache [root@r1 ~]#service nginx configtest #检查配置文件是否有语法错误 [root@r1 ~]#service nginx restart #重启nginx服务
2.2.7 Nginx的反向代理与缓存的验证
1)、验证代理功能
查看分别查看Nginx和Apache的网页存放位置下有哪儿些文件。如图2-8所示
图2-8
通过浏览器访问Web页面,如图2-9所示
图2-9 Web访问页面
从图中可以看出通过浏览器访问Realserver1的动态请求转发给Apache处理,并返回结果。而静态请求直接从Nginx返回。由此可以验证反向代理功能已经正常工作。
2)、验证缓存功能
查看/var/nginx/cache缓存目录下是否有缓存文件存在,如图2-10所示
图2-10
由图中结果,可以看出,缓存已经生效。Realserver2的验证不再给出。
2.3 rsync+inotify实现数据同步
为了方便管理与维护,将Nginx与Apache的Web页面放置在/var/www目录下。具体配置不再给出。
2.3.1 安装rsync与inotify-tools
inotify-tools是用来监控文件系统变化的工具,因此必须安装在内容发布节点,服务节点无需安装inotify-tools,另外需要在Realserver1和Realserver2节点上安装rsync。在这个案例中,内容发布节点充当了rsync客户端的角色,而服务节点充当了rsync服务器端的角色,整个数据同步的过程,其实就是一个从客户端向服务端推送数据的过程。这里讲Realserver1配置为内容分发节点,Realserver2为服务节点。编译安装rsync
[root@r1 ~]#tar xf rsync-3.0.4.tar.gz [root@r1 ~]#cd rsync-3.0.4 [root@r1 rsync-3.0.4]#./configure [root@r1 rsync-3.0.4]#make && make install
编译安装inotify-tools
[root@r1 ~]#tar xf inotify-tools-3.14.tar.gz [root@r1 ~]#cd inotify-tools-3.14 [root@r1 inotify-tools-3.14]#./configure [root@r1 inotify-tools-3.14]#make && make install
2.3.2 Realserver2服务节点的rsync配置文件的配置
这个配置文件默认是没有的,需要手动创建。
[root@r2 ~]# vim /etc/rsyncd.conf uid = nobody gid = nobody use chroot = no max connections = 10 strict modes = yes pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [web] path = /var/www/ comment = web file ignore errors read only = no write only = no hosts allow = 192.168.1.21 hosts deny = * list = false uid = root gid = root auth users = webuser secrets file = /etc/web.pass
创建认证文件
[root@r2 ~]# vim /etc/web.pass webuser:123456 [root@r2 ~]# chmod 600 /etc/web.pass [root@r2 ~]# /usr/local/bin/rsync –daemon [root@r2 ~]# echo "/usr/local/bin/rsync --daemon" >> /etc/rc.local
2.3.3 Realserver1上的配置
编写一个脚本来将文件同步到Realserver2上的/var/www目录中。脚本如下:
[root@r1 ~]# vim rsync.sh #!/bin/bash host=192.168.1.22 src=/var/www/ dst=web user=webuser /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read files do /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/web.pass $src $user@$host::$dst echo "${files} was rsynced" >> /tmp/rsync.log 2>&1 done
创建相应的认证文件
[root@r1 ~]# vim /etc/web.pass 123456 [root@r1 ~]# ./rsync.sh & [root@r1 ~]# echo "rsync.sh &" >> /etc/rc.local
2.3.4 文件同步验证
在Realserver1的/var/www目录下创建一个文件,如图2-11
图2-11
从图中可以看出文件正在传输,我们再来看Realserver2的/var/www目录,如图2-12
图2-12
在Realserver2上已经同步到了相应的文件,由此可以看出,rsync+inotify配置成功。
2.4 LVS负载均衡的安装与配置
LVS是通过IPVS模块来实现的。IPVS是LVS集群系统的核心软件,主要用于完成用户的请求到达负载调度器后,如何将请求发送给每一个Realserver节点、Realserver节点如何响应数据给用户等。这里采用的是DR模型。
在配置之前,首先应该查看内核是否支持IPVS模块
[root@node1 ~]# modprobe -l | grep ipvs /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs_dh.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs_ftp.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs_lblc.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs_lc.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs_nq.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs_rr.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs_sed.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs_sh.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs_wlc.ko /lib/modules/2.6.18-164.el5/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
如果有上面这些信息输出,表明内核支持IPVS模块。接下来就可以安装IPVS管理软件,并进行集群配置了。
2.4.1 安装ipvsadm管理软件
这里采用yum方式安装,yum源的配置上面已经给出,这里直接安装。
[root@node1 ~]# yum install ipvsadm -y
2.4.2 两台Director建立双机互信
1)、Master Director的配置生成一对密钥:(私钥).ssh/id_rsa,.ssh/id_rsa.pub
[root@node1 ~]# ssh-keygen -t rsa
把公钥.ssh/id_rsa.pub复制到Slave Director的root用户的家目录下的.ssh目录中的authorized_keys文件中去
[root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.12
2)、Slave Director的配置
生成一对密钥:(私钥).ssh/id_rsa,.ssh/id_rsa.pub
[root@node2 ~]# ssh-keygen -t rsa
把公钥.ssh/id_rsa.pub复制到Master Director的root用户的家目录下的.ssh目录中的authorized_keys文件中去
[root@node2 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.11
2.4.3 安装Heartbeat2.1.3
Heartbeat的安装需要安装libnet软件包,所以先编译安装libnet。Libnet是一个高层次的API工具,可以从http://sourceforge.net/projects/libnet-dev/下载。
1)、安装libnet
[root@node1 ~]# tar xf libnet-1.1.6.tar.gz [root@node1 ~]# cd libnet-1.1.6 [root@node1 libnet-1.1.6]# ./configure [root@node1 libnet-1.1.6]# make && make install
2)、安装heartbeat
[root@node1 ~]# tar xf heartbeat-2.1.3.tar.gz [root@node1 ~]# cd heartbeat-2.1.3 [root@node1 heartbeat-2.1.3]# ./ConfigureMe configure --disable-swig --disable-snmp-subagent [root@node1 heartbeat-2.1.3]#make [root@node1 heartbeat-2.1.3]#make install [root@node1 heartbeat-2.1.3]# cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/ [root@node1 heartbeat-2.1.3]# cp ldirectord/ldirectord.cf /etc/ha.d/ [root@node1 heartbeat-2.1.3]# groupadd -g 256 haclient [root@node1 heartbeat-2.1.3]# useradd -u 256 -g haclient hacluster
为了保证ldirectord插件可用,需要安装perl-MailTools的rpm包
[root@node1 ~]# yum localinstall perl-MailTools-1.77-1.el5.noarch.rpm --nogpgcheck -y
2.4.4 配置集群服务
1、配置heartbeat的主配置文件/etc/ha.d/ha.cf
将下面列出的字段启用或做相应更改:
logfile /var/log/ha-log keepalive 2 deadtime 30 warntime 10 initdead 120 udpport 694 bcast eth1 node node1.rrl.com node node2.rrl.com ping 192.168.1.1
2、配置heartbeat的资源文件/etc/ha.d/haresources
Haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源。文件每一行可以包含一个活多个资源脚本名,资源脚本名之间用空格隔开,参数之间使用两个冒号隔开。
node1.rrl.com IPaddr::192.168.1.100/24/eth0 ldirectord
3、配置heartbeat的认证文件/etc/ha.d/authkeys
Authkeys文件用于设定heartbeat的认证方式,该文件有3种可用的认证方式:crc、sha1和md5,这里使用sha1认证方式。设置如下:
#auth 1 #1 crc #2 sha1 HI! #3 md5 Hello! auth 1 1 sha1 f661f9b61ad0fdcbc2e20a5578ef089d
而且这个文件的权限必须是600,所以执行下列命令:
[root@node1 ~]#chmod 600 /etc/ha.d/authkeys
4、配置Ldirectord的配置文件/etc/ha.d/ldirectord.cf
将相关选项修改为下面内容
virtual=192.168.1.100:80 real=192.168.1.21:80 gate real=192.168.1.22:80 gate fallback=127.0.0.1:80 gate service=http request=".test.html" receive="OK" scheduler=rr #persistent=600 #netmask=255.255.255.255 protocol=tcp checktype=negotiate checkport=80
5、将上面修改的配置文件复制到Slave Director上
[root@node1 ~]# scp -p /etc/ha.d/haresources /etc/ha.d/ldirectord.cf /etc/ha.d/authkeys /etc/ha.d/ha.cf 192.168.1.12:/etc/ha.d/
6、Realserver上的配置
在LVS的DR模型下,用户的访问请求到达Realserver后,是直接返回给用户的,不再经过前端的Director Server,因此,需要在每个Realserver节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。增加VIP的操作可以通过创建脚本的方式来实现。创建文件/etc/init.d/lvsrs.脚本内容如下:
[root@r1 ~]# vim /etc/init.d/lvsrs #!/bin/bash # # Script to start LVS DR real server. # description: LVS DR real server # . /etc/rc.d/init.d/functions VIP=192.168.1.100 host=`/bin/hostname` case "$1" in start) # Start LVS-DR real server on this machine. /sbin/ifconfig lo down /sbin/ifconfig lo up echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev lo:0 ;; stop) # Stop LVS-DR real server loopback device(s). /sbin/ifconfig lo:0 down echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce ;; status) # Status of LVS-DR real server. islothere=`/sbin/ifconfig lo:0 | grep $VIP` isrothere=`netstat -rn | grep "lo:0" | grep $VIP` if [ ! "$islothere" -o ! "isrothere" ];then # Either the route or the lo:0 device # not found. echo "LVS-DR real server Stopped." else echo "LVS-DR real server Running." fi ;; *) # Invalid entry. echo "$0: Usage: $0 {start|status|stop}" exit 1 ;; esac
并在nginx的页面目录下创建.test.html文件
[root@r1 ~]# vim /usr/nginx/html/.test.html OK
3.4.5 LVS的负载均衡的验证
1)、通过浏览器访问192.168.1.100,结果如图2-13所示
图2-13
查看集群资源,如图2-14所示
图2-14
查看虚拟IP,如图2-15所示
图2-15
从上面的内容可以看出配置的集群已经正常工作了。所有配置工作完成。
相关文章推荐
- 可扩展、高可用、负载均衡网站架构设计方案
- 架构设计:系统存储(10)——MySQL简单主从方案及暴露的问题
- 可扩展、高可用、负载均衡网站架构设计方案
- 基于Java技术的大型网站架构设计方案
- 可扩展、高可用、负载均衡网站架构设计方案
- 可扩展、高可用、负载均衡网站架构设计方案
- 可扩展、高可用、负载均衡网站架构设计方案
- 可扩展、高可用、负载均衡网站架构设计方案
- 架构设计:系统存储(10)——MySQL简单主从方案及暴露的问题
- 架构设计:系统存储(10)——MySQL简单主从方案及暴露的问题
- 大型网站架构设计书籍推荐
- 可扩展、高可用、负载均衡网站架构设计方案
- 推荐:大型网站架构设计系列--某人的总结
- 淘宝客网站架构设计方案
- 简单的电子商务网站设计方案和功能介绍
- 可扩展、高可用、负载均衡网站架构设计方案
- 简单讨论火车票系统后面的架构设计 推荐
- 高并发网站架构设计方案
- 基于Java技术的大型网站架构设计方案