用SVN、LNMP和MySQL三種環境 部署一個社交網站

 

簡介 php

SVN html

SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,相較於RCS、CVS,它採用了分支管理系統,它的設計目標就是取代CVS。互聯網上不少版本控制服務已從CVS遷移到Subversion。說得簡單一點SVN就是用於多我的共同開發同一個項目,共用資源的目的。svn服務器有2種運行方式:獨立服務器和藉助apache運行。前端

MFS分佈式文件系統 mysql

比NFS分佈式文件系統更增強大,其餘分佈式式文件系統還有HDFS分佈式文件系統和fastDFS分佈式文件系統等linux

MySQL nginx

此案列環境限於本人機器設備配置問題,只配置了mysql主從複製,若是是真實環境中,還能夠配置雙機熱備,藉助amoeba環境實現讀寫分離,負載均衡等功能,大型網絡環境還能夠配置MySQL集羣。c++

 

案例環境 程序員

本案列採用PHP語言開發,爲了管理PHP程序員開發的代碼,要求搭建SVN服務器進行版本控制。社交網站的第一個版本部署在LNMP平臺上,前端爲Nginx,經過fastcgi協議訪問後端的PHP服務器。爲了保證數據安全,要求搭建MySQL數據庫主從集羣。web

社交網站包含用戶的相冊功能,容許用戶上傳照片,上傳照片須要使用共享存儲來存放。使用MFS分佈式文件系統,並將MFS掛載到PHP服務器的相關目錄下。sql

 

拓撲圖

 

微信截圖_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.有了些許知識體系框架感受,繼續增強。

相關文章
相關標籤/搜索