案例概述

公司的社交网站采用PHP语言开发,为了管理PHP程序员开发的代码,上级领导要求搭建SVN服务器进行版本控制。社交网站的第一个版本部署在LNMP平台之上,前端为 Nginx服务器,通过 fastcgi协议访问后端的PHP服务器。为了保证数据安全,
要求搭建 MYSQL数据库主从集群。

社交网站项目包含用户的相册功能,允许用户上传照片,上传照片需要使用共享
存储来存放。针对共享存储可用的开源方案有很多,如MFS、 FastDFS等。公
使用MFS分布式文件系统来实现,并将MFS挂载在PHP服务器的相关目录司决定

案例实施

根据公司的需求,实施过程大致分为以下步骤

部署SVN服务器,为PHP程序员创建repo目录的访问账户,通知程序员可
以导入代码

部署 MYSQL主从服务器,根据PHP程序员的要求创建数据库与表

部署 Nginx服务器

使用keepalived对Nginx服务器做热备

部署PHP服务器

部署MFS,将MFS文件系统挂载在前端PHP服务器的相关目录下

通知上线部署人员可以发布上线。

保证数据库服务、PHP服务、 Nginx服务依次启动,并通知测试人员开始测试,
网站维护人员检查 Nginx、PHP与数据库服务器是否正常工作。

本篇将部署SVN 与 LNMP 架构

SVN 部署 (IP:192.168.100.101)

yum install subversion     

subversion --version   ##查看版本

mkdir -p /opt/svn/repo    ##创建目录

svnadmin create /opt/svn/repo    ##创建一个新的仓库

vim /opt/svn/repo/conf/svnserve.conf

[general]       ##总体配置
anon-access = none     ##匿名用户没有任何权限
auth-access = write     ##认证用户具有写权限
passwd-db = /opt/svn/repo/conf/passwd     ##用户的密码文件
auth-db = /opt/svn/repo/conf/authz     ##用户信息文件

!!  svnserve.conf 配置文件有严格的格式要求,每一行前面不能有空格, 等号前后也都有空格。   
如果格式正确仍然无法验证,可以更改
passwd-db =passwd
auth-db = authz 
设为默认路径即可

svnserve -d -r /opt/svn/repo     ##启动svn服务
netstat -tunlp | grep svnserve
3690 端口开启

如需关闭svn服务 可以通过kill PID方式

为PHP 程序员zhangsan 建立账户,配置对 repo 仓库具有读写权限,并将账户信息及仓库目录信息反馈给PHP程序员。

vim /opt/svn/repo/conf/passwd
[users]
zhangsan=abc123  
## 格式   用户名=密码

vim /opt/svn/repo/conf/authz
[/]
zhangsan = r
[/webphp]
zhangsan = rw     ##zhangsan用户具有读写权限

mkdir /opt/svn/repo/webphp

svn import webphp file:///opt/svn/repo/webphp -m "init web"         ## 导入webphp

SVN部署完成, PHP程序员可以在WINDOWS / LINUX安装客户端, 然后导入代码

部署LNMP架构-Nginx 服务器 (IP : 192.168.100.102 )

yum install pcre-devel zlib-devel -y    ##安装依赖包

useradd -M -s /sbin/nologin nginx

tar xzvf nginx-1.6.0.tar.gz
cd nginx-1.6.0

./configure  \
--prefix=/usr/local/nginx/     ##安装目录
--user=nginx          ##用户
--group=nginx         ##用户的基本组
--with-http_stub_status_module    ##开启监控模块

vim /usr/local/nginx/conf/nginx.conf

user nginx;

location / {
    root html/webphp;
    index index.html index.htm;
}

location ~\/php$ {
    root /var/www/html/webphp;
    fastcgi_pass 192.168.100.103:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
}

##配置后端PHP程序的fastcgi访问接口

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin   ##创建软连接 系统识别命令路径

nginx     ##开启服务
netstat -ntap | grep nginx
80端口开启 即为 服务开启成功

部署LNMP架构-PHP服务器 (IP : 192.168.100.103)

yum install gd libxml2-devel libjpeg-devel libpng-devel mysql-devel -y

useradd -M -s /sbin/nologin php
tar xzvf php-5.3.28.tar.ga
cd php-5.3.28

cp /usr/lib64/mysql/libmysqlclient.so.18.0.0 /usr/lib/libmysqlclient.so
## PHP默认去 /usr/lib 搜索 libmysqlclient.so

./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    ##配置mbstring和fpm模块
--enalbe-fpm
--with-jpeg-dir=/usr/dir

make && make install

cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf

vim php-fpm.conf

pid = run/php-fpm.pid    ##pid文件
user = php          ##用户
group = php         ##用户基本组
listen = 0.0.0.0:9000      ##监听端口
pm.max_childre = 50    ##子进程最大存在数
pm.start_servers = 20     ##服务开始时的子进程数
pm.min_spare_servers = 5    ##最小等待运行的子进程数
pm.max_spare_servers = 35   ##最大等待运行的子进程数

/usr/local/php/sbin/php-fpm     ##开启fpm模块

mkdir -p /var/www/html/webphp/

vim /var/www/html/webphp/index.php


##编辑PHP首页

通过keepalived 对nginx 服务器做热备

备份Nging服务器 IP地址为 192.168.100.104
配置如 第一台完全一样

yum install keepalived ipvsadm -y

在主服务器上

vim /etc/keepalived/keepalived.conf

global_defs {
    router_id LVS_01    ##本路由的名称
}

vrrp_instance_VI_1 {
    state MASTER    ##热备状态 此为主服务器状态
    interface ens33   ##承载虚拟IP的物理接口
    virtual_router_id 1    ##虚拟路由的ID,同热备组应在同一ID下
    priority 100     ##优先级  数值越大级别越高
    advert_int 1    ##通告间隔秒数
    virtual_ipaddress {    ##虚拟IP
        192.168.100.200
    }

}

在备份服务器上

vim /etc/keepalived/keepalived.conf
global_defs {
    router_id LVS_02    ##本路由的名称
}

vrrp_instance_VI_1 {
    state BACKUP   ##热备状态 此为备份服务器状态
    interface ens33   ##承载虚拟IP的物理接口
    virtual_router_id 1    ##虚拟路由的ID,同热备组应在同一ID下
    priority 90     ##优先级  数值越大级别越高
    advert_int 1    ##通告间隔秒数
    virtual_ipaddress {    ##虚拟IP
        192.168.100.200
    }

}

通过 systemctl start keepalived 开启服务

测试

通过浏览器访问 Nginx 虚拟IP 192.168.100.200/index.php 能够看到PHP界面

关掉主服务器的keepalived服务 访问虚拟IP仍然可以看到PHP界面