论坛的搭建以及优化方案
部署社交平臺
實驗目的
- 學會搭建SVN服務器
- 學會部署社交網站
- 對關鍵服務器進行雙機熱備
- 學會對服務器調優
案例分析
公司的社交網站采用PHP語言開發,為了管理PHP程序員開發的代碼,上級領導要求搭建SVN服務器進行版本控制。社交網站的第個版木部署在LNMP平臺之上,前端為Nginx服務器,通過fastcgi 協議訪問后端的PHP服務器。為了保證數據安全,要求搭建MySQL數據庫主從集群。
社交網站項目包含用戶的相冊功能,允許用戶上傳照片,上傳照片需要使用共享存儲來存放。針對共享存儲可用的開源方案有很多,如MFS、FastDFS等。公司快定使用MFS分布式文件系統來實現,并將MFS掛載在PHP服務器的相關目錄下。本案例拓撲圖如圖5.1所示。
案例實施
根據公司的需求,實施過程大致分為以下步驟
- 部署SVN服務器,為PHP程序員創建repo目錄的訪問賬戶,通知程序員石以導入代碼。
- 部署MySQL主從服務器,根據PHP程序員的要求創建數據庫與表。
- 部署Nginx服務器。
- 部署PHP服務器。
-部署MFS,將MFS文件系統掛載在前端PHP服務器的相關目錄下。
-通知上線部署人員可以發布上線。
-保證數據庫服務、PHP服務、Nginx服務依次啟動,并通知測試人員開始測網站維護人員檢查Nginx、PHP與數據庫服務器是否正常工作。
部署SVN服務器
(1)安裝SVN
[root@localhost ~]# yum install -y subversion [root@localhost ~]# svnserve --version svnserve, version 1.7.14 (r1542130)compiled Nov 20 2015, 19:25:09 #//查看版本(2)為PHP程序員創建倉庫目錄repo
[root@localhost ~]# mkdir -p /opt/svn/repo #//創建目錄 [root@localhost ~]# svnadmin create /opt/svn/repo/ #//創建倉庫 [root@localhost ~]# ls !$ #//目錄創建完成后會生成所需要的配置文件 ls /opt/svn/repo/ conf db format hooks locks README.txt(3)調整SVN參數
[root@localhost ~]# vim /opt/svn/repo/conf/svnserve.conf anon-access = read #//把read改為none匿名用戶 auth-access = write #//認證用戶具有寫入權限 password-db = passwd #//把passwd改為 /opt/svn/repo/conf/passwd 用戶密碼密碼的存放路徑 authz-db = authz #//把authz改為 /opt/svn/repo/conf/authz 用戶信息存放路徑(4)創建用戶驗證密碼文件和用戶信息文件并啟動服務
[root@localhost ~]# cd /opt/svn/repo/conf/ [root@localhost conf]# ls #//對passwd文件和authz文件進行修改 authz passwd svnserve.conf [root@localhost conf]# vim passwd [users] admin = abc123 #//admin是PHP程序員創建的賬戶密碼為abc123 [root@localhost conf]# vim authz #//在文件最后一行創建 [/] #//對repo根目錄的操作權限 admin = r #//admin賬戶具有讀取權限 [/webphp] #//對根目錄下webphp目錄的權限 admin = rw #//admin賬戶具有讀取寫入權限 [root@localhost repo]# mkdir webphp #//在repo根目錄下創建需要操作的子目錄 [root@localhost repo]# svn import webphp file:///opt/svn/repo/webphp/ -m "初始化目錄" #//初始化導入webphp目錄Committed revision 1. [root@localhost repo]# svnserve -d -r /opt/svn/repo/ #//啟動svn服務 [root@localhost repo]# netstat -lnupt | grep svnserve #//查看端口 tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1918/svnserve部署Nginxf服務器對Nginx重要服務器做keepalived雙機熱備
(1)安裝keepalived
[root@localhost ~]# yum install keepalived -y [root@localhost ~]# vim /etc/keepalived/keepalived.conf #//修改配置文件 global_defs {notification_email {sysadmin@firewall.loc #//郵箱地址可以改為自己的郵箱地址在一臺服務區down掉后會通過郵件發送給你} router_id LVS_DEVEL #//可改可不改,從服務器上要改因為不能和主服務器重疊router是唯一標識這邊我該為了LVS_A從服務器要改為LVS_B #//刪除router_id下列四行vrrp_instance VI_1 {state MASTER #//主服務氣味MASTER從服務器為BASKUPinterface eth0 #//網卡改為本服務器網卡centos7的網卡是ens33virtual_router_id 51 #//keepalived組好主從要相同priority 100 #//優先級從服務器小于100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.32.188 #//默認有三個去掉兩個或者改為自己設定的VIP主從要一樣} #//把虛擬ip下面的全部刪除(2)啟動并查看VIP有沒有開啟
[root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# setenforce 0 #//關閉防火墻和setenforce [root@localhost ~]# systemctl start keepalived.service [root@localhost ~]# ps -ef | grep keepalived root 11384 1 0 13:19 ? 00:00:00 /usr/sbin/keepalived -D root 11385 11384 0 13:19 ? 00:00:00 /usr/sbin/keepalived -D root 11386 11384 0 13:19 ? 00:00:00 /usr/sbin/keepalived -D root 11405 10998 0 13:20 pts/2 00:00:00 grep --color=auto keepalived [root@localhost ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:3f:7f:08 brd ff:ff:ff:ff:ff:ffinet 192.168.32.209/24 brd 192.168.32.255 scope global dynamic ens33valid_lft 1184sec preferred_lft 1184secinet 192.168.32.188/32 scope global ens33 #//VIPvalid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe3f:7f08/64 scope link valid_lft forever preferred_lft forever #嘗試down主服務器的keepalived看一下188 #的虛擬IP會不會綁定到從服務器上驗證一下 #主服務器從新啟動keepalived,188 #端口又會回到主服務器上(3)安裝Nginx服務器
[root@localhost ~]# yum install pcre-devel zlib-devel gcc gcc-c++ make -y #//安裝語言開發包和工具 [root@localhost ~]# tar zxvf /abc/nginx-1.12.0.tar.gz -C /opt/ #//解壓源代碼包到/opt目錄下 [root@localhost ~]# useradd -M -s /sbin/nologin nginx #//創建管理用戶不允許本地登錄 [root@localhost ~]# cd /opt/nginx-1.12.0/ #//進入nginx解壓的文件夾進行編譯 [root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --user=nginx --group=nginx #//指定安裝路徑用戶和組 [root@localhost nginx-1.12.0]# make && make install #//用make 和 make install 轉換為系統可識別的文件(4)修改Nginx配置文件,需要配置PHP程序的fastcgi訪問接口
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conflocation / {root html; #//把html改為html/wedphpindex index.html index.htm;} #//在地下加入下面這段話location ~ \.php$ {root /var/www/html/webphp; #//頁面存放位置fastcgi_pass 192.168.32.209:9000; #//PHP服務器地址fastcgi_index index.php;include fastcgi.conf; [root@localhost ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #//建立軟連接便于啟動 [root@localhost ~]# nginx nginx: [emerg] unexpected end of file, expecting "}" in /usr/local/nginx/conf/nginx.conf:117 #//如果在啟動nginx中遇到這種報錯說明要在117行加一個這樣符號} [root@localhost ~]# nginx #//啟動 [root@localhost ~]# netstat -ntap | grep 80 #//查看端口號 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 14066/nginx: master部署PHP服務器
(1)安裝PHP
[root@localhost ~]# tar zxvf /abc/php-5.5.38.tar.gz -C /opt/ #//解壓源代碼包 [root@localhost ~]# yum -y install \ > gd \ > libxml2-devel \ > libjpeg-devel \ > libpng-devel \ > zlib-devel \ > fontconfig-devel \ > openssl-devel \ > bzip2-devel #//首先安裝GD庫及GD庫關聯程序 [root@localhost ~]# useradd -M -s /sbin/nologin php #//創建用戶不允許本地登錄 [root@localhost php-5.5.38]# cp /usr/lib64/mysql/libmysqlclient.so.18 /usr/lib/libmysqlclient.so #//PHP默認去/usr/lib搜索libmysqlclient.so.18[root@localhost php-5.5.38]# ./configure \ --prefix=/usr/local/php5 \ --with-gd \ --with-zlib \ --with-mysql=/usr/local/mysql \ --with-config-file-path=/usr/local/php5 \ --enable-mbstring \ --with-jpeg-dir \ --with-openssl \ --disable-ipv6 \ --enable-fpm------如果在執行操作中出現錯誤請按照以下操作如果沒有請跳過------------------------------- #注:在執行以上操作是出現一下錯誤 Note that the MySQL client library is not bundled anymore! #請查找到mysql.h文件,我們更改參數為--with-mysql=/usr,如果沒有的話,請安裝mysql-devel包, [root@localhost php-5.5.6]# find / -name mysql.h /usr/include/mysql/mysql.h [root@localhost php-5.5.6]# yum install mysql-devel -y ---------------------------------------------[root@localhost php-5.5.38]# make && make install #//轉換文件類型 [root@localhost php-5.5.38]# cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf [root@localhost php-5.5.38]# vim /usr/local/php5/etc/php-fpm.conf ;pid = run/php-fpm.pid #//去掉恰免得冒號 user = nobody #//nobody改為php group = nobody #//nobody改為php listen = 127.0.0.1:9000 #//監聽地址改為0.0.0.0:9000 pm.max_children = 5 #//改為50 pm.start_servers = 2 #//改為20 pm.min_spare_servers = 1 #//改為5 pm.max_spare_servers = 3 #//改為35 [root@localhost php-5.5.38]# /usr/local/php5/sbin/php-fpm #//啟動服務 [root@localhost php-5.5.38]# netstat -ntap | grep 9000 tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 26085/php-fpm: mast [root@localhost php-5.5.38]# mkdir -p /var/www/html/webphp/ #//創建首頁目錄 [root@localhost php-5.5.38]# vim /var/www/html/webphp/index.php #//創建首頁 <? phpinfo(); ?>PHP做完了通過主服務器ip、從服務器ip、虛擬ip:192.168.32.188分別訪問,看到以下界面如果無法訪問請關閉防火墻和setenforce 0
測試:
主,192.168.32.209
![image]
從:192.168.32.220
![image]
VIP:192.168.32.188
![image]
部署主從數據庫(因為MySQL安裝時間較長改為用yum安裝使用mairadb)
(1)安裝mariadb并修改配置文件
#//yum安裝 [root@localhost webphp]# yum -y install mariadb-server mariadb#//修改配置文件 [root@localhost webphp]# vim /etc/my.cnf-------------------------------------------------------------------- #//刪除以下9行 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd -----------------------------------------------------------------#//重新指定配置路徑 [mysqld] log_error=/var/lib/mysql/mysql.err log=/var/lib/mysql/mysql_log.log log_slow_queries=/var/lib/mysql_slow_queris.log binlog-ignore-db=mysql,information_schema character_set_server=utf8 log_bin=mysql_bin server_id=1 #//從服務器要修改server_id log_slave_updates=true sync_binlog=1 auto_increment_increment=2 auto_increment_offset=1(2)啟動數據庫并登錄
[root@localhost webphp]# systemctl start mariadb.service#//用mysql命令直接登陸 [root@localhost webphp]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.56-MariaDB MariaDB ServerCopyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]>(3)構建主從
#//主服務器授權給從服務器 MariaDB [(none)]> grant replication slave on *.* to 'replication'@'192.168.32.%' identified by '123456'; Query OK, 0 rows affected (0.00 sec)#//查看是否授權成功 MariaDB [(none)]> show grants for "replication"@"192.168.32.%"; +-----------------------------------------------------------------------------------------------------------------------------------+ | Grants for replication@192.168.32.% | +-----------------------------------------------------------------------------------------------------------------------------------+ | GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.32.%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' | +-----------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)#//主服務器查看二進制日志和偏移量 MariaDB [(none)]> show master status; +------------------+----------+--------------+--------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+--------------------------+ | mysql_bin.000003 | 410 | | mysql,information_schema | +------------------+----------+--------------+--------------------------+ 1 row in set (0.00 sec)#//從服務器用授權用戶密碼登錄master,通過二進制日志和偏移量開始備份主服務器 MariaDB [(none)]> change master to master_host='192.168.32.209',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=410; Query OK, 0 rows affected (0.01 sec)MariaDB [(none)]> slave start; Query OK, 0 rows affected (0.00 sec)#//查看IO,SQL線程有沒有連接成功,顯示為YES表示為成功 MariaDB [(none)]> show slave status\GSlave_IO_Running: YesSlave_SQL_Running: YesMFS部署并掛載
搭建 Master Server
1、安裝MFS
yum install -y zlib-devel gcc gcc-c++ //安裝依賴包環境包 useradd mfs -s /sbin/nologin -M //創建管理用戶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-mfschunkserver \ --disable-mfsmountmake && make install2、復制文件
cd /usr/local/mfs/etc/mfs/ cp mfsmaster.cfg.dist mfsmaster.cfg # 主配置文件 cp mfsexports.cfg.dist mfsexports.cfg # 掛載權限 cp mfstopology.cfg.dist mfstopology.cfg # top架構感知cd /usr/local/mfs/var/mfs/ cp metadata.mfs.empty metadata.mfs #防斷裂3、啟動 Master Server
/usr/local/mfs/sbin/mfsmaster start //開啟 /usr/local/mfs/sbin/mfsmaster -s //停止 netstat -antp | grep mfssystemctl stop firewalld.service setenforce 0 //關閉防火墻和安全功能搭建 Metalogger Server
1、安裝MFS
yum install -y zlib-devel gcc gcc-c++ //安裝依賴包環境包 useradd mfs -s /sbin/nologin -M //創建管理用戶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-mfschunkserver \ --disable-mfsmountmake && make install2、復制文件
cd /usr/local/mfs/etc/mfs/ cp mfsmaster.cfg.dist mfsmaster.cfg cp mfsexports.cfg.dist mfsexports.cfg cp mfsmetalogger.cfg.dist mfsmetalogger.cfgvim mfsmetalogger.cfg ...... MASTER_HOST = 192.168.43.118 //IP指向master3、啟動 Metalogger Server
/usr/local/mfs/sbin/mfsmetalogger start //開啟 /usr/local/mfs/sbin/mfsmetalogger -s //停止 netstat -antp | grep mfssystemctl stop firewalld.service setenforce 0 //關閉防火墻和安全功能搭建 Chunk Server
1、安裝MFS
yum install -y zlib-devel gcc gcc-c++ //安裝依賴包環境包 useradd mfs -s /sbin/nologin -M //創建管理用戶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-mfsmountmake && make install2、復制文件
cd /usr/local/mfs/etc/mfs/ cp mfschunkserver.cfg.dist mfschunkserver.cfg cp mfshdd.cfg.dist mfshdd.cfgvim mfschunkserver.cfg ...... MASTER_HOST = 192.168.43.118 //IP指向mastervim mfshdd.cfg ...... /data //添加一行/data,在這里/data是一個給MFS的分區,生產環境最好使用獨立的分區或磁盤掛載到此目錄mkdir /data //創建文件夾 chown -R mfs:mfs /data //屬主屬組都改為mfs3、啟動Chunk Server
/usr/local/mfs/sbin/mfschunkserver start //開啟 /usr/local/mfs/sbin/mfschunkserver start -s //停止 netstat -antp | grep mfssystemctl stop firewalld.service setenforce 0 //關閉防火墻和安全功能客戶端配置
此處PHP服務器是客戶端角色,在PHP服務器上搭建
1、安裝fuse
yum install -y zlib-devel gcc gcc-c++ //安裝依賴包環境包tar xzvf fuse-2.9.2.tar.gz -C /opt //mfs客戶端依賴于fuse cd /opt/fuse-2.9.2./configuremake && make install2、設置環境變量
vim /etc/profile #在末尾處插入 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATHsource /etc/profile //加載立即生效3、安裝MFS客戶端
useradd mfs -s /sbin/nologin -M //創建管理用戶 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-mfschunkserver \ --enable-mfsmount //注意此處開啟客戶端make && make install4、掛載MFS文件系統
將MFS文件系統掛載在前端PHP服務器的/var/www/html/webphp/uploads/photos目錄
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.32.211 //掛載MFS最后部署網站
---------建庫,授權---------- mysql> CREATE DATABASE bbs; //創建一個數據庫//MariaDB [(none)]> GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123'; //把bbs數據庫里面所有表的權限授予給bbsuser,并設置密碼//MariaDB [(none)]> flush privileges; //刷新數據庫// ---------測試數據庫-------------- vi /var/www/html/webphp/index.php <?php $link=mysql_connect('192.168.32.209','bbsuser','admin123'); if($link) echo "Success!!"; else echo "Fail!!"; mysql_close(); ?>測試出來的頁面
![image]!
安裝論壇
[root@localhost ~]# unzip /abc/Discuz_X2.5_SC_UTF8.zip -d /opt/dis [root@localhost ~]# cp -r /opt/dis/upload/ /var/www/html/webphp [root@localhost ~]# cd /var/www/html/webphp [root@localhost bbs]# chown -R php ./config [root@localhost bbs]# chown -R php ./data [root@localhost bbs]# chown -R php ./uc_client [root@localhost bbs]# chown -R php ./uc_server/data用http://192.168.32.188/bbs/install/index.php 進入安裝頁面:
![image]
![image]
安裝完成
![image]
用http://192.168.32.188/bbs/index.php訪問:
![image]
轉載于:https://blog.51cto.com/13645280/2153507
總結
以上是生活随笔為你收集整理的论坛的搭建以及优化方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 荷兰籍空乘服务中国春运:对春节有着别样的
- 下一篇: pecl安装扩展(首选)