为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
MySQL


前言:

今天学习了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

本文所有主机皆关闭SElinux和IPtables

实验步骤

搭建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等专


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消