案列概述
公司的社交網站採用PHP語言開發,爲了管理PHP程序員開發的代碼,上級領導要求搭建SVN服務器進行版本控制。社交網站的第一個版本部署在LNMP平臺上,前端爲Nginx,通過fastcgi協議訪問後端的PHP服務器。爲了保證數據安全,要求搭建MySQL數據庫主從集羣。
社交網站包含用戶的相冊功能,允許用戶上傳照片,上傳照片需要使用共享存儲來存放。公司決定使用MFS分佈式文件系統,並將MFS掛載到PHP服務器的相關目錄下。
本案拓撲
案列環境
主機 | 操作系統 | IP地址 | 主要軟件 |
---|---|---|---|
Nginx | CentOS-7-x86_64 | 192.168.43.91 | nginx-1.6.3.tar.gz |
PHP | CentOS-7-x86_64 | 192.168.43.138 | php-5.6.30.tar.gz;fuse-2.9.2.tar.gz;mfs-1.6.27-5.tar.gz ; ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz |
Mysql-master | CentOS-7-x86_64 | 192.168.43.184 | mysql-5.6.36.tar.gz |
Mysql-slave | CentOS-7-x86_64 | 192.168.43.77 | mysql-5.6.36.tar.gz |
Masterserver | CentOS-7-x86_64 | 192.168.43.166 | mfs-1.6.27-5.tar.gz |
Metalogger | CentOS-7-x86_64 | 192.168.43.194 | mfs-1.6.27-5.tar.gz |
Chunk sever1 | CentOS-7-x86_64 | 192.168.43.80 | mfs-1.6.27-5.tar.gz |
Chunk sever2 | CentOS-7-x86_64 | 192.168.43.51 | mfs-1.6.27-5.tar.gz |
SVN | CentOS-7-x86_64 | 192.168.43.147 |
案例軟件包
鏈接:https://pan.baidu.com/s/1DpDfhZtbpco8_Mo5wCAr0g
提取碼:m3jj
案列實施
- 部署Nginx服務器
- 部署PHP服務器
- 部署Mysql主從服務器,提供PHP程序員操作權限
- 部署MFS,將MFS文件系統掛載在前端PHP服務器相關目錄下
- 部署SVN服務器,爲PHP程序員創建訪問賬戶,通知程序員可以導入代碼
- 保證各項服務開啓,檢查每項服務是否正常工作
一、部署Nginx服務
1、安裝nginx服務
yum install gcc gcc-c++ pcre pcre-devel zlib-devel make cmake ncurses-devel bison libaio-devel -y #安裝環境
useradd -M -s /sbin/nologin nginx #創建用戶
tar zxf nginx-1.6.3.tar.gz -C /opt/ #解壓nginx
cd /opt/nginx-1.6.3/
./configure \ #編譯安裝
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make && make install
2、設置nginx配置文件,使nginx支持php
3、開啓nginx服務
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #設置軟連接,讓系統識別nginx中的命令
systemctl stop firewalld.service
setenforce 0
nginx # 啓動nginx
netstat -ntap | grep nginx
二、部署PHP服務
1、安裝PHP服務
yum -y install gd libxml2-devel libjpeg-devel libpng-devel fontconfig-devel openssl-devel bzip2-devel gcc gcc-c++
useradd -M -s /sbin/nologin php
tar zxvf php-5.6.30.tar.gz -C /opt
cd /opt/php-5.6.30
./configure --prefix=/usr/local/php-fpm --enable-fpm --with-zlib --with-pdo-mysql --enable-mbstring --with-gd --with-png-dir=/usr/lib64 --with-jpeg-dir=/usr/lib64 --with-freetype-dir=/usr/lib64
make && make install
2、優化服務
cp php.ini-development /usr/local/php-fpm/php.ini #將配置文件模版複製出來
ln -s /usr/local/php-fpm/bin/ /usr/local/bin/
ln -s /usr/local/php-fpm/sbin/ /usr/local/sbin/
#以上兩項都是讓系統能夠識別php相關命令
3、爲PHP安裝加速器
tar zxvf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz -C /opt/#將加速器解壓到指定目錄下
cd /opt/ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x
cp ZendGuardLoader.so /usr/local/php-fpm/lib/php#將加速器模塊放在能夠識別的路徑
4、配置PHP識別加速器
vi /usr/local/php-fpm/php.ini
[Zend Guard Loader]
zend_extension=/usr/local/php-fpm/lib/php/ZendGuardLoader.so
zend_loader.enable=1
5、配置php-fpm進程,開啓nginx的PHP支持
cd /usr/local/php-fpm/etc/
cp php-fpm.conf.default php-fpm.conf
vi php-fpm.conf
pid = run/php-fpm.pid
user = php
group = php
pm.max_children=50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
6、啓動php-fpm進程
/usr/local/sbin/php-fpm
netstat -tnal | grep 9000
systemctl stop firewalld.service
setenforce 0
7、訪問nginx測試
//在php主機新建一個php測試頁面
mkdir -p /var/www/html/webphp#創建站點目錄
cd /var/www/html/webphp/
echo "hello,everyone">index.php #創建站點目錄首頁
//通過外部瀏覽器訪問192.168.43.91/index.php
三、部署Mysql
mysql安裝
1、安裝mysql(主、從兩臺相同操作)
yum install gcc gcc-c++ make cmake ncurses-devel bison libaio-devel autoconf -y
useradd -s /sbin/nologin mysql
tar zxf mysql-5.6.36.tar -C /opt
mkdir /usr/local/mysql
cd /opt/mysql-5.6.36.tar
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/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_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
2、優化服務
cp support-files/my-default.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 # 35 模式啓動
echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile #添加環境變量
source /etc/profile #加載環境變量
chown -R mysql.mysql /usr/local/mysq #權限設置
3、初始化數據庫
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
4、修改啓動腳本,啓動服務
ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock # 建立sock軟鏈接
vi /etc/init.d/mysqld # 修改啓動腳本
basedir=/usr/local/mysql
datadir=/home/mysql
systemctl stop firewalld.service
setenforce 0
service mysqld start
netstat -ntap | grep 3306
mysql主從複製
1、修改mysql主服務器配置文件
vim /etc/my.cnf
server-id = 11 #server-id主從服務器不能一樣
log-bin=master-bin #主服務器日誌文件
log-slave-updates=true #從服務器更新二進制日誌
service mysqld restart
2、進mysql主數據庫提權
grant replication slave on . to 'myslave'@'192.168.43.%' identified by '123123'
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000003 | 499 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
3、修改mysql從服務器配置文件
vim /etc/my.cnf
server-id 22
log-bin=/usr/local/mysql/data/slave-bin
relay-log=realy-log-bin
relay-log-index=slave-relay-bin.inde
service mysqld restart
4、進mysql從數據庫設置同步
change master to master_host='192.168.43.184',master_user='myslave',master_password='123123',master_log_file='master-bin.000003',master_log_pos=499;#指定主服務器,同步文件和文件偏移量
mysql> start slave; #開啓同步
5、測試主從複製
//主服務器
//從服務器
6、爲PHP程序員設置使用賬戶
創建一個數據庫名字有自己定,這裏爲manager;
創建一個賬戶php,可以通過192.168.43網段的所有可用地址訪問manager數據庫,權限非常大,除了沒//有創建用戶並給其他用戶賦權的權力,其他權限都有。
這樣,只要把用戶名php,密碼和mysql的ip地址給開發程序員就可以了。
mysql>create database manager
mysql>grant all privileges on manager.* to 'php'@'192.168.43.%' identified by 'abc123';
四、部署MFS
1、搭建master server
(1)安裝mfs
yum install gcc gcc-c++ zlib-devel -y
useradd -s /sbin/nologin mfs #創建管理用戶
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 \ #運行masterserver的用戶
--with-default-group=mfs \ #運行masterserver的組
--disable-mfschunkserver \ #關閉節點服務
--disable-mfsmount #關閉客戶端服務
make && make install
(2)複製相關配置文件,纔可使用
cd /usr/local/mfs/etc/mfs
cp mfsexports.cfg.dist mfsexports.cfg #被掛載目錄及權限配置文件
cp mfsmaster.cfg.dist mfsmaster.cfg #主配置文件
cp mfstopology.cfg.dist mfstopology.cfg #拓撲架構感知
(3)配置防斷鏈
cd /usr/local/mfs/var/mfs
cp metadata.mfs.empty metadata.mfs #配置防斷鏈
chown -R mfs.mfs /usr/local/mfs
(4)啓動master server
/usr/local/mfs/sbin/mfsmaster start
systemctl stop firewalld.service
setenforce 0
(5)開啓監控服務
/usr/local/mfs/sbin/mfscgiserv
測試:192.168.43.166:9425
2、搭建metalogger server
(1)安裝mfs,此步奏和搭建Master Server的安裝過程一樣
(2)複製相關配置文件,纔可使用
cd /usr/local/mfs/etc/mfs
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
(3)編輯配置文件
vim mfsmetalogger.cfg
MASTER_HOST = 192.168.43.166 #指向master
(4)啓動metalogger server
/usr/local/mfs/sbin/mfsmetalogger start
systemctl stop firewalld.service
setenforce 0
netstat -ntap | grep mfsmetalogger
3、搭建Chunk Server
本案中搭建chunk server同樣操作
(1)安裝mfs,此步奏和搭建Master Server的安裝過程基本一樣,配置過程中只需要修改一處
master:--disable-mfschunkserver\
chunk: --disable-mfsmaster \
(2)複製相關配置文件,纔可使用
cd /usr/local/mfs/etc/mfs
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg #提供存儲空間
(3)編輯配置文件
vim mfschunkserver.cfg
MASTER_HOST = 192.168.37.128 #指向master
vim mfshdd.cfg #末行插入
/data
mkdir /data
chown -R mfs.mfs /usr/local/mfs
(4)啓動chunkserver
/usr/local/mfs/sbin/mfschunkserver start
systemctl stop firewalld.service
setenforce 0
netstat -ntap | grep mfs
4、掛載MFS分佈式文件系統
#以php主機作爲MFS的客戶端,php主機需要另外安裝兩個重要軟件mfs和fuse
(1)安裝fuse
yum -y install zlib-devel
tar xvf fuse-2.9.2.tar.gz -C /opt
cd /opt/fuse-2.9.2/
./configure
make &&make install
(2)配置環境變量
echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH">>/etc/profile
source /etc/profile
(3)安裝mfs
useradd mfs -s /sbin/nologin
tar xvf 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
(4)掛載
mkdir -p /var/www/html/webphp/uploads/photos
modprobe fuse #加載fuse模塊到內核
/usr/local/mfs/bin/mfsmount /var/www/html/webphp/uploads/photos -H 192.168.43.166
echo "export PATH=/usr/local/mfs/bin:$PATH">>/etc/profile#識別mfs中所有命令
source /etc/profile
df -h
mfsgetgoal -r /var/www/html/webphp/uploads/photos #複製文本
五、部署SVN
1、安裝svn
yum -y install subversion
svnserve --version #查看版本
2、爲PHP程序員創建倉庫目錄repo
mkdir -p /opt/svn/repo #爲PHP程序員創建倉庫目錄
svnadmin create /opt/svn/repo/ #創建一個新的倉庫
3、調整svn參數
vim /opt/svn/repo/conf/svnserve.conf
[general] #總體配置,一定要頂格寫,不然會報錯
anon-access = none #需要進行身份驗證
auth-access = write #認證用戶具有寫權限
password-db = /opt/svn/repo/conf/passwd #用戶的密碼文件
authz-db = /opt/svn/repo/conf/authz #權限設置
4、爲PHP程序員創建賬戶並賦權
vim /opt/svn/repo/conf/passwd
【users】
alpha = 123123
vim /opt/svn/repo/conf/authz #末行添加
[/] #根目錄即/opt/svn/repo目錄下
alpha = r
[/webphp]
alpha = rw #用戶對此目錄有讀寫的權限,用戶導入PHP代碼
5、開啓svn服務
systemctl stop firewalld.service
setenforce 0
svnserve -d -r /opt/svn/repo/
netstat -tunpl | grep svnserve
//關閉svnserve服務通過kill進程來實現,ps -ef | grep svn
6、創建並初始化webphp目錄
mkdir /opt/svn/repo/webphp
cd /opt/svn/repo
svn import webphp file:///opt/svn/repo/webphp -m "initial" #初始化目錄
cd /opt/svn/repo/webphp
touch 123.txt 2222.txt #寫入內容
7、測試:映射SVN倉庫webphp服務目錄到Nginx和PHP服務器的webphp服務目錄上
//Nginx主機:
cd /usr/local/nginx/html/
svn co svn://192.168.43.147/webphp//php主機
cd /var/www/html/
svn co svn://192.168.43.147/webphp
//根據提示,先輸入主機本地root用戶密碼,再登錄用戶密碼,可以看到將webphp倉庫中的內容都同步到nginx服務器的指定路徑下了。