简介

SVN

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。svn服务器有2种运行方式:独立服务器和借助apache运行。

MFS分布式文件系统

比NFS分布式文件系统更加强大,其他分布式式文件系统还有HDFS分布式文件系统和fastDFS分布式文件系统等

MySQL

此案列环境限于本人机器设备配置问题,只配置了mysql主从复制,如果是真实环境中,还可以配置双机热备,借助amoeba环境实现读写分离,负载均衡等功能,大型网络环境还可以配置MySQL集群。

 

案例环境

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

社交网站包含用户的相册功能,允许用户上传照片,上传照片需要使用共享存储来存放。使用MFS分布式文件系统,并将MFS挂载到PHP服务器的相关目录下。

 

拓扑图

 

微信截图_20180930084203.png

主机环境表

微信截图_20180930105559.png 

基本步骤

部署SVN服务器,为PHP程序员创建repo目录的访问账户,通知程序员可
以导入代码 部署 MYSQL主从服务器,根据PHP程序员的要求创建数据库与表 部署 Nginx服务器 部署PHP服务器 部署MFS,将MFS文件系统挂载在前端PHP服务器的相关目录下 保证数据库服务、PHP服务、 Nginx服务依次启动,检查 Nginx、PHP与数据库服务器是否正常工作。

 

实施与部署

全体主机内部环境

关闭防火墙

vim /etc/selinux/config

SELINUX=disabled

systemctl stop firewalld.service

setenforce 0

设置主机ip地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33

service network restart

 

SVN 部署 (IP:192.168.137.10)

yum仓库安装

yum install subversion –y

创建仓库目录repo

mkdir -p /opt/svn/repo    #创建目录
svnadmin create /opt/svn/repo    #创建一个新的仓库

配置svnserve.conf文件

vim /opt/svn/repo/conf/svnserve.conf
[general]

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

 

创建一个用户配置passwd文件

vim /opt/svn/repo/conf/passwd
lisi=abc123 #格式:用户名=密码

配置authz文件给lisi用户赋权读写

vim /opt/svn/repo/conf/authz
[/]
lisi = r   #在/opt/svn/repo目录下有读取权限
[/webphp]
lisi = rw  #对于webphp木有有读写权限,用于上传下载代码

 

导入webphp文件夹

mkdir /opt/svn/repo/webphp     #创建webphp文件夹
touch 123.txt     #导入webphp测试文件
svn import webphp file:///opt/svn/repo/webphp -m "initial" #初始化webphp目录

 

部署Nginx服务器 (IP:192.168.137.11)

首先安装环境包,依赖包

yum install pcre-devel zlib-devel -y
useradd -M -s /sbin/nologin nginx  #添加管理nginx的用户和组
tar zxvf nginx-1.6.0.tar.gz -C /opt/  #将软件包解压到opt目录
cd /opt/nginx-1.6.0/    #过去
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install
#编译安装

修改nginx配置文件中的fastcgi访问接口,用于访问PHP页面。
vim /usr/local/nginx/conf/nginx.conf
location / {
            root   html/webphp;
            index  index.html index.htm;
        }

        location ~\/php$ {
            root /var/www/html/webphp;  #指定PHP服务器站点家目录
         fastcgi_pass 192.168.137.12:9000;  #指定PHP服务器地址及端口
        fastcgi_index index.php;
        include fastcgi.conf;
        }

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin    #优化命令

开启服务


nginx
netstat -ntap | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      58333nginx: master

80端口开启 即为 服务开启成功

 

 

部署PHP服务器  (IP:192.168.137.12)

ps:通过配置php-fpm进程监听9000端口来接受Nginx的请求

安装环境包和依赖包


yum install gd libxml2-devel libjpeg-devel libpng-devel mysql-devel gcc gcc-c++ -y
tar zxvf php-5.3.28.tar.gz -C /opt/      #解压
cd /opt/php-5.3.28/     #过去目录

添加php管理进程用户/编译安装


useradd -M -s /sbin/nologin php
./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
make && make install

修改配置文件和进行一些优化


cp php.ini-development /usr/local/php5/php.ini #复制配置文件模版
ln -s /usr/local/php5/bin/* /usr/local/bin/   #识别php命令
ln -s /usr/local/php5/sbin/* /usr/local/sbin/  #识别php命令

PHP安装加速器


tar xf /mnt/ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz -C /opt/   #加速器解压到opt目录
cd /opt/ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/
cp ZendGuardLoader.so /usr/local/php5/lib/php  #优化加速模块路径

PHP识别加速器


vim /usr/local/php5/php.ini
[Zend Guard Loader]
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1

开启fpm模块


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

;pid = run/php-fpm.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

listen = 0.0.0.0:9000  #监听所有ip

启动php-fpm进程


/usr/local/sbin/php-fpm
netstat -ntap | grep 9000    #过滤9000端口

tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      111029/php-fpm: mas

配置php服务器站点目录


mkdir -p /var/www/html/webphp
vim /var/www/html/webphp/index.php
123

 

部署MySQL 主从服务  (IP:192.168.137.13/192.168.137.14)

安装依赖包


yum install gcc gcc-c++ make cmake ncurses-devel bisonlibaio-devel -y
useradd -s /sbin/nologin  mysql


编译安装


useradd  -s /sbin/nologin mysql
mkdir -p /usr/local/mysql
tar xf mysql-5.5.24.tar.gz -C /opt/
cd /opt/mysql-5.5.24/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/home/mysql \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306
make && make install

优化

chown -R mysql.mysql /usr/local/mysql #更改主文件夹的属主和属组
cp support-files/my-medium.cnf /etc/my.cnf

vim /etc/profile   #修改系统环境变量
最后一行添加:
export PATH=$PATH:/usr/local/mysql/bin/

source /etc/profile  #使环境变量文件刷新生效

cp support-files/mysql.server /etc/init.d/mysqld
#方便mysqld被service服务管理
chkconfig --add mysqld

初始化mysql
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql

将mysql.sock文件建立软链接
ln -s /var/lib/mysql/mysql.sock  /home/mysql/mysql.sock

修改mysql启动脚本文件
vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/home/mysql
chmod +x /etc/init.d/mysqld

启动与创建用户

systemctl daemon-reload
service mysqld start
mysqladmin -u root -p password '123123'
mysql -u root –p

Master服务器配置

vim /etc/my.cnf
[mysqld]
server-id       = 1   #server-id不能一样
log-slave-updates=true #添加此行,允许同步,允许客户机连接同步更新

启动授权

systemctl restart mysqld.service
mysql -u root -p
授权从服务器
grant replication slave on *.* to 'adm'@'192.168.137.%' identified by '123';

#授权给192.168.137.0网段的服务器同步权限
flush privileges;  #刷新
show master status;
#记住服务器的状态
master-bin.000003   470

MySQL从服务器配置

vim /etc/my.cnf
[mysqld]
#log-bin=mysql-bin #将49行二进制日志文件注释掉,产生文件,造成浪费
server-id = 2 #约57行,设置服务器id,这里注意不要和主服务器IP地址重复
relay-log=relay-log-bin #添加此项,IO线程通过读取日志要放入relay-log中
relay-log-index=slave-relay-bin.index #添加此项,索引日志位置

启动授权

systemctl restart mysqld.service

mysql
change master to master_host='192.168.137.13',master_user='adm',master_password='123',master_log_file='master-bin.000003',master_log_pos=470;
#指定主服务器,登录账号和密码,同步文件和文件偏移量
start slave;
show slave status \G;
Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
# 两条YES则MYSQL主从复制完成

 

MFS 文件系统部署
master server( 192.168.137.17)
metalogger (192.168.137.18)
chunk1  (192.168.137.19)
chunk2  (192.168.137.20)
chunk3 ( 192.168.137.21)

搭建Master Server

安装软件

curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS //添加键值
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo  //添加适当的库条目
yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli –y

启动服务

systemctl start moosefs-master
systemctl enable moosefs-master
netstat -ntap | grep mfs

搭建MetalLogger Server

安装

curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS //添加键值
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo  //添加适当的库条目
yum install moosefs-metalogger –y

修改配置文件

vim /etc/mfs/mfsmetalogger.cfg

MASTER_HOST = 192.168.137.17          //第52行,去除注释,改地址指向主服务器。

启动服务

systemctl start moosefs-metalogger
systemctl enable moosefs-metalogger
netstat -ntap | grep mfs

搭建Chunk Server

这三台Chunk Server的搭建步骤是完全相同

安装

curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS //添加键值
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo  //添加适当的库条目
yum install moosefs-chunkserver –y

修改配置文件

修改一

vim /etc/mfs/mfschunkserver.cfg

MASTER_HOST = 192.168.137.17     //第77行,将地址指向主服务器

修改二

vim /etc/mfs/mfshdd.cfg
/gongxiang            //在末行添加共享目录

mkdir /gongxiang      //创建共享目录

chown -R mfs:mfs /gongxiang    //为共享目录授权

启动服务

systemctl start moosefs-chunkserver
systemctl enable moosefs-chunkserver
netstat -ntap | grep mfs

 

Client搭建在PHP上作为用户上传图片的存储。

php  (192.168.137.12)

安装

curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS //添加键值
curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo  //添加适当的库条目
yum install moosefs-client –y

加载fuse模块至内核

modprobe fuse

挂载

mfsmount /var/www/html/webphp/uploads/photos -H 192.168.137.17  #将MFS 文件系统 挂载到 PHP服务器上

df -hT  # 查看挂载情况

 

 

总结


出错方面

1.配置MySQL主从时,报错Last_IO_Error: error connecting to master…

解决方法

排查发现master的端口号更新了,重新授权解决。

2.yum时出现“Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=5&;arch=i386&;repo=addons error ”错误

解决方法

好像static模式会出现这种情况,没懂什么原因,切换DHCP模式刷新网卡解决。

3.PHP挂载MFS时出现fuse: if you are sure this is safe, use the 'nonempty' mount option..

解决方法

产生这种问题的原因是因为如果挂载目录下的文件名和挂载后的产生的文件名如果相同的话,系统会产生困扰,所以最好避免这种情况的发生。当然如果你确定安全的话就在挂载时加上nonempty命令就可以了

-o nonempty


其他方面

1.巩固了LNMP,MySQL,MFS知识。

2.扩展和强化了项目意识。

3.认识到了MySQL集群的用途。

4.发现原来笔记本可以开十台虚拟机还不卡。

5.了解到自身排错能力的逊色,需要多多磨练。

6.有了些许知识体系框架感觉,继续加强。