案列概述

公司的社交网站采用PHP语言开发,为了管理PHP程序员开发的代码,上级领导要求搭建SVN服务器进行版本控制。社交网站的第一个版本部署在LNMP平台上,前端为Nginx,通过fastcgi协议访问后端的PHP服务器。为了保证数据安全,要求搭建MySQL数据库主从集群。 社交网站包含用户的相册功能,允许用户上传照片,上传照片需要使用共享存储来存放。公司决定使用MFS分布式文件系统,并将MFS挂载到PHP服务器的相关目录下。

本案拓扑

案列环境

| 主机 | 操作系统 | IP地址 |主要软件 | | -------- | -------- | -------- | | Nginx | CentOS-7-x86_64 | 192.168.43.91 | nginx-1.6.3.tar.gz | PHP | CentOS-7-x86_64 | 192.168.43.138 | php-5.6.30.tar.gz;fuse-2.9.2.tar.gz;mfs-1.6.27-5.tar.gz ; ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
| Mysql-master | CentOS-7-x86_64 | 192.168.43.184 |mysql-5.6.36.tar.gz | Mysql-slave | CentOS-7-x86_64 | 192.168.43.77 |mysql-5.6.36.tar.gz | Masterserver | CentOS-7-x86_64 | 192.168.43.166 |mfs-1.6.27-5.tar.gz | Metalogger |CentOS-7-x86_64 |192.168.43.194 |mfs-1.6.27-5.tar.gz | Chunk sever1 | CentOS-7-x86_64 | 192.168.43.80 |mfs-1.6.27-5.tar.gz | Chunk sever2 | CentOS-7-x86_64 | 192.168.43.51 |mfs-1.6.27-5.tar.gz | SVN | CentOS-7-x86_64 | 192.168.43.147|

案例软件包

链接:https://pan.baidu.com/s/1DpDfhZtbpco8_Mo5wCAr0g
提取码:m3jj

案列实施

  • 部署Nginx服务器
  • 部署PHP服务器
  • 部署Mysql主从服务器,提供PHP程序员操作权限
  • 部署MFS,将MFS文件系统挂载在前端PHP服务器相关目录下
  • 部署SVN服务器,为PHP程序员创建访问账户,通知程序员可以导入代码
  • 保证各项服务开启,检查每项服务是否正常工作

一、部署Nginx服务

1、安装nginx服务

yum install gcc gcc-c++ pcre pcre-devel zlib-devel make cmake ncurses-devel bison libaio-devel -y ** #安装环境** useradd -M -s /sbin/nologin nginx ** #创建用户** tar zxf nginx-1.6.3.tar.gz -C /opt/ ** #解压nginx** cd /opt/nginx-1.6.3/ ./configure \ #编译安装 --prefix=/usr/local/nginx
--user=nginx
--group=nginx
--with-http_stub_status_module make && make install

2、设置nginx配置文件,使nginx支持php

3、开启nginx服务

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #设置软连接,让系统识别nginx中的命令 systemctl stop firewalld.service setenforce 0 nginx ** # 启动nginx** netstat -ntap | grep nginx

二、部署PHP服务

1、安装PHP服务

yum -y install gd libxml2-devel libjpeg-devel libpng-devel fontconfig-devel openssl-devel bzip2-devel gcc gcc-c++ useradd -M -s /sbin/nologin php tar zxvf php-5.6.30.tar.gz -C /opt cd /opt/php-5.6.30 ./configure --prefix=/usr/local/php-fpm --enable-fpm --with-zlib --with-pdo-mysql --enable-mbstring --with-gd --with-png-dir=/usr/lib64 --with-jpeg-dir=/usr/lib64 --with-freetype-dir=/usr/lib64 make && make install

2、优化服务

cp php.ini-development /usr/local/php-fpm/php.ini** #将配置文件模版复制出来** ln -s /usr/local/php-fpm/bin/* /usr/local/bin/ ln -s /usr/local/php-fpm/sbin/* /usr/local/sbin/
#以上两项都是让系统能够识别php相关命令

3、为PHP安装加速器

tar zxvf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz -C /opt/#将加速器解压到指定目录下 cd /opt/ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x cp ZendGuardLoader.so /usr/local/php-fpm/lib/php**#将加速器模块放在能够识别的路径**

4、配置PHP识别加速器

vi /usr/local/php-fpm/php.ini
    [Zend Guard Loader]
    zend_extension=/usr/local/php-fpm/lib/php/ZendGuardLoader.so
    zend_loader.enable=1

5、配置php-fpm进程,开启nginx的PHP支持

cd /usr/local/php-fpm/etc/
cp  php-fpm.conf.default php-fpm.conf
vi php-fpm.conf
    pid = run/php-fpm.pid
    user = php
    group = php
    pm.max_children=50
    pm.start_servers = 20
    pm.min_spare_servers = 5
    pm.max_spare_servers = 35

6、启动php-fpm进程

/usr/local/sbin/php-fpm netstat -tnal | grep 9000 systemctl stop firewalld.service setenforce 0

7、访问nginx测试 //在php主机新建一个php测试页面

mkdir -p /var/www/html/webphp**#创建站点目录** cd /var/www/html/webphp/ echo "hello,everyone">index.php ** #创建站点目录首页**

//通过外部浏览器访问192.168.43.91/index.php

三、部署Mysql

mysql安装 1、安装mysql(主、从两台相同操作)

yum install gcc gcc-c++  make cmake  ncurses-devel bison libaio-devel autoconf -y 
useradd  -s /sbin/nologin mysql
tar zxf mysql-5.6.36.tar -C /opt
mkdir /usr/local/mysql
cd /opt/mysql-5.6.36.tar
    cmake  \
    -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DWITH_EXTRA_CHARSETS=all \
    -DSYSCONFDIR=/etc \
    -DMYSQL_DATADIR=/home/mysql/ \
    -DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock \
    -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    -DENABLED_LOCAL_INFILE=1 \
    -DWITH_SSL=system \
    -DMYSQL_TCP_PORT=3306 \
    -DENABLE_DOWNLOADS=1 \
    -DWITH_SSL=bundled

make && make install

2、优化服务

cp support-files/my-default.cnf /etc/my.cnf #复制配置文件 cp support-files/mysql.server /etc/init.d/mysqld # 复制启动脚本 chmod +x /etc/init.d/mysqld #添加执行权限 chkconfig --add mysqld ** # 添加至启动项** chkconfig --level 35 mysqld on # 35 模式启动 echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile ** #添加环境变量** source /etc/profile ** #加载环境变量 ** chown -R mysql.mysql /usr/local/mysq ** #权限设置**

3、初始化数据库

/usr/local/mysql/scripts/mysql_install_db
--user=mysql
--ldata=/var/lib/mysql
--basedir=/usr/local/mysql
--datadir=/home/mysql

4、修改启动脚本,启动服务

ln -s /var/lib/mysql/mysql.sock  /home/mysql/mysql.sock     # 建立sock软链接
vi /etc/init.d/mysqld         # 修改启动脚本
    basedir=/usr/local/mysql
    datadir=/home/mysql
		
systemctl stop firewalld.service
setenforce 0		
service mysqld start
netstat -ntap | grep 3306

mysql主从复制 1、修改mysql主服务器配置文件

vim /etc/my.cnf
    server-id       = 11               #server-id主从服务器不能一样
    log-bin=master-bin            #主服务器日志文件
    log-slave-updates=true     #从服务器更新二进制日志
		
service mysqld restart  

2、进mysql主数据库提权

grant replication slave on . to 'myslave'@'192.168.43.%' identified by '123123' mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000003 | 499 | | | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)

3、修改mysql从服务器配置文件

vim /etc/my.cnf
    server-id 22
    log-bin=/usr/local/mysql/data/slave-bin
    relay-log=realy-log-bin
    relay-log-index=slave-relay-bin.inde
		
service mysqld restart 

4、进mysql从数据库设置同步

change master to master_host='192.168.43.184',master_user='myslave',master_password='123123',master_log_file='master-bin.000003',master_log_pos=499;#指定主服务器,同步文件和文件偏移量 mysql> start slave; #开启同步

5、测试主从复制 //主服务器 //从服务器

6、为PHP程序员设置使用账户 创建一个数据库名字有自己定,这里为manager; 创建一个账户php,可以通过192.168.43网段的所有可用地址访问manager数据库,权限非常大,除了没//有创建用户并给其他用户赋权的权力,其他权限都有。 这样,只要把用户名php,密码和mysql的ip地址给开发程序员就可以了。

mysql>create database manager mysql>grant all privileges on manager.* to 'php'@'192.168.43.%' identified by 'abc123';

四、部署MFS

1、搭建master server (1)安装mfs

yum install gcc gcc-c++ zlib-devel -y
useradd -s /sbin/nologin mfs              #创建管理用户
tar zxvf mfs-1.6.27-5.tar.gz -C /opt

cd /opt/mfs-1.6.27
./configure \
--prefix=/usr/local/mfs \               #工作目录
--with-default-user=mfs \            #运行masterserver的用户
--with-default-group=mfs \         #运行masterserver的组
--disable-mfschunkserver \       #关闭节点服务
--disable-mfsmount                   #关闭客户端服务

make && make install

(2)复制相关配置文件,才可使用

cd /usr/local/mfs/etc/mfs cp mfsexports.cfg.dist mfsexports.cfg #被挂载目录及权限配置文件 cp mfsmaster.cfg.dist mfsmaster.cfg ** #主配置文件** cp mfstopology.cfg.dist mfstopology.cfg #拓扑架构感知

(3)配置防断链

cd /usr/local/mfs/var/mfs cp metadata.mfs.empty metadata.mfs #配置防断链 chown -R mfs.mfs /usr/local/mfs

(4)启动master server

/usr/local/mfs/sbin/mfsmaster start systemctl stop firewalld.service setenforce 0

(5)开启监控服务

/usr/local/mfs/sbin/mfscgiserv 测试:192.168.43.166:9425

2、搭建metalogger server (1)安装mfs,此步奏和搭建Master Server的安装过程一样 (2)复制相关配置文件,才可使用

cd /usr/local/mfs/etc/mfs cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

(3)编辑配置文件

vim mfsmetalogger.cfg MASTER_HOST = 192.168.43.166 #指向master

(4)启动metalogger server

/usr/local/mfs/sbin/mfsmetalogger start systemctl stop firewalld.service setenforce 0 netstat -ntap | grep mfsmetalogger

3、搭建Chunk Server 本案中搭建chunk server同样操作 (1)安装mfs,此步奏和搭建Master Server的安装过程基本一样,配置过程中只需要修改一处

master:--disable-mfschunkserver
chunk: --disable-mfsmaster \

(2)复制相关配置文件,才可使用

cd /usr/local/mfs/etc/mfs cp mfschunkserver.cfg.dist mfschunkserver.cfg cp mfshdd.cfg.dist mfshdd.cfg ** #提供存储空间**

(3)编辑配置文件

vim mfschunkserver.cfg
MASTER_HOST = 192.168.37.128       #指向master

vim mfshdd.cfg                                          #末行插入
/data

mkdir /data
chown -R mfs.mfs /usr/local/mfs

(4)启动chunkserver

/usr/local/mfs/sbin/mfschunkserver start systemctl stop firewalld.service setenforce 0 netstat -ntap | grep mfs

4、挂载MFS分布式文件系统 #以php主机作为MFS的客户端,php主机需要另外安装两个重要软件mfs和fuse (1)安装fuse

yum -y install zlib-devel tar xvf fuse-2.9.2.tar.gz -C /opt cd /opt/fuse-2.9.2/ ./configure make &&make install

(2)配置环境变量

echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH">>/etc/profile source /etc/profile

(3)安装mfs

useradd mfs -s /sbin/nologin
tar xvf mfs-1.6.27-5.tar.gz -C /opt

cd /opt/mfs-1.6.27
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount

make &&make install

(4)挂载

mkdir -p /var/www/html/webphp/uploads/photos modprobe fuse ** #加载fuse模块到内核 ** /usr/local/mfs/bin/mfsmount /var/www/html/webphp/uploads/photos -H 192.168.43.166 echo "export PATH=/usr/local/mfs/bin:$PATH">>/etc/profile**#识别mfs中所有命令** source /etc/profile df -h

mfsgetgoal -r /var/www/html/webphp/uploads/photos ** #复制文本**

五、部署SVN

1、安装svn

yum -y install subversion svnserve --version #查看版本

2、为PHP程序员创建仓库目录repo

mkdir -p /opt/svn/repo ** #为PHP程序员创建仓库目录** svnadmin create /opt/svn/repo/ ** #创建一个新的仓库**

3、调整svn参数

vim /opt/svn/repo/conf/svnserve.conf
[general]	                   #总体配置,一定要顶格写,不然会报错

anon-access = none                    #需要进行身份验证
auth-access = write                     #认证用户具有写权限

password-db = /opt/svn/repo/conf/passwd	    #用户的密码文件
authz-db = /opt/svn/repo/conf/authz                   #权限设置

4、为PHP程序员创建账户并赋权

vim /opt/svn/repo/conf/passwd
【users】
alpha = 123123

vim /opt/svn/repo/conf/authz        #末行添加
[/]                                                    #根目录即/opt/svn/repo目录下
alpha = r    

[/webphp]
alpha = rw                            #用户对此目录有读写的权限,用户导入PHP代码 

5、开启svn服务

systemctl stop firewalld.service setenforce 0 svnserve -d -r /opt/svn/repo/
netstat -tunpl | grep svnserve //关闭svnserve服务通过kill进程来实现,ps -ef | grep svn

6、创建并初始化webphp目录

mkdir /opt/svn/repo/webphp cd /opt/svn/repo svn import webphp file:///opt/svn/repo/webphp -m "initial" #初始化目录 cd /opt/svn/repo/webphp touch 123.txt 2222.txt #写入内容

7、测试:映射SVN仓库webphp服务目录到Nginx和PHP服务器的webphp服务目录上

//Nginx主机: cd /usr/local/nginx/html/ svn co svn://192.168.43.147/webphp

//php主机 cd /var/www/html/ svn co svn://192.168.43.147/webphp

//根据提示,先输入主机本地root用户密码,再登录用户密码,可以看到将webphp仓库中的内容都同步到nginx服务器的指定路径下了。