简介
SVN
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。svn服务器有2种运行方式:和借助运行。
MFS分布式文件系统
比NFS分布式文件系统更加强大,其他分布式式文件系统还有HDFS分布式文件系统和fastDFS分布式文件系统等
MySQL
此案列环境限于本人机器设备配置问题,只配置了mysql主从复制,如果是真实环境中,还可以配置双机热备,借助amoeba环境实现读写分离,负载均衡等功能,大型网络环境还可以配置MySQL集群。
案例环境
本案列采用PHP语言开发,为了管理PHP程序员开发的代码,要求搭建SVN服务器进行版本控制。社交网站的第一个版本部署在LNMP平台上,前端为Nginx,通过fastcgi协议访问后端的PHP服务器。为了保证数据安全,要求搭建MySQL数据库主从集群。
社交网站包含用户的相册功能,允许用户上传照片,上传照片需要使用共享存储来存放。使用MFS分布式文件系统,并将MFS挂载到PHP服务器的相关目录下。
拓扑图
主机环境表
基本步骤
部署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 nginxtcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 58333nginx: master80端口开启 即为 服务开启成功
部署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++ -ytar 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/libmake && 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.sozend_loader.enable=1
开启fpm模块
cd /usr/local/php/etccp php-fpm.conf.default php-fpm.confvim 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 = 35listen = 0.0.0.0:9000 #监听所有ip
启动php-fpm进程
/usr/local/sbin/php-fpmnetstat -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/webphpvim /var/www/html/webphp/index.php123
部署MySQL 主从服务 (IP:192.168.137.13/192.168.137.14)
安装依赖包
yum install gcc gcc-c++ make cmake ncurses-devel bisonlibaio-devel -yuseradd -s /sbin/nologin mysql编译安装
useradd -s /sbin/nologin mysqlmkdir -p /usr/local/mysqltar 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=3306make && make install
优化
chown -R mysql.mysql /usr/local/mysql #更改主文件夹的属主和属组
cp support-files/my-medium.cnf /etc/my.cnfvim /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/mysqldbasedir=/usr/local/mysqldatadir=/home/mysqlchmod +x /etc/init.d/mysqld
启动与创建用户
systemctl daemon-reload
service mysqld startmysqladmin -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-masternetstat -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-metaloggernetstat -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-chunkservernetstat -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.有了些许知识体系框架感觉,继续加强。