部署社交网站
一、简介
本项目案例结合SVN、LNMP和MySQL三种环境,部署一个社交网站,本社交网站采用PHP语言开发,搭建SVN服务器进行版本控制和集中管理PHP程序员开发的代码,以Nginx作为前端服务器,通过fastcgi协议访问后端的PHP服务器,调用PHP页面;为保证数据安全,搭建MySQL主从复制环境存储用户重要数据;另外搭建MFS分布式文件系统来存储用户照片。
1.SVN服务器:可以参考百度介绍http://baike.baidu.com/link?url=fJT4nk4sgyc97MYSciYwlzMp2uRVsi-FkGYOEA7UtvPk4ioBl1NTaAAFRbBhuu6-YOAqaGFomxlu2j3AKgNlba
2.MFS分布式文件系统,比NFS分布式文件系统更加强大,其他分布式式文件系统还有HDFS分布式文件系统和fastDFS分布式文件系统等
3.MySQL环境,此案列环境限于本人机器设备配置问题,只配置了mysql主从复制,如果是真实环境中,还可以配置双击热备,借助amoeba环境实现读写分离,负载均衡等功能,大型网络环境还可以配置MySQL集群。
二、案例环境
1.网络拓扑图
2.网络关系逻辑图
3.主机环境
操作系统CentOS6.5-64
Nginx:192.168.0.10 /24 软件:nginx
PHP:192.168.0.12/24 软件:php,mfs,fuse
MySQL Master:192.168.0.100/24 软件:cmake,mysql
MySQL Slave:192.168.0.101/24 软件:cmake,mysql
Master Server:192.168.0.20/24 软件:mfs
MetaLogger:192.168.0.200/24 软件:mfs
Chunk1:192.168.0.21/24 软件:mfs
Chunk2:192.168.0.22/24 软件:mfs
Chunk3:192.168.0.23/24 软件:mfs
SVN:192.168.0.172/24 软件:subversion
真实环境中,最好先搭建一台ftp服务器,安装过程中会使用到安装光盘里的文件,并且可以方便下载需要安装的软件包,本地配置yum文件时指向ftp服务器
mfs源码包下载地址为http://sourceforge.net/projects/moosefs/files/moosefs/1.6.27/mfs-1.6.27-5.tar.gz
fuse源码安装包下载地址http://nchc.dl.sourceforge.net/project/fuse/fuse-2.x/2.9.2/fuse-2.9.2.tar.gz
本案例实现过程是在vmware虚拟机环境下完成的
4.主机内部环境
a设置主机名
root@localhost ~#hostname nginx
root@localhost ~# vim /etc/hosts
192.168.0.10 nginx
192.168.0.12 php
192.168.0.100 master
192.168.0.101 slave1
192.168.0.20 mfsmaster
192.168.0.200 mfslogger
192.168.0.21 chunk1
192.168.0.22 chunk2
192.168.0.23 chunk3
192.168.0.172 svn
root@nginx ~#vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=nginx
//其他主机以相同方式设置
b.关闭防火墙
root@localhost ~#vim /etc/selinux/config
SELINUX=disabled
root@localhost ~#service iptables stop
root@localhost ~#setenforce 0
c.设置主机ip地址
root@localhost ~#vim /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
HWADDR=00:0C:29:49:0F:81
TYPE=Ethernet
UUID=d97bca82-0440-41f9-9cd0-02fe0909cee6
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.0.10
NETMASK=255.255.255.0
root@localhost ~#service network restart
//其他主机以相同方式设置并且根据自己机器中网卡设备的显示符设定DEVICE
d.配置本地yum服务
root@localhost ~#rm -fr /etc/yum.repos.d/*
root@localhost ~#cat >/etc/yum.repos.d/local.repo<<end
[local]
name=cjenlet
baseurl=file:///media/
enabled=1
gpgcheck=0
end
[root@localhost ~]# mount /dev/cdrom /media/
三、案例实施
根据网络逻辑拓扑图,先部署LNMP环境,简单测试,接着部署MFS环境,把MFS文件系统挂载在PHP服务器存放用户照片的目录上,再部署SVN管理环境,把Nginx和PHP的webphp目录链接到SVN的webphp目录,集中管理,最后再搭建MySQL环境,供PHP程序员开发的代码中的调用和发布上线后用户数据的录入和输出。
1.部署Nginx服务器
A.安装nginx服务器
[root@nginx ~]# yum -y install pcre-devel zlib-devel
[root@nginx ~]# useradd -M -s /sbin/nologin nginx
[root@nginx ~]# tar xvf nginx-1.6.0.tar.tgz
[root@nginx ~]# cd nginx-1.6.0/
[root@nginx nginx-1.6.0]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --user=nginx --group=nginx
[root@nginx nginx-1.6.0]# make&&make install
B.修改nginx配置文件
[root@nginx~]#vim /usr/local/nginx/conf/nginx.conf
C.启动nginx
[root@nginx~]#ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //把nginx的启动文件软链接到系统用户可执行命令的目录里
[root@nginx~]#nginx
[root@nginx~]#netstat -anpl |grep nginx
2.部署PHP服务器
A.安装php服务器
[root@php ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel mysql-devel
[root@php ~]# useradd -M -s /sbin/nologin php
[root@php ~]# tar xvf php-5.3.28.tar.gz
[root@php ~]# cd php-5.3.28/
[root@php php-5.3.28]# cp /usr/lib64/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so
//PHP默认去/usr/lib/搜索libmysqlclient.so
[root@php php-5.3.28]# ./configure --prefix=/usr/local/php --with-gd --with-zlib --with-mysql --with-mysqli --with-mysql-sock --with-config-file-path=/usr/local/php --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib
[root@php php-5.3.28]# make&&make install
B.配置php-fpm进程
[root@php php-5.3.28]# cd /usr/local/php/etc/
[root@php etc]# cp php-fpm.conf.default php-fpm.conf
[root@php etc]# vim php-fpm.conf
//找到这些内容,然后修改
pid = run/php-fpm.pid
user = php
group = php
listen = 0.0.0.0:9000
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
C.启动php-fpm进程
[root@php etc]# /usr/local/php/sbin/php-fpm
D.访问nginx测试
先在php主机新建一个php测试页面
[root@php etc]# mkdir -p /var/www/html/webphp
[root@php etc]# vim /var/www/html/webphp/index.php
<?
phpinfo();
?>
通过外部浏览器访问192.168.0.10/index.php
3.部署MFS分布式文件系统
A.搭建Master Server
a.安装mfs
[root@mfsmaster ~]# yum -y install zlib-devel
[root@mfsmaster ~]#useradd mfs -s /sbin/nologin
[root@mfsmaster ~]#tar zxf mfs-1.6.27-5.tar.gz
[root@mfsmaster ~]#cd mfs-1.6.27
[root@mfsmaster mfs-1.6.27]#./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
[root@mfsmaster mfs-1.6.27]#make &&make install
b.复制相关配置文件
[root@mfsmaster mfs-1.6.27]#cd /usr/local/mfs/etc/mfs/
[root@mfsmaster mfs]#cp mfsexports.cfg.dist mfsexports.cfg
[root@mfsmaster mfs]#cp mfsmaster.cfg.dist mfsmaster.cfg
[root@mfsmaster mfs]#cp mfstopology.cfg.dist mfstopology.cfg
[root@mfsmaster mfs]#cd /usr/local/mfs/var/mfs/
[root@mfsmaster mfs]#cp metadata.mfs.empty metadata.mfs
c.相关配置文件参数解释
//mfsmaster.cnf:主配置文件
//mfsexports.cnf:被挂载目录及权限配置文件
mfsmaster.cnf的参数:
# WORKING_ USER = mfs //运行master server 的用户
#WORKING_ GROUP = mfs //运行master server 的组
# SYSLOG_IDENT = mfsmaster //master server 在syslog 中的标识,说明是由master serve 产生的
# LOCK_MEMORY = 0 //是否执行mlockall()以避免mfsmaster 进程溢出(默认为0)
# NICE_LEVEL = -19 //运行的优先级(如果可以默认是-19; 注意: 进程必须是用root 启动)
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfsexports.cfg //被挂接目录及其权限控制文件的存放位置
# DATA_PATH = /usr/local/mfs/var/mfs //数据存放路径,此目录下大致有三类文件,changelog,sessions 和stats;
# BACK_LOGS = 50 //metadata 的改变log 文件数目(默认是50);
# REPLICATIONS_ DELAY_INIT = 300 //延迟复制的时间(默认是300s);
# REPLICATIONS_ DELAY_DISCONNECT = 3600 //chunkserver 断开的复制延迟(默认是3600);
# MATOML_LISTEN_HOST = * //metalogger 监听的IP 地址(默认是*,代表任何IP);
#MATOML_LISTEN_PORT = 9419 //metalogger 监听的端口地址(默认是9419);
#MATOCS_LISTEN_ HOST = * //用于chunkserver 连接的IP 地址(默认是*,代表任何IP);
#MATOCS_LISTEN_PORT = 9420 //用于chunkserver 连接的端口地址(默认是9420);
#MATOCU_LISTEN_HOST = * //用于客户端挂接连接的IP 地址(默认是*,代表任何IP);
#MATOCU_LISTEN_PORT = 9421 //用于客户端挂接连接的端口地址(默认是9421);
#CHUNKS_LOOP_TIME = 300 //chunks 的回环频率(默认是:300 秒);
# CHUNKS_DEL_LIMIT = 100
#CHUNKS_WRITE_REP_LIMIT = 1 //在一个循环里复制到一个chunkserver 的最大chunk 数目(默认是1)
# CHUNKS_READ_REP_LIMIT = 5 //在一个循环里从一个chunkserver 复制的最大chunk 数目(默认是5)
# REJECT_OLD_ CLIENTS = 0 //弹出低于1.6.0 的客户端挂接(0 或1,默认是0)
注意:
凡是用#注释掉的变量均使用其默认值
修改DATA_PATH指定的目录要权限为mfs,chown -R mfs:mfs /usr/local/mfs/var/mfs
mfsexports 访问控制对于那些老客户是没用的
注意开通监听的端口,为保证数据安全,请修改端口
mfsexports.cnf的参数:
#客户端IP 允许挂载的目录 客户端拥有的权限
192.168.0.0/24 / rw,alldirs,maproot=0
/ 标识MFS的根
.标识MFSMETA 文件系统
地址可以指定的格式:
IP格式 |
说明 |
* |
所有的ip 地址 |
n.n.n.n |
单个ip 地址 |
n.n.n.n/b |
IP 网络地址/位数掩码 |
n.n.n.n/m.m.m.m |
IP 网络地址/子网掩码 |
f.f.f.f-t.t.t.t |
IP 段 |
权限说明:
权限 |
说明 |
ro |
只读模式 |
rw |
读写模式 |
alldirs |
许挂载任何指定的子目录 |
maproot |
映射为root,还是指定的用户 |
password |
指定客户端密码 |
d.启动Master Server
mfsmaster.cnf和mfsexports.cnf保持默认值
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster start
[root@mfsmaster mfs]# ps -ef |grep mfs
/usr/local/mfs/sbin/mfsmaster [-vdu] [-t locktimeout] [-c cfgfile] [start|stop|restart|reload]
//master 服务操作,最好不要kill master,安全停止执行mfsmaster stop,否则下次启动因metadata.mfs.back而出现问题,还需要使用备份来恢复
$/usr/local/mfs/sbin/mfscgiserv //启动WEBUI 监控服务
截图的监控启动信息显示:允许所有主机访问mfsmaster的端口9425进行监控MFS系统
访问http://mfsmaster:9425 或者http://192.168.0.20:9425
B.搭建MetaLogger Server
a.安装mfs,此步奏和搭建Master Server的安装过程一样
b.配置文件
[root@mfslogger ~]# cd /usr/local/mfs/etc/mfs/
[root@mfslogger mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@mfslogger mfs]# vim mfsmetalogger.cfg
MASTER_HOST = mfsmaster
如果没有设置域名解析,hosts文件没有主机名记录,那么改用mfsmaster主机的ip地址指定
c.启动MetaLogger Server服务器
[root@mfslogger mfs]# /usr/local/mfs/sbin/mfsmetalogger start
[root@mfslogger mfs]# ps -ef |grep mfs
//[root@mfslogger mfs]# /usr/local/mfs/sbin/mfsmetalogger -s //停止MetaLogger Server
C.搭建Chunk Server
本案例中三台chunk Server的搭建步骤是一样的
a.安装mfs
此案装过程和搭建Master Server的安装过程只有一处差异
//[root@mfsmaster mfs-1.6.27]#./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
//这是mfsmaster主机安装配置
[root@mfsmaster mfs-1.6.27]#./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster--disable-mfsmount
b.配置文件
[root@chunk1 mfs]#
cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@chunk1 mfs]#
cp mfshdd.cfg.dist mfshdd.cfg
[root@chunk1 mfs]# vim mfschunkserver.cfg
MASTER_HOST = mfsmaster
[root@chunk1 mfs]# vim mfshdd.cfg
/data //添加一行/data,在这里/data是一个给MFS的分区,生产环境中最好使用独立的分区或者磁盘挂载到此目录
[root@chunk1 mfs]# mkdir /data/
[root@chunk1 mfs]# chown -R mfs.mfs /data/
c.启动Chunk Server
[root@chunk1 mfs]# /usr/local/mfs/sbin/mfschunkserver start
[root@chunk1 mfs]# ps -ef |grep mfs
4.挂载MFS分布式文件系统
以php主机作为MFS的客户端,php主机需要另外安装两个重要软件mfs和fuse
A.安装fuse
a.安装
[root@php ~]# yum -y install zlib-devel
[root@php ~]# tar xvf fuse-2.9.2.tar.gz
[root@php ~]# cd fuse-2.9.2/
[root@php fuse-2.9.2]# ./configure
[root@php fuse-2.9.2]#make &&make install
b.配置环境变量
[root@php fuse-2.9.2]#echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH">>/etc/profile
[root@php fuse-2.9.2]#source /etc/profile
B.安装mfs
[root@php ~]#cd
[root@php ~]#useradd mfs -s /sbin/nologin
[root@php ~]#tar xvf fuse-2.9.4.tar.gz
[root@php ~]#cd mfs-1.6.27
[root@php mfs-1.6.27]#./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount
[root@php mfs-1.6.27]#make &&make install
C.挂载MFS
[root@php ~]#mkdir -p /var/www/html/webphp/uploads/photos
[root@php ~]#modprobe fuse
[root@php ~]#/usr/local/mfs/bin/mfsmount /var/www/html/webphp/uploads/photos -H mfsmaster
[root@php ~]#echo "export PATH=/usr/local/mfs/bin:$PATH">>/etc/profile
[root@php ~]#source /etc/profile
[root@php ~]#df -TH //查看挂载情况
[root@php ~]#mfsgetgoal -r /var/www/html/webphp/uploads/photos/
5.部署SVN管理环境
A.安装svn
[root@svn ~]# yum -y install subversion
[root@svn ~]# svnserve --version