让LAMP挂载NFS实现负载均衡(一)

从这篇开始打算做个较大的实验,实验内容如标题。不过咱还是得首先说说NFS是个啥玩意是不?

NFS:Network File System 网络文件系统,传统意义上,文件系统是在内核中实现。NFS由SUN公司研发,现在的版本已经到了NFS V4.2。不过缺点就是不能再windows或者unix核心的OS进行挂载。

NFS基于RPC协议,实现远程系统调用,共享文件资源。那么什么是RPC?RPC:remote procedure call protocol 远程过程调用,函数调用(远程主机商的函数),一部分由本地程序完成,另一部分由远程主机上的函数完成。

调用的基本过程应该就是这样子滴:
客户端某程序发起过程请求–>rpc客户端接过请求–>通过套接字通信交给服务器端–>服务器端接过请求交给某程序执行–>执行后把结果或者状态返回客户端

NFS01

说好了RPC现在当然得说说关于NFS程序的工作流程咯:

NFS02

上图摘自:http://www.178linux.com/15665 看来我比较懒,感觉这个图片比较合适所以就无耻的伸手拿了…就不自己画了!
其中:

  • Portmapper 提供RPC服务进程,使用NFS的响应,请求,连接数据都通过它在客户端完成。监听在tcp&udp/111端口
    查看RPC使用的详细信息可以使用命令:
    rpcinfo -p 查看详细信息;rpcinfo:report prc information
  • nfsd:nfs的守护进程,负责接收到用户的调用请求后与内核发出请求并得到调用结果响应给用户。监听在服务器端的tcp&udp/2049端口
  • mountd:是nfs服务的辅助服务,作用是认证客户端身份,只有通过认证的客户端才会发育令牌才能和真正的nfsd建立连接传送数据。
  • idmapd:是NFS的第三个程序,id号映射服务,用来负责远程客户端创建文件后的权限问题。

介绍了一点NFS的概念接下来就得配置和使用了,总体架构为:部署两台httpd的主机,然后使用php-fpm的方式解析动态页面,NFS和php-fpm是一台主机。最后mariadb为一台主机。配置如下:

NFS03

地址为:

httpd1 128.168.1.201
httpd2 128.168.1.202
php-fpm&NFS 128.168.1.203
mariadb 128.168.1.204

只要四台主机即可,不过如果你的内存足够OK的话可以尝试添加一台bind主机做域名的负载均衡。


编译安装mariadb 128.168.1.204:

关于某一期我只说了使用二进制包来安装mariadb并没有说使用编译安装。不过这一期我打算说说编译安装:

首先编译安装比较推荐有自己开发的第三方存储引擎或者第三方模块比较推荐编译安装,如果是一般用户比较推荐使用二进制包来安装,这样比较方便快捷。

而且在mariadb的编译安装并不是使用./configure 而是使用的cmake,不过个人感觉还是cmake比较通俗易懂。下面看看cmake和./configure的对比:

第一个是编译安装:
./configure       cmake .

第二个是获取帮助:
./configure –help       cmake . -LH | ccmake .

第三个清理之前编译生成的文件:
make clean
rm CMakeCache.txt 删除这个文件即可,看来比./configure简单一些咯?

接下来获取编译之前所需要安装的包:

NFS04

随后和二进制安装一样添加mysql组和mysql用户。然后创建一个mysql放置数据库的专用磁盘:

NFS05

然后解压下载的源码包,是50-70MB左右的包,不是200多M的包那个是二进制包!随后cd进去,执行以下命令:命令太长没截图方便大家!

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb-版本号 -DMYSQL_DATADIR=数据库文件存放的位置 -DSYSCONFDIR=配置文件位置 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

其实制定数据库存放文职和配置文件位置都是可以进行修改的,而DCMAKE_INSTALL_PREFIX指定的安装目录可以把mariadb改为mysql这样编译安装完以后可以不用链接…

随后就是make && make install :

NFS06

注意:编译需要1小时左右,编译比较消耗磁盘I/O而不是CPU,所以和我一样使用的是机械硬盘请耐心等待,固态硬盘的土豪可以同时编译安装2个mariadb!

编译安装好以后就和二进制安装包的配置一样了,除了添加用户和组以及添加的数据库位置,可以参考这个博文


接下来就是编译安装php然后配置php-fpm的重头戏!

首先说说什么是php-fpm:php-fpm是使用fcgi协议来帮助web server提供动态页面的调用,数据库的调用等动态内容。大家可以理解为将httpd | nginx与php拆分为两台主机,这样方便提供web服务的主机能够负载均衡并且减少原来一台主机的动态网页的负载量!看上去好处多多哪如何安装?

首先必须下载php源码包然后解压缩进入目录:

NFS07

然后安装php-fpm最好需要mcrypt扩展,安装这个扩展需要安装这些包“libmcrypt  libmcrypt-devel mhash mhash-devel”然后还有php需要的包“bzip2-devel libmcrypt-devel libxml2-devel”别忘了还有gcc和gcc-c++。

NFS08

随后执行:   ./configure –prefix=/usr/local/php –with-mysql=mysqlnd –with-pdo-mysql=mysqlnd –with-mysqli=mysqlnd –with-openssl –enable-mbstring –with-freetype-dir –with-jpeg-dir –with-png-dir –with-zlib –with-libxml-dir=/usr –enable-xml –enable-sockets –enable-fpm –with-mcrypt –with-config-file-path=/etc –with-config-file-scan-dir=/etc/php.d –with-bz2

上面的检查执行方式为php和mariadb不在同一个主机之内,记住如果不在同一个主机之内请使用php 5.3以上版本。将所有关联mariadb的改为mysqlnd这样就不用事先安装开发包了!

然后执行的过程中报错了…

NFS09

openssl没有安装…执行yum install -y openssl-devel

随后make && make install

编译安装好之后首先要拷贝php的配置文件:
cp php.ini-production /etc/php.ini

随后复制php-fpm的启动脚本文件;添加脚本文件的执行权限;添加可启动程序;保持开机启动:

NFS10

提供php-fpm的配置文件,并且修改:

NFS11

在配置文件中首先启用pid文件,无需翻页就在第一屏有,去掉”;”符号即可也可以改为我的文件路径全称:
pid = /usr/local/php/var/run/php-fpm.pid

修改监听的地址和端口:
搜索linten找到:listen = 127.0.0.1:9000 改为你想监听的地址,或者全部监听改为0.0.0.0:9000即可

配置fpm的相关选项为你所需要的值:
pm = dynamic 对于专用服务器,pm可以设置为static。
pm.max_children = 50 子进程最大数
pm.start_servers = 5 启动时的进程数
pm.min_spare_servers = 2 保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers = 8 保证空闲进程数最大值,如果空闲进程大于此值,此进行清理

修改好之后保存退出文件。随后启动php-fpm:

NFS12

基本的准备工作还差编译安装两个主机的httpd了。这个可以参考这个博文,来对应配置。还有一些内容比如:配置php-fpm与httpd连通,NFS的安装使用,mariadb的授权等问题我们下一期说!

 

Comments

Leave a Reply

Your email address will not be published. Name and email are required