概述:
社交网站的第一个版本部署在LNMP平台之上,前段为Nginx服务器,通过fastcgi协议访问后端的PHP服务器。为了保证数据安全,要求搭建MySQL数据库主从集群。
项目介绍:
本项目案例结合SVN、LNMP和MySQL三种环境,部署一个社交网站,本社交网站采用PHP语言开发,搭建SVN服务器进行版本控制和集中管理PHP程序员开发的代码,以Nginx作为前端服务器,通过fastcgi协议访问后端的PHP服务器,调用PHP页面;为保证数据安全,搭建MySQL主从复制环境存储用户重要数据;另外搭建MFS分布式文件系统来存储用户照片。
项目实验图解:
项目案例拓扑图:
网络关系原理如下图所示:
案例实施步骤:
* 部署SVN服务器,为PHP程序员创建repo目录的访问账户,通知程序员可以导入代码。
* 部署MySQL主从服务器,根据PHP程序员的要求创建数据库与表。
* 部署Nginx服务器。
* 部署PHP服务器。
* 部署MFS,将MFS文件系统挂载在前端PHP服务器的相关目录下。
* 通知上线部署人员可以发布上线。
* 保证数据库服务、PHP服务、Nginx服务依次启动,并通知测试人员开始测试,网站维护人员检查Nginx、PHP与数据库服务器是否正常工作。
接下来部署实验:
环境准备:
主机 | 操作系统 | IP地址 | 主要软件 |
---|---|---|---|
Nginx | CentOS7.5 x86_64 | 172.20.10.9 | nginx-1.12.0.tar.gz |
PHP | CentOS7.5 x86_64 | 172.20.10.10 | php-5.6.11.tar.bz2/ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz/ mfs-1.6.27-5.tar.gz/fuse-2.9.2.tar.gz |
MySQL Master | CentOS7.5 x86_64 | 172.20.10.11 | mysql-5.5.24.tar.gz |
MySQL Slave | CentOS7.5 x86_64 | 172.20.10.12 | mysql-5.5.24.tar.gz |
Master Server | CentOS7.5 x86_64 | 172.20.10.13 | mfs-1.6.27-5.tar.gz |
MetaLogger | CentOS7.5 x86_64 | 172.20.10.14 | mfs-1.6.27-5.tar.gz |
Chunk Server01 | CentOS7.5 x86_64 | 172.20.10.2 | mfs-1.6.27-5.tar.gz |
Chunk Server02 | CentOS7.5 x86_64 | 172.20.10.3 | mfs-1.6.27-5.tar.gz |
SVN | CentOS7.5 x86_64 | 172.20.10.4 | subversion 1.7.14 |
实验过程:
注意:1. 所有下载好需要安装的软件包都存放在根目录下;2.每次服务配置文件改完即重启服务确保实验顺利。
- 部署SVN服务器:
安装SVN:
* systemctl stop firewalld.service
* setenforce 0
* yum install -y subversion #安装SVN
* svnserve --version #查看版本
为PHP程序员创建仓库 目录repo:
* mkdir -p /opt/svn/repo/ #创建目录
* svnadmin create /opt/svn/repo/ #创建一个新的仓库
* [general] #总体配置
* vim /opt/svn/repo/conf/svnserve.conf # 修改配置
* anon-access = none #匿名用户没有任何权限
* auth-access = write #认证用户具有写权限
* password-db = /opt/svn/repo/conf/passwd #用户的密码文件
* authz-db = /opt/svn/repo/conf/authz #用户信息文件,主要是权限内容
* svnserve -d -r /opt/svn/repo/
* netstat -tunlp | grep svnserve
#监听端口3690
* vim /opt/svn/repo/conf/passwd
* [users]
* zhangsan = abc123 #格式:用户名=用户密码
* sysadmin = abc123
* vim /conf/authz
* [/]
* zhangsan = r #根目录即/opt/svn/repo目录下,zhangsan和sysadmin具有读的权限
* sysadmin = r
* [/webphp]
* zhangsan = rw #zhangsan和sysadmin用户对此目录有读写的权限,用户导入PHP代码
* sysadmin = rw
* mkdir /opt/svn/repo/webphp
* svn import webphp/ file:///opt/svn/repo/webphp -m "初始化svn目录"
-
部署MySQL主从服务器:
这里安装两台MySQL服务器直接用如下写好的shell脚本执行自动安装启动:#!/bin/bash yum -y install ncurses-devel cmake gcc gcc-c++ ncurses bison libaio-devel cd ~/ tar xzvf mysql-5.5.24.tar.gz cd mysql-5.5.24/ 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/ -DWITH_MYISAM_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 \cp support-files/my-medium.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 echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile source /etc/profile useradd -s /sbin/nologin mysql chown -R mysql.mysql /usr/local/mysql /usr/local/mysql/scripts/mysql_install_db --user=mysql --ldata=/var/lib/mysql --basedir=/usr/local/mysql --datadir=/home/mysql sed -i '46c basedir=/usr/local/mysql' /etc/init.d/mysqld sed -i '47c datadir=/home/mysql' /etc/init.d/mysqld service mysqld start netstat -anpt | grep 3306
执行脚本安装完成、启动之后查看监听端口:
修改MySQL主服务器配置文件:
登录MySQL程序,给从服务器授权:
主服务器上给PHP授权:
接下来修改MySQL从服务器配置文件:
启动从服务器之后查看监听端口:
登录MySQL从服务器配置同步:
在从服务器中可以验证,可以查看到从主服务器上同步过来的库daima: -
部署Nginx服务器:
这里安装Nginx服务器直接用如下写好的shell脚本执行自动安装启动:#!/bin/bash yum -y install pcre-devel zlib-devel gcc gcc-c++ make useradd -M -s /sbin/nologin nginx tar xzvf nginx-1.12.0.tar.gz -C /opt cd /opt/nginx-1.12.0/ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module make && make install ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ nginx netstat -antp | grep nginx
- 部署PHP服务器:
这里安装配置PHP服务器直接用如下写好的shell脚本执行自动安装启动: #!/bin/bash yum -y install gd libxml2-devel libjpeg-devel libpng-devel zlib-devel fontconfig-devel openssl-devel bzip2-devel cd ~/ tar xjvf php-5.6.11.tar.bz2 cd php-5.6.11/ ./configure --prefix=/usr/local/php5 --with-gd --with-zlib -with-config-file-path=/usr/local/php5 --enable-mbstring --with-jpeg-dir=/usr/lib --with-openssl --disable-ipv6 --enable-fpm make && make install cp php.ini-development /usr/local/php5/php.ini ln -s /usr/local/php5/bin/* /usr/local/bin/ ln -s /usr/local/php5/sbin/* /usr/local/sbin/ #配置php识别加速器 cd ~/ tar xzvf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz cd ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x cp ZendGuardLoader.so /usr/local/php5/lib/php sed -i '$a [Zend Guard Loader]\nzend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so\nzend_loader.enable=1' /usr/local/php5/php.ini #开启nginx的php支持 cd /usr/local/php5/etc/ cp php-fpm.conf.default php-fpm.conf useradd -M -s /sbin/nologin php sed -i '25s/;//g' /usr/local/php5/etc/php-fpm.conf sed -i '149,150s/nobody/php/g' /usr/local/php5/etc/php-fpm.conf sed -i '235s/5/50/g' /usr/local/php5/etc/php-fpm.conf sed -i '240s/2/20/g' /usr/local/php5/etc/php-fpm.conf sed -i '245s/1/5/g' /usr/local/php5/etc/php-fpm.conf sed -i '250s/3/35/g' /usr/local/php5/etc/php-fpm.conf sed -i '/^listen/c listen = 0.0.0.0:9000' /usr/local/php5/etc/php-fpm.conf /usr/local/sbin/php-fpm netstat -tnal | grep 9000 mkdir -p /var/www/html
启动PHP-fpm进程 /usr/local/php/sbin/php-fpm 然后查看监听端口:
- 部署MFS:
* 安装环境包:
* yum install -y zlib-devel gcc gcc-c++ #安装所需的环境包
* useradd mfs -s /sbin/nologin #创建用户mfs
* 解压下载好的软件包并进行手工编译安装:
* * tar zxvf mfs-1.6.27-5.tar.gz -C /opt/
* cd mfs-1.6.27 #切换到opt/mfs-1.6.27下插入如下配置
* ./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
* make && make install
* 切换到配置文件下复制并去掉模板的dist后缀,开启配置文件:
* cd /usr/local/mfs/etc/mfs/
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsexports.cfg.dist mfsexports.cfg
cp mfstopology.cfg.dist mfstopology.cfg
* cd /usr/local/mfs/var/mfs/
cp metadata.mfs.empty metadata.mfs
* 关闭防火墙、关闭增强性安全功能:
* systemctl stop firewalld.service
* setenforce 0
* /usr/local/mfs/sbin/mfsmaster start #开启服务
* ps -ef | grep mfs #查看监听状态
* /usr/local/mfs/sbin/mfsmaster -s #停止
到此master server已经搭建完成,接下来搭建metalogger server:
* 安装编译环境、关闭防火墙、关闭增强性安全功能:
* yum install -y zlib-devel gcc gcc-c++
* systemctl stop firewalld.service
* setenforce 0
创建mfs用户,解压软件包进行手工编译:
* useradd -s /sbin/nologin mfs
* tar xzvf mfs-1.6.27-5.tar.gz -C /opt/
* cd mfs-1.6.27
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount
* make && make install
切换到配置文件下复制并去掉模板的dist后缀,开启配置文件:
* cd /usr/local/mfs/etc/mfs/
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsexports.cfg.dist mfsexports.cfg
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
* vim mfsmetalogger.cfg
MASTER_HOST = 172.20.10.13 去掉#注释 添加主机地址
* cd /usr/local/mfs/var/mfs
mv metadata.mfs.empty metadata.mfs
* /usr/local/mfs/sbin/mfsmetalogger start #开启服务
到此metalogger server已经搭建完成,接下来搭建两台节点服务器 chunk server
先搭建第一台chunk server:
* systemctl stop firewalld.service
* setenforce 0
* yum install -y zlib-devel gcc gcc-c++
* useradd -s /sbin/nologin mfs
* tar xzvf 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-mfsmount
* make && make install
* cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
* vim mfschunkserver.cfg
MASTER_HOST = 172.20.10.13 去掉#注释 添加主机地址
* vim mfshdd.cfg
/data #末尾添加`` 提供存储空间
* mkdir /data
* chown -R mfs:mfs /data
* /usr/local/mfs/sbin/mfschunkserver start
* netstat -ntap
* 提示: 第一台 chunk server搭建完成,第二台和第一台安装配置是一样的,这里就不再写了。
接下来配置PHP客户端:
* systemctl stop firewalld.service
* setenforce 0
* yum install -y zlib-devel
* tar xzvf fuse-2.9.2.tar.gz -C /opt/
* cd /opt/fuse-2.9.2
./configure
* make && make install
* vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH #末尾插入
* source /etc/profile
* 安装mfs客户端:
* useradd mfs -s /sbin/nologin
* 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 \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount
* make && make install
*mkdir -p /var/www/html/webphp/uploads/photos
* modprobe fuse #加载fuse模块到内核
*/usr/local/mfs/bin/mfsmount /var/www/html/webphp/uploads/photos -H 172.20.10.13
#指向master主机
* df -hT #查看挂载
* 优化客户端:
* vim /etc/profile
* export PATH=/usr/local/mfs/bin:$PATH #设置环境变量 在末尾插入
* cd /opt/mfs(可在mfs里写入内容进行验证:echo "this is test" > test.txt)
* source /etc/profile #重新加载
* mfsgetgoal -r 2 /opt/mfs/ #复制2份文件
* /usr/local/mfs/sbin/mfscgiserv
* http://172.20.10.13:9425 #客户端浏览器上进行访问测试