评论

收藏

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

数据库 数据库 发布于:2021-07-03 21:40 | 阅读数:215 | 评论:0

  
NFS共享MySQL使用DNS轮询实现Web负载均衡
  [size=2.15em]

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




实验拓扑图





实验环境
主机名IP地址实现storage.anyisalin.com192.168.2.5NFSns.anyisalin.com192.168.2.2dns,MySQLwww.anyisalin.com192.168.2.3webwww.anyisalin.com192.168.2.4web本文所有主机皆关闭SElinux和IPtables



实验步骤

搭建NFS
以下操作在storage.anyisalin.com中执行
[root@storage ~]# yum install nfs-utils | tail -n 10  #安装nfs-utils 这里已经安装过了Loaded plugins: fastestmirror, refresh-packagekit, securitySetting up Install ProcessLoading mirror speeds from cached hostfile * base: mirrors.pubyun.com * extras: mirrors.skyshe.cn * updates: mirrors.pubyun.comPackage 1:nfs-utils-1.2.3-64.el6.x86_64 already installed and latest versionNothing 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]# lswordpress  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 startStarting 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环境
[size=1em]以下操作在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  nsns    IN   A   192.168.2.2www   IN   A   192.168.2.3www   IN   A   192.168.2.4storage 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]# lsdebug  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]# lsbin  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 mysqluseradd: 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' ...OKFilling 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 = /mydataskip_name_resolve = oninnodb_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]# mysqlWelcome to the MariaDB monitor.  Commands end with ; or \g.Your MariaDB connection id is 1Server version: 5.5.32-MariaDB-log MariaDB ServerCopyright (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:80NameVirtualHost 192.168.2.3:80<VirtualHost 192.168.2.3:80>   ServerName www.anyisalin.com   DocumentRoot /webroot/wordpress</VirtualHost>[root@localhost ~]# service rpcbind startStarting 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 startStarting httpd: httpd: apr_sockaddr_info_get() failed for www.anyisalin.comhttpd: 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  ]
[size=1em]安装前我们需要先将dns服务器中对192.168.2.4的解析注释,避免安装时出现解析问题
安装过程不做演示



第二台主机安装
[size=1em]以下操作在www.anyisalin.com(192.168.2.4)中执行
我们要将dns服务器中的A记录恢复到初始轮询的状态

[size=1em]
[root@localhost ~]# yum install httpd php php-mysql nfs-utils -y | tail -n 10Installed:  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.confNameVirtualHost 192.168.2.4:80<VirtualHost 192.168.2.4:80>   ServerName www.anyisalin.com   DocumentRoot /webroot/wordpress</VirtualHost>[root@localhost ~]# service rpcbind startStarting rpcbind:                      [  OK  ][root@localhost ~]# mkdir /webroot[root@localhost ~]# mount -t nfs 192.168.2.5:/var/webroot /webroot/[root@localhost ~]# service httpd startStarting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using www.anyisalin.com for ServerName                               [  OK  ][root@localhost ~]#
确保DNS服务能提供以下效果
测试
[size=1em]由于在Windows我们不好进行模拟, 遂修改HOSTS文件达到测试效果

web1测试
现在访问web1主机




发布一篇文章测试

web2测试
现在访问web2主机

还能够看到刚才发的文章

再发布一篇文章




回到web1测试
再次访问web1主机


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


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




  
关注下面的标签,发现更多相似文章