NFS共享MySQL使用DNS轮询实现Web负载均衡

NFS共享MySQL使用DNS轮询实现Web负载均衡


前言:

今天学习了NFS,遂结合前面学习的LAMP+Bind做一个实验,实现两台Web服务器采用同一个MySQL数据库和相同的网页文件,对LAMP和Bind不了解的可以去查看我以前写的博客: AnyISalIn的文章

实验拓扑图

blob.pngAlt text

实验环境

主机名 IP地址 实现
storage.anyisalin.com 192.168.2.5 NFS
ns.anyisalin.com 192.168.2.2 dns,MySQL
www.anyisalin.com 192.168.2.3 web
www.anyisalin.com 192.168.2.4 web

本文所有主机皆关闭SElinuxIPtables

实验步骤


搭建NFS

以下操作在storage.anyisalin.com中执行

[root@storage ~]# yum install nfs-utils | tail -n 10  #安装nfs-utils 这里已经安装过了
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Loading mirror speeds from cached hostfile
* base: mirrors.pubyun.com
* extras: mirrors.skyshe.cn
* updates: mirrors.pubyun.com
Package 1:nfs-utils-1.2.3-64.el6.x86_64 already installed and latest version
Nothing to do

创建文件夹并导出

[root@storage ~]# mkdir /var/mydata
[root@storage ~]# mkdir /var/webroot
[root@storage var]# cd /var/webroot/
[root@storage webroot]# unzip wordpress-4.4.1-zh_CN.zip &> /dev/null
[root@storage webroot]# ls
wordpress  wordpress-4.4.1-zh_CN.zip
[root@storage webroot]# chmod 777 wordpress -R
[root@storage ~]# vim /etc/exports
   /var/mydata   192.168.2.2(rw,no_root_squash)
   /var/webroot  192.168.2.3(rw,no_root_squash) 192.168.2.4(rw,no_root_squash)
[root@storage ~]# service rpcbind start && service nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]
[root@storage ~]# showmount -e localhost   #查看当前导出的目录
Export list for localhost:
/var/webroot 192.168.2.4,192.168.2.3
/var/mydata  192.168.2.2


搭建dns,MySQL环境

以下操作在ns.anyisalin.com中执行

DNS配置

[root@localhost ~]# yum install bind mysql-server -y | tail -n 10 #信息过长遂使用tail限制
 perl-DBD-MySQL.x86_64 0:4.013-3.el6                                          
 perl-DBI.x86_64 0:1.609-4.el6                                                
 perl-Module-Pluggable.x86_64 1:3.90-141.el6_7.1                              
 perl-Pod-Escapes.x86_64 1:1.04-141.el6_7.1                                    
 perl-Pod-Simple.x86_64 1:3.13-141.el6_7.1                                    
 perl-libs.x86_64 4:5.10.1-141.el6_7.1                                        
 perl-version.x86_64 3:0.77-141.el6_7.1                                        
 portreserve.x86_64 0:0.0.4-9.el6                                              

Complete!
[root@localhost ~]#

在/etc/named.rfc1912.zones文件中添加以下几行

zone "anyisalin.com" IN {
       type master;
       file "anyisalin.com.zone";
};


配置区域解析库文件为如下

vim /var/named/anyisalin.com.zone

$TTL 600
$ORIGIN anyisalin.com.
@   IN SOA  ns.anyisalin.com  amdin.anyisalin.com (
       20160328
       1D
       5M
       7D
       1D
)

       IN   NS  ns
ns      IN   A   192.168.2.2
www     IN   A   192.168.2.3
www     IN   A   192.168.2.4
storage IN   A   192.168.2.5

测试效果如下,以达到DNS实现轮询若水GIF截图_2016年3月28日21点41分17秒.gif

MySQL配置

这里MySQL数据库文件通过NFS保存在远程主机

[root@localhost ~]# mkdir /mydata
[root@localhost ~]# mount -t nfs 192.168.2.5:/var/mydata /mydata
[root@localhost ~]# cd /usr/src/
[root@localhost src]# ls
debug  kernels  mariadb-5.5.32-linux-x86_64.tar.gz
[root@localhost src]# tar xf mariadb-5.5.32-linux-x86_64.tar.gz
[root@localhost src]# cd mariadb-5.5.32-linux-x86_64
[root@localhost mariadb-5.5.32-linux-x86_64]# ls
bin  COPYING  COPYING.LESSER  data  docs  include  INSTALL-BINARY  lib  man  mysql-test  README  scripts  share  sql-bench  support-files
[root@localhost mariadb-5.5.32-linux-x86_64]# groupadd -r -g 3306 mysql
groupadd: group 'mysql' already exists
[root@localhost mariadb-5.5.32-linux-x86_64]# useradd -r -g mysql -s /sbin/nologin mysql
useradd: user 'mysql' already exists
[root@localhost mariadb-5.5.32-linux-x86_64]# ./scripts/mysql_install_db --datadir=/mydata --user=mysql  #初始化数据库
Installing MariaDB/MySQL system tables in '/mydata' ...
OK
Filling help tables...
OK
#内容省略

[root@localhost mariadb-5.5.32-linux-x86_64]# ls /mydata/  #查看生成的数据库
aria_log.00000001  aria_log_control  mysql  performance_schema  test

[root@localhost src]# ln -sv /usr/src/mariadb-5.5.32-linux-x86_64 /usr/local/mysql
`/usr/local/mysql' -> `/usr/src/mariadb-5.5.32-linux-x86_64'
[root@localhost mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld  
[root@localhost mysql]# cp support-files/my-large.cnf /etc/my.cnf
[root@localhost mysql]# vim /etc/my.cnf  #添加以下三行
datadir = /mydata
skip_name_resolve = on
innodb_file_per_table = on
[root@localhost mysql]# export PATH=/usr/local/mysql/bin/:$PATH

[root@localhost mysql]# service mysqld start    #测试MySQL是否能正常启动
Starting MySQL... SUCCESS!
[root@localhost mysql]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.32-MariaDB-log MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> GRANT ALL ON wp.* TO 'wpuser'@'%' IDENTIFIED  BY 'passwd';
Query OK, 0 rows affected (0.04 sec)

mysql> CREATE DATABASE wp;
Query OK, 1 row affected (0.02 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)


WEB配置

第一台主机安装
以下操作在www.anyisalin.com(192.168.2.3)中执行
[root@localhost ~]# yum install httpd php php-mysql -y | tail -n 10
 apr-util.x86_64 0:1.3.9-3.el6_0.1                                            
 apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1                                        
 httpd-tools.x86_64 0:2.2.15-45.el6.centos                                    
 libedit.x86_64 0:2.11-4.20080712cvs.1.el6                                    
 mailcap.noarch 0:2.1.31-2.el6                                                
 php-cli.x86_64 0:5.3.3-40.el6_6                                              
 php-common.x86_64 0:5.3.3-40.el6_6                                            
 php-pdo.x86_64 0:5.3.3-40.el6_6                                              

Complete!
[root@localhost ~]# vi /etc/httpd/conf.d/virt.conf  #编辑配置文件

NameVirtualHost 192.168.2.3:80
NameVirtualHost 192.168.2.3:80
<VirtualHost 192.168.2.3:80>
  ServerName www.anyisalin.com
  DocumentRoot /webroot/wordpress
</VirtualHost>

[root@localhost ~]# service rpcbind start
Starting rpcbind:                                          [  OK  ]
[root@localhost ~]# mount ^C
[root@localhost ~]# mkdir /webroot
[root@localhost ~]# mount -t nfs 192.168.2.5:/var/webroot /webroot/
[root@localhost ~]# ls /webroot/
wordpress  wordpress-4.4.1-zh_CN.zip
[root@localhost ~]# service httpd start
Starting httpd:
httpd: apr_sockaddr_info_get() failed for www.anyisalin.com
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[Wed Mar 23 18:05:15 2016] [warn] NameVirtualHost 192.168.2.3:80 has no VirtualHosts
                                                          [  OK  ]

安装前我们需要先将dns服务器中对192.168.2.4的解析注释,避免安装时出现解析问题

安装过程不做演示

blob.png

blob.png

第二台主机安装

以下操作在www.anyisalin.com(192.168.2.4)中执行 
我们要将dns服务器中的A记录恢复到初始轮询的状态


[root@localhost ~]# yum install httpd php php-mysql nfs-utils -y | tail -n 10
Installed:
 httpd.x86_64 0:2.2.15-45.el6.centos               nfs-utils.x86_64 1:1.2.3-64.el6               php.x86_64 0:5.3.3-40.el6_6               php-mysql.x86_64 0:5.3.3-40.el6_6              

Dependency Installed:
 apr.x86_64 0:1.3.9-5.el6_2                apr-util.x86_64 0:1.3.9-3.el6_0.1                apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1        httpd-tools.x86_64 0:2.2.15-45.el6.centos      
 keyutils.x86_64 0:1.4-5.el6               libedit.x86_64 0:2.11-4.20080712cvs.1.el6        libevent.x86_64 0:1.4.13-4.el6                libgssglue.x86_64 0:0.1-11.el6                  
 libtirpc.x86_64 0:0.2.1-10.el6            mailcap.noarch 0:2.1.31-2.el6                    nfs-utils-lib.x86_64 0:1.1.5-11.el6           php-cli.x86_64 0:5.3.3-40.el6_6                
 php-common.x86_64 0:5.3.3-40.el6_6        php-pdo.x86_64 0:5.3.3-40.el6_6                  python-argparse.noarch 0:1.2.1-2.1.el6        rpcbind.x86_64 0:0.2.0-11.el6                  

Complete!
[root@localhost ~]# vim /etc/httpd/conf.d/virt.conf

NameVirtualHost 192.168.2.4:80
<VirtualHost 192.168.2.4:80>
  ServerName www.anyisalin.com
  DocumentRoot /webroot/wordpress
</VirtualHost>
[root@localhost ~]# service rpcbind start
Starting rpcbind:                                          [  OK  ]
[root@localhost ~]# mkdir /webroot
[root@localhost ~]# mount -t nfs 192.168.2.5:/var/webroot /webroot/
[root@localhost ~]# service httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using www.anyisalin.com for ServerName
                                                          [  OK  ]
[root@localhost ~]#

确保DNS服务能提供以下效果 blob.png

测试

由于在Windows我们不好进行模拟, 遂修改HOSTS文件达到测试效果

web1测试

现在访问web1主机

blob.png

blob.png


发布一篇文章测试

blob.png

web2测试

现在访问web2主机

 blob.png

还能够看到刚才发的文章

 blob.png

再发布一篇文章

blob.png

blob.png


回到web1测试

再次访问web1主机

 blob.png

blob.png

虽然页面一样, 但是主机已经是web2了


总结

虽然本文最后测试时只修改了hosts文件进行测试,但是如果指定DNS地址为192.168.2.2的话是能够完成负载均衡的效果的,但是NFS的网络传输文件的效率并不好,后期会学习LVS和Nginx, HAproxy等专用负载均衡软件再给大家写一篇。 
作者: AnyISalIn 
感谢: MagEdu


本文出自 “The AnyISalIn blog” 博客,请务必保留此出处http://anyisalin.blog.51cto.com/10917514/1757942

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
一、四大名捕 四大名捕,最初出现于温瑞安创作的武侠小说,是朝廷中正义力量诸葛小花的四大徒弟,四人各怀绝技,分别是轻功暗器高手“无情”、内功卓越的高手“铁手”、腿功惊人的“追命”和剑法一流的“冷血” 本文四大名捕由linux命令所出演 无情:ps 出演 铁手:dstat 出演 追命:top 出演 冷血:htop 出演 二、进程相关基础知识 介绍四大名捕之前先介绍一下进程相关的基础知识,话不多说,看图。 三、 轻功暗器高手“无情” [PS] ps:用于显示当前进程的状态(非动态) ps [options]:
Svn集中式版本管理系统 --欺壹世充电系列 一、svn服务器 1、什么是Svn svn(subversion)是一个垮平台的开源版本控制系统。管理随时间改变的各种数据。svn会备份并记录每个文件每一次的修改更新变动,这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本。 2、Svn与Git svn是集中式的管理,存在一个中央版本库,所有开发人员在本地开发所有使用的代码都来自于这个版本库,提交代码也都必须提交到这个中央版本库。 svn版本控制系统流程如下: 1.在中央库上创建或从主干复制一个分支
小白是Emacs的忠实用户,在CentOS服务器上也要自己编译安装一个Emacs供自己使用。由于使用了很多Emacs的插件,每次启动那是很缓慢的,几乎是5s左右才打开一个文件(让大家误以为服务器配置很烂呢)。在打开文件的速度上与Vim有些差距,Vim打开文件几乎是零等待(我这里的vim是简单的配置,并没有使用额外的插件;使用Emacs的同行可不要骂我哦)。 最近发现Emacs的打开速度是巨慢无比的,之前就没有这种问题。细想了一下,主要是之前有网络连接,而这几次是没有网络连接的。所以小白就想到底是Emacs
背景: 从上面可以看到短信接口做了“短信轰炸机”的傀儡,一天的调用量达到135447次 防止此类攻击比较简单的方法就是根据来源判断是否合法,这也是大多数图片网站防盗链的处理方法。 在Haproxy中增加 aclphone_hosthdr_dom(host)-iwww.abc.comaclphone_pathpath_beg-i/duanxin/acticn.doaclphone_refererhdr_reg(referer)-ihttp://www.abc.comhttp-requestdenyifpho
某局点升级 (nginx 变 ats ,同时去掉前端的 nginx 负载层 ) ,升级之后服务就不正常,硬生生的看着十几万连接,没有流量,各种排错,可谓是把心提到嗓子眼惊心动魄的半小时,虽然做了很好的业务机制,服务不正常用户可以直接回源,不过对于我们的流量而言肯定是个锯齿了,回顾一下排查过程。 升级过程不说了,升完后对业务配置、健康心跳、磁盘设置、本地回源 DNS 简单做了检查,没发现问题。接下来就是切流量过来,前端的 DNS 按照域名哈希将请求分发过来,流量迅速到了 100M 还在上升,连接数到了几万(
系统环境:CentOS6.5 软件:mongodb2.8 原来是想到现在的数据进行添加副本集,方便读写的,没想到悲剧了,现在连原来的主数据都变成了从的数据库,怎么也换不过去 。 尝试了两个解决办法: 1 . 登录的原的主mongodb ,用rs.remove()的办法把后来添加的副本集从member里移掉,失败了。 真的悲剧了,怎么都remove不掉,因为原来的master已经变成了slave,不能remove其它成员 2 . 更改config,修改member 0 的优先级,抢占master。 执行也是
0.说明 关于一个完整的教程,还是那句话,国内的要么不完整,要么就太旧了,而且思路也不清晰,所以这里写一篇完整的给大家分享一下。 虽然对于Linux主机的监控可以通过执行特定的命令来完成,但是相比之后,通过snmp的方式来获取Linux主机的信息则会更轻松简单些,只不过在使用前的配置可能需要花多一点时间,不过这绝对值得!而且如果需要开发Linux主机的监控软件,那使用snmp肯定是首选,毕竟它可以获得的信息太多太多! 后面的内容就来分享一下 在Ubuntu上安装、配置、启动snmp以及进行远程测试的完整过

破墙而入看电视 - 2016-04-04 17:04:55

搬家、又是搬家,伤不起啊! 原房东催得急,只得尽快找新的地方,只要不是中介,就优先考虑。还算顺利,在隔壁看了一个大的单间,没了解细节,就付押金开始搬家。收拾完毕以后,想趟下来看电视,悲催,房东没给机顶盒;这也没事,我自己有联通的iptv机顶盒,办理网络移机后就可以了。 光纤入户到厨房,接上路由器,有线、无线都能上网。然后看怎么接入网线到卧室里,悲催的是,卧室里找遍了,没发现墙上有网络接口。因为我租的只是一个大间,厨房是公用的,因此电视只能放在租的卧室里。如果拉明线,必须从墙上打洞。我担心打洞后,房东找茬,
前言:这里只是说明整个搭建流程,并不进行原理性的讲解 一 下面所需要用到的数据库配置: 数据库方面,使用mysql创建一个 users 表,具体代码如下: DROPTABLEIFEXISTS`users`;CREATETABLE`users`(`UserID`int(4)NOTNULLAUTO_INCREMENT,`UserName`varchar(16)NOTNULL,`Password`varchar(16)NOTNULL,`Telephone`varchar(16)NOTNULL,`Address`
1.模拟数据库损坏 这个时候数据库已经损坏了,用户无法登录到邮箱,也不能接收或者发送邮件。如下图所示。 2.创建拨号音数据库 当务之急,先恢复用户的邮件收发,可以创建一个拨号音数据库,让用户先能够正常收发邮件。创建给拨号音数据库使用的文件夹。 创建拨号音数据库 将原来DB1上的所有用户暂时迁移到DTB1上,使得用户能够正常收发。 装载DTB1数据库 检查原来DB1中的用户是否能够正常收发邮件(但是无法查看之前的过往邮件) 创建还原数据库RDB1 创建RDB 将DB1中的所有日志文件复制到RDB1文件夹中,