NFS共享MySQL使用DNS轮询实现Web负载均衡
NFS共享MySQL使用DNS轮询实现Web负载均衡
前言:
今天学习了
NFS
,遂结合前面学习的LAMP
+Bind
做一个实验,实现两台Web服务器采用同一个MySQL数据库和相同的网页文件,对LAMP和Bind不了解的可以去查看我以前写的博客: AnyISalIn的文章
实验拓扑图
实验环境
主机名 | 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实现轮询
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的解析注释,避免安装时出现解析问题
安装过程不做演示
第二台主机安装
以下操作在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主机
发布一篇文章测试
web2测试
现在访问web2主机
还能够看到刚才发的文章
回到web1测试
再次访问web1主机
虽然页面一样, 但是主机已经是web2了
总结
虽然本文最后测试时只修改了hosts文件进行测试,但是如果指定DNS地址为192.168.2.2的话是能够完成负载均衡的效果的,但是NFS的网络传输文件的效率并不好,后期会学习LVS和Nginx, HAproxy等专用负载均衡软件再给大家写一篇。
作者: AnyISalIn
感谢: MagEdu

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
金三银四面试季节之Java 核心面试技术点 - JVM 小结
更多关于Java的文章请访问: 描述一下 JVM 的内存区域 程序计数器(PC,Program Counter Register)。在 JVM 规范中,每个线程都有它自己的程序计数器,并且任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的 Java 方法的 JVM 指令地址;或者,如果是在执行本地方法,则是未指定值(undefined)。 Java 虚拟机栈(Java Virtual Machine Stack),早期也叫 Java 栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的 Java 方法调用。前面谈程序计数器时,提到了当前方法;同理,在一个时间点,对应的只会有一个活动的栈帧,通常叫作当前帧,方法所在的类叫作当前类。如果在该方法中调用了其他方法,对应的新的栈帧会被创建出来,成为新的当前帧,一直到它返回结果或者执行结束。JVM 直接对 Java 栈的操作只有两个,就是对栈帧的压栈和出栈。栈帧中存储着局部变量表、操作数(operand)栈、动态链接、方法正常退出或者异常退出的定义等...
- 下一篇
欺壹世充电系列之[Svn集中式版本管理系统]
Svn集中式版本管理系统 --欺壹世充电系列 一、svn服务器 1、什么是Svn svn(subversion)是一个垮平台的开源版本控制系统。管理随时间改变的各种数据。svn会备份并记录每个文件每一次的修改更新变动,这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本。 2、Svn与Git svn是集中式的管理,存在一个中央版本库,所有开发人员在本地开发所有使用的代码都来自于这个版本库,提交代码也都必须提交到这个中央版本库。 svn版本控制系统流程如下: 1.在中央库上创建或从主干复制一个分支。 2.从中央库checkout下这个分支代码。 3.添加自己的代码文件,修改现存的代码或者删除代码文件。 4.commit代码,假设有人在刚刚的分支上提交了代码,你就会被提示代码过期,你得先up你得代码后在提交。up代码的时候如果出现冲突,需要解决好冲突后再进行提交。 缺点: 如果无法连接到中央版本库的环境下,你无法提交代码,将代码加入版本控制,无法查看代码的历史版本,以及版本变化过程。由于代码库集中管理,因此,需要对中央版本库的存储做备份。svn...
相关文章
文章评论
共有0条评论来说两句吧...