简介
公司的社交网站采用PHP语言开发,为了管理PHP程序员开发的代码,上级领导要求搭建SVN服务器进行版本控制。社交网站的第一个版本部署在LNMP平台上,前端为Nginx,通过fastcgi协议访问后端的PHP服务器。为了保证数据安全,要求搭建MySQL数据库主从集群。
社交网站包含用户的相册功能,允许用户上传照片,上传照片需要使用共享存储来存放。公司决定使用MFS分布式文件系统,并将MFS挂载到PHP服务器的相关目录下。
实验环境
主机名称 | 操作系统 | IP地址 | 主要软件 | |
---|---|---|---|---|
Nginx | CentOS_7.4_x86_64 | 192.168.100.71 | nginx-1.12.0.tar.gz | |
PHP | CentOS_7.4_x86_64 | 192.168.100.72 | php-5.5.38.tar.gz、mfs-1.6.27-5.tar.gz、fuse-2.9.2.tar.gz | |
MySQLMaster | CentOS_7.4_x86_64 | 192.168.100.73 | mysql-5.5.24.tar.gz | |
MySQLSlave | CentOS_7.4_x86_64 | 192.168.100.74 | mysql-5.5.24.tar.gz | |
MasterServer | CentOS_7.4_x86_64 | 192.168.100.75 | mfs-1.6.27-5.tar.gz | |
MetaLogger | CentOS_7.4_x86_64 | 192.168.100.76 | mfs-1.6.27-5.tar.gz | |
ChunkServer01 | CentOS_7.4_x86_64 | 192.168.100.77 | mfs-1.6.27-5.tar.gz | |
ChunkServer02 | CentOS_7.4_x86_64 | 192.168.100.78 | mfs-1.6.27-5.tar.gz | |
ChunkServer03 | CentOS_7.4_x86_64 | 192.168.100.79 | mfs-1.6.27-5.tar.gz | |
SVN | CentOS_7.4_x86_64 | 192.168.100.79 |
一、搭建Nginx
1、安装相应的工具包以及C语言编译器
[[email protected] ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++
2、创建Nginx进程用户
[[email protected] ~]# useradd -M -s /sbin/nologin nginx
3、配置、编译及编译安装Nginx源码包
[[email protected] ~]# tar xvf nginx-1.12.0.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/nginx-1.12.0/
[[email protected] nginx-1.12.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_stub_status_module
[[email protected] nginx-1.12.0]# make && make install
4、优化路径
[[email protected] ~]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
5、编辑主配置文件
[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
pid logs/nginx.pid; #打开注释
server {
……
location / {
root html;
index index.html index.htm;
}
#添加以下参数
location ~ \.php$ {
root /var/www/html/webphp; #指定PHP服务器站点目录
fastcgi_pass 192.168.100.72:9000; #指定PHP服务器地址及端口
fastcgi_index index.php;
include fastcgi.conf;
}
……
}
6、编辑启动脚本
[[email protected] ~]# vim /lib/systemd/system/nginx.service
[Unit]
Description=Nginx Server Control Script
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $PIDFile
ExecStop=/usr/bin/kill -s QUIT $PIDFile
[Install]
WanteBy=multi-user.target
7、启动服务
[[email protected] ~]# systemctl daemon-reload
[[email protected] ~]# systemctl start nginx.service
[[email protected] ~]# netstat -anpt | grep ‘:80‘
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4812/nginx: master
8、访问测试
二、搭建PHP
1、安装相关依赖包
[[email protected] ~]# yum -y install pcre-devel zlib-devel gcc gcc-c++
2、安装GD库关联软件
[[email protected] ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel zlib-devel fontconfig-devel openssl-devel bzip2-devel
3、解压配置安装php
[[email protected] ~]# tar zxvf php-5.5.38.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/php-5.5.38/
[[email protected] php-5.5.38]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-config-file-path=/usr/local/php5 --enable-mbstring --with-jpeg-dir --with-openssl --disable-ipv6 --with-mysql --with-mysqli --with-pdo-mysq --enable-fpm
[[email protected] php-5.5.38]# make && make install
4、创建PHP配置文件
[[email protected] php-5.5.38]# cp php.ini-development /usr/local/php5/php.ini
5、优化路径
[[email protected] ~]# ln -s /usr/local/php5/bin/ /usr/local/bin/
[[email protected] ~]# ln -s /usr/local/php5/sbin/ /usr/local/sbin/
6、为PHP安装加速器
[[email protected] ~]# tar xvfz ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
[[email protected] ~]# cd ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x/
[[email protected] php-5.3.x]# cp ZendGuardLoader.so /usr/local/php5/lib/php/
7、配置PHP识别加速器
[[email protected] ~]# vim /usr/local/php5/php.ini
#末行添加以下参数
[Zend Guard Loader]
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1
8、开启Nginx对PHP的支持
[[email protected] ~]# cd /usr/local/php5/etc/
[[email protected] etc]# cp php-fpm.conf.default php-fpm.conf
[[email protected] etc]# useradd -M -s /sbin/nologin php
[[email protected] etc]# vim php-fpm.conf
pid = run/php-fpm.pid #约25行,去掉注释,确定pid文件的位置
user = php #约149行,指定用户
group = php #约150行,指定组
pm.max_children = 50 #约230行,最多扩延进程数量,先改为50,一个水桶,它代表桶的容积
pm.start_servers = 20 #约235行,开启的进程数,改成20,启动时,开启的进程数
pm.min_spare_servers = 5 #约240行,最少空闲进程数是5,低于这个数,每秒钟会产生一个新的进程
pm.max_spare_servers = 20 #约245行,最多允许的空间进程数,客户不连接PHP,最多允许的空间进程数
listen = 0.0.0.0:9000 #约164行,监听任意网段地址访问
9、启动进程管理工具
[[email protected] ~]# /usr/local/sbin/php-fpm
[[email protected] ~]# netstat -anpt | grep ‘9000‘
10、创建站点目录
[[email protected] ~]# mkdir -p /var/www/html/webphp
[[email protected] ~]# cd /var/www/html/webphp/
11、编辑测试首页
[[email protected] webphp]# vim index.php
<?php
phpinfo();
?>
三、搭建Mysql
1、搭建Mysql5.5.24
搭建MySQL请参考我之前写的博文,有具体的详细步骤 http://blog.51cto.com/11905606/2170903
2、添加远程管理用户
[[email protected] ~]# mysql -u root -p123
mysql> grant all privileges on . to ‘admin‘@‘%‘ identified by ‘123‘;
3、编辑测试页面
[[email protected] ~]# cd /var/www/html/webphp/
[[email protected] webphp]# vim index.php
<?php
$link=mysql_connect(‘192.168.100.73‘,‘admin‘,‘123‘);
if($link) echo "Welcome to Mysql";
mysql_close();
?>
三、配置主从复制
1、两台主机安装NTP服务
[[email protected] ~]# yum -y install ntp
2、Master主机编辑NTP配置文件
[[email protected] ~]# vim /etc/ntp.conf
末行添加:
server 127.127.100.0 #指定本地服务器,注意这里设置的IP,我使用的是100网段
fudge 127.127.100.0 stratum 8 #指定层级,设为8级别 不需要跟别人同步,自己与自己同步
[[email protected] ~]# systemctl restart ntpd.service #重启服务
3、从节点设置时间同步
[[email protected] ~]# yum -y install ntp ntpdate
[[email protected] ~]# /usr/sbin/ntpdate 192.168.100.73
4、Master服务器配置
1).修改主配置文件
[[email protected] ~]# vim /etc/my.cnf
#在[mysqld]标签中编辑以下参数:
[mysqld]
log-bin=master-bin #约49行,将二进制日志修改为主服务器日志文件。
server-id = 11 #约57行,修改Mysql服务器id
log-slave-updates=true #添加此行,允许同步,允许客户机连接同步更新
2).重启服务
[[email protected] ~]# systemctl restart mysqld.service
3).授权从服务器
[[email protected] ~]# mysql -u root -p
mysql> grant replication slave on . to ‘adm‘@‘192.168.100.%‘ identified by ‘123‘;
mysql> flush privileges; #更新权限
mysql> show master status; #查看服务器的状态
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000002 | 254 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> quit
4、Slave服务器配置
1).修改主配置文件
[[email protected] ~]# vim /etc/my.cnf
#在[mysqld]标签中编辑以下参数:
[mysqld]
#log-bin=mysql-bin #将49行二进制日志文件注释掉,产生文件,造成浪费
server-id = 22 #约57行,设置服务器id,这里注意不要和主服务器IP地址重复
relay-log=relay-log-bin #添加此项,IO线程通过读取日志要放入relay-log中
relay-log-index=slave-relay-bin.index #添加此项,索引日志位置
2).重启服务
[[email protected] ~]# systemctl restart mysqld.service
3).配置主从同步
[[email protected] ~]# mysql -u root -p
mysql> change master to master_host=‘192.168.100.73‘,master_user=‘adm‘,master_password=‘123‘,master_log_file=‘master-bin.000002‘,master_log_pos=254;
#修改master指定主服务器主机名、用户名、密码、文件、位置
master_host: #指定主服务器主机名
master_user: #指定主服务器予权限的用户
master_password:#指定主服务器予权限的密码
master_log_fie: #指定主服务器二进制文件名称
master_log_pos: #指定主服务器二进制文件位置
mysql> start slave; #启动从服务器
mysql> show slave status\G; #查看服务器的状态
5、主从复制效果测试
1).master服务器添加数据
[[email protected] ~]# mysql -u root -p
mysql> create database db_test;
2).查看slave服务器
四、配置MFS分布式文件系统
1、搭建Master Server
1).安装相关编译器、工具包
[[email protected] ~]# yum -y install gcc gcc-c++ zlib-devel
2).创建进程用户
[[email protected] ~]# useradd -s /sbin/nologin mfs
3).安装mfs软件包
[[email protected] ~]# tar xvfz mfs-1.6.27-5.tar.gz
[[email protected] ~]# cd mfs-1.6.27/
[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
解析:
prefix #指定安装目录
with-default-user #指定运行用户
with-default-group #指定运行组
disable-mfschunkserver #禁用mfs的chunk功能
disable-mfsmount #禁言mfs的mount功能
[[email protected] mfs-1.6.27]# make && make install #编译及编译安装
4).修改相关文件信息
[[email protected] ~]# cd /usr/local/mfs/etc/mfs/
[[email protected] mfs]# cp mfsexports.cfg.dist mfsexports.cfg #挂载以及权限设定文件
[[email protected] mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg #主配置文件
[[email protected] mfs]# cp mfstopology.cfg.dist mfstopology.cfg #日志文件
[[email protected] ~]# cd /usr/local/mfs/var/mfs/
[[email protected] mfs]# cp metadata.mfs.empty metadata.mfs #master元数据文件
5).优化路径
[[email protected] ~]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/
6).启动服务
[[email protected] ~]# mfsmaster start
[[email protected] ~]# netstat -anpt | grep ‘mfs‘
2、搭建MetaLogger Server
1).安装相关编译器、工具包
[[email protected] ~]# yum -y install gcc gcc-c++ zlib-devel
2).创建进程用户
[[email protected] ~]# useradd -s /sbin/nologin mfs
3).安装mfs软件包
[[email protected] ~]# tar xvfz mfs-1.6.27-5.tar.gz
[[email protected] ~]# cd mfs-1.6.27
[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
[[email protected] mfs-1.6.27]# make && make install
4).修改主配置文件
[[email protected] ~]# cd /usr/local/mfs/etc/mfs/
[[email protected] mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[[email protected] mfs]# vim mfsmetalogger.cfg
5).优化路径
[[email protected] ~]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/
6).启动服务
[[email protected] ~]# mfsmetalogger start
[[email protected] ~]# netstat -anpt | grep ‘mfsmetalogger‘
3、搭建Chunk Server(三台主机搭建步骤相同,其余两台搭建过程略……)
1).安装相关编译器、工具包
[[email protected] ~]# yum -y install gcc gcc-c++ zlib-devel
2).创建进程用户
[[email protected] ~]# useradd -s /sbin/nologin mfs
3).安装mfs软件包
[[email protected] ~]# tar xvfz mfs-1.6.27-5.tar.gz
[[email protected] ~]# cd mfs-1.6.27
[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount
[[email protected] mfs-1.6.27]# make && make install
4).修改相应配置文件
[[email protected] ~]# cd /usr/local/mfs/etc/mfs/
[[email protected] mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[[email protected] mfs]# cp mfshdd.cfg.dist mfshdd.cfg
[[email protected] mfs]# vim mfschunkserver.cfg
[[email protected] mfs]# vim mfshdd.cfg
5).创建MFS分区目录
[[email protected] mfs]# mkdir /data
[[email protected] mfs]# chown -R mfs:mfs /data/
6).优化路径
[[email protected] ~]# ln -s /usr/local/mfs/sbin/* /usr/local/bin/
7).启动服务
[[email protected] ~]# mfschunkserver start
[[email protected] ~]# netstat -anpt | grep ‘mfschunkserver‘
五、MFS挂载
1、安装相关编译器、工具包
[[email protected] ~]# yum -y install gcc gcc-c++ zlib-devel
2、安装fuse软件包
[[email protected] ~]# tar xvfz fuse-2.9.2.tar.gz
[[email protected] ~]# cd fuse-2.9.2
[[email protected] fuse-2.9.2]# ./configure && make && make install
3、设置环境变量
[[email protected] ~]# vim /etc/profile
#末行添加
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[[email protected] ~]# source /etc/profile #重新加载系统环境变量配置文件
4、创建进程用户
[[email protected] ~]# useradd -s /sbin/nologin -M mfs
5、安装mfs软件包
[[email protected] ~]# tar xvfz mfs-1.6.27-5.tar.gz
[[email protected] ~]# cd mfs-1.6.27
[[email protected] mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmaster --enable-mfsmount
[[email protected] mfs-1.6.27]# make && make install
6、挂载MFS文件系统
[[email protected] ~]# modprobe fuse #加载fuse模块到内核
[r[email protected] mfs-1.6.27]# rm -rf /var/www/html/webphp/* #清空站点
[[email protected] ~]# /usr/local/mfs/bin/mfsmount /var/www/html/webphp/ -H 192.168.100.75 #挂载MFS
[[email protected] ~]# df -h #查看挂载情况
六、部署SVN服务器
1、安装SVN服务
[[email protected] ~]# yum install subversion -y
[[email protected] ~]# svnserve --version #查看版本信息
2、创建仓库目录
[[email protected] ~]# mkdir -p /opt/svn/repo #创建目录
[[email protected] ~]# svnadmin create /opt/svn/repo/ #创建仓库
[[email protected] ~]# cd /opt/svn/repo/
[[email protected] repo]# ls
3、修改主配置文件
[[email protected] ~]# vim /opt/svn/repo/conf/svnserve.conf
anon-access = none #约19行,匿名用户权限设置,可设置的值"red"、"write"、"none"
auth-access = write #约20行,认证用户权限设置,可设置的值"red"、"write"、"none"
password-db = /opt/svn/repo/conf/passwd #约27行,用户密码文件存放位置
authz-db = /opt/svn/repo/conf/authz #约34行,用户信息文件
4、启动服务
[[email protected] ~]# svnserve -d -r /opt/svn/repo/
-d:指定后台运行
-r:指定仓库路径
5、修改用户配置文件
[[email protected] ~]# cd /opt/svn/repo/conf/
[[email protected] conf]# vim passwd #编辑账户密码文件
#在[users]选项中添加以下参数
[users]
alpha = 123 #PHP程序员设置的账户。格式:"用户名 = 用户密码"
sysadmin = 123 #针对SVN服务器系统管理员账户
[[email protected] conf]# vim authz #编辑权限配置文件
#末行添加以下参数
[/] #"/"指的是SVN仓库目录也就是"/opt/svn/repo"
sysadmin = rw #管理员用户拥有"读写"权限
alpha = rw #PHP程序员拥有"读写"权限
[/webphp]
sysadmin = rw
alpha = rw
6、初始化目录
[[email protected] ~]# cd /opt/svn/repo/
[[email protected] repo]# mkdir webphp
[[email protected] repo]# touch webphp/abc.txt webphp/456.txt #创建测试文件
[[email protected] repo]# svn import webphp file:///opt/svn/repo/webphp/ -m "初始化SVN目录"
七、发布上线
1、上传Nginx服务器
[[email protected] ~]# yum install subversion -y
[[email protected] ~]# svn co svn://192.168.100.80/webphp
认证领域: <svn://192.168.100.80:3690> d53608c3-fa15-4f46-bbaf-b949f18f4bff
“root”的密码: #root密码
认证领域: <svn://192.168.100.80:3690> d53608c3-fa15-4f46-bbaf-b949f18f4bff
用户名: alpha
“alpha”的密码:
-----------------------------------------------------------------------
注意! 你的密码,对于认证域:
<svn://192.168.100.80:3690> d53608c3-fa15-4f46-bbaf-b949f18f4bff
只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。
你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?yes
A webphp/abc.txt
A webphp/456.txt
取出版本 2。
[[email protected] ~]# cd webphp/
[[email protected] webphp]# ls
2、上传PHP服务器
注意:PHP与Nginx上传相同,此处略……
原文地址:http://blog.51cto.com/11905606/2288060