小型企業的web架構搭建
架構簡介:以www.su.com爲例(不要訪問,這域名不是我的,我姓蘇而已)
前端dns負責以輪詢方式返回客戶端解析結果,實現基礎負載均衡效果;中間的兩臺web服務器負責外部的web頁面請求響應,後端文件服務器smaba服務負責存放web頁面的源代碼文件,nfs負責數據庫存儲
詳細的LAMP搭建過程請參見:
http://imsupeng.blog.51cto.com/10651675/1696939
http://imsupeng.blog.51cto.com/10651675/1696313
1、搭建DNS服務器:
服務器相關信息:
[root@DNS ~]# ip add | awk -F'[ /]+''/inet\>/&&!/127.0.0.1/ {print $3}' 172.16.113.53 [root@DNS ~]# uname -r 3.10.0-229.el7.x86_64[root@DNS ~]# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core)
關閉firewall和selinux
[root@DNS ~]# systemctl stop firewalld [root@DNS ~]# systemctl disable firewalld [root@DNS ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config [root@DNS ~]# setenforce 0
安裝bind程序:
[root@DNS ~]# yum install -y bind
配置bind,添加區域su.com,並在區域數據目錄添加su.com的區域數據文件
[root@DNS ~]# cp /etc/named.conf{,.bak} //備份配置文件 [root@DNS ~]# vim /etc/named.conf //編輯配置文件,其他保持默認即可 ectory "/var/named"; allow-query { any; }; zone "su.com" IN { type master; file "su/su.com.zone"; }; [root@DNS ~]# mkdir /var/named/su //創建區域數據文件存放目錄 [root@DNS ~]# vim /var/named/su/su.com.zone //創建並編輯區域數據文件 $TTL 1D @ IN SOA su.com. admin.su.com. ( 2015092401 1D 1H 1W 5H) IN NS dns.su.com. dns IN A 172.16.113.53 www IN A 172.16.113.55 www IN A 172.16.113.56 [root@DNS ~]# named-checkzone 'su.com'/var/named/su/su.com.zone //檢查區域數據文件是夠有誤 zone su.com/IN: loaded serial 2015092401 OK [root@DNS ~]# named-checkconf //檢查配置文件是否有誤 [root@DNS ~]# systemctl startnamed.service //啓動bind程序 [root@DNS ~]# systemctl enable named.service //添加至開機自動啓動
可以發現,兩次的查詢請求所返回的解析結果不同,至此,以輪詢方式實現負載均衡機制的DNS服務已搭建成功
2、安裝samba及nfs:
服務器相關信息:
[root@nfs&samba ~]# uname -r 3.10.0-229.el7.x86_64 [root@nfs&samba ~]# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core) [root@nfs&samba ~]# ip add | awk -F '[ /]+' '/inet\>/&&!/127.0.0.1/ {print $3}' 172.16.113.54
關閉selinux及防火牆:
[root@nfs&samba ~]# systemctl stop firewalld [root@nfs&samba ~]# systemctl disable firewalld [root@nfs&samba ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config [root@nfs&samba ~]# setenforce 0
安裝配置samba
[root@nfs&samba ~]# yum install -y samba [root@nfs&samba ~]# mkdir /web
a、添加一塊硬盤,專門做爲web源代碼存儲
b、爲新硬盤創建文件系統並掛在至/web目錄,設置開機自動掛在
[root@nfs&samba ~]# fdisk /dev/sdb //爲新硬盤創建分區 Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0xff0da1a7. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-104857599, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599): Using default value 104857599 Partition 1 of type Linux and of size 50 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@nfs&samba ~]# mkfs -t ext4 /dev/sdb1 //創建文件系統 [root@nfs&samba ~]# mount /dev/sdb1 /web/ //掛在新硬盤 [root@nfs&samba ~]# echo "/dev/sdb1 /web ext4 defaults 0 0" >> /etc/fstab //將新硬盤的掛在添加至/etc/fstab
[root@nfs&samba ~]# vim /etc/samba/smb.conf //配置samba workgroup = webdir netbios name = web hosts allow = 127. 172.16.
配置文件最後一行添加此信息
[webdir] comment = Public Stuff path = /web public = yes writable = yes printable = no write list = webserver
爲samba提供登錄用戶:
[root@nfs&samba ~]# useradd -r webserver [root@nfs&samba ~]# chown -R webserver.webserver /web/ [root@nfs&samba ~]# smbpasswd -a webserver //將webserver用戶添加至samba中(此命令由samba-client提供) New SMB password: Retype new SMB password: Added user webserver.
啓動samba,並添加至開機自動啓動:
[root@nfs&samba ~]# systemctl start smb [root@nfs&samba ~]# systemctl enable smb
安裝nfs,並進行配置:
[root@nfs&samba ~]# yum install -y rpcbind nfs-utils [root@nfs&samba ~]# systemctl start rpcbind //啓動rpcbind [root@nfs&samba ~]# systemctl enabled rpcbind //設置開啓自動啓動
添加一塊新硬盤,用作nfs的共享目錄
爲新硬盤劃分分區,並創建文件系統
[root@nfs&samba ~]# fdisk /dev/sdc Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0xccb37364. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): First sector (2048-209715199, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): Using default value 209715199 Partition 1 of type Linux and of size 100 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
[root@nfs&samba ~]# mkfs -t ext4 /dev/sdc1 [root@nfs&samba ~]# mkdir /dbdir [root@nfs&samba ~]# echo "/dev/sdc1 /dbdir ext4 defaults 0 0" >> /etc/fstab [root@nfs&samba ~]# mount -a //掛在新硬盤 [root@nfs&samba ~]# chown -R nobody.nobody /dbdir/ [root@nfs&samba ~]# vim /etc/exports //編輯nfs的配置文件 /dbdir 172.16.0.0/16(sync,rw) [root@nfs&samba ~]# systemctl start nfs.service //啓動nfs
3、包安裝Mariadb,並載在nfs及samba
掛載nfs,並添加至開機自動掛載
[root@storage ~]# yum install -y nfs-utils rpcbind //支持nfs掛載 [root@storage ~]# mkdir /mydata [root@storage ~]# echo "172.16.113.54:/dbdir /mydata nfs defaults 0 0" >> /etc/fstab
安裝mariadb:
[root@storage ~]# yum install -y mariadb-server mariadb 編輯配置文件,更改: [root@storage ~]# vi /etc/my.cnf datadir=/mydata/data 在mysqld innodb_file_per_table = on skip_name_resolve = on
[root@storage ~]# systemctl start mariadb [root@storage ~]# systemctl enable mariadb [root@storage ~]# mysql MariaDB [(none)]> CREATE DATABASE webdb; //創建數據庫 MariaDB [(none)]> GRANT ALL ON webdb.* TO "webuser"@"172.16.%.%" IDENTIFIED BY 'root'; //授權用戶 MariaDB [(none)]> FLUSH PRIVILEGES; //刷新數據庫授權
4、編譯安裝php+Apache2.4(兩臺web服務器配置完全一樣,此處只演示一臺)
掛載samba,並添加開機自動掛載:
[root@web1 ~]# mkdir /sourcefile [root@web1 ~]# mount.cifs //172.16.113.54/webdir /sourcefile -o username=webserver,password=root [root@web1 ~]# echo "mount.cifs //172.16.113.54/webdir /sourcefile -o username=webserver,password=root" >> /etc/rc.d/rc.local
安裝httpd2.2:
本機相關信息:
[root@web1 ~]# uname -r 2.6.32-504.el6.x86_64 [root@web1 ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@web1 ~]# ip add|awk -F'[ /]+' '/inet\>/&&!/127.0.0.1/ {print $3}' 172.16.113.55
需要的軟件包:
httpd-2.4.16.tar.bz2 apr-1.5.0.tar.bz2 apr-util-1.5.3.tar.bz2
準備開發環境
[root@web1 apr-1.5.0]# yum groupinstall -y "Development Tools" "Server Platform Development"
安裝apr
[root@web1 ~]# tar xf apr-1.5.0.tar.bz2 -C /usr/local/src/ [root@web1 ~]# cd /usr/local/src/apr-1.5.0/ [root@web1 apr-1.5.0]# ./configure --prefix=/usr/local/apr [root@web1 apr-1.5.0]# make && make install
安裝apr-util
[root@web1 apr-1.5.0]# cd /root/ [root@web1 ~]# tar xf apr-util-1.5.3.tar.bz2 -C /usr/local/src/ [root@web1 ~]# cd /usr/local/src/apr-util-1.5.3/ [root@web1 apr-util-1.5.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr [root@web1 apr-util-1.5.3]# make && make install
安裝httpd2.4
[root@web1 apr-util-1.5.3]# cd /root/ [root@web1 ~]# tar xf httpd-2.4.16.tar.bz2 -C /usr/local/src/ [root@web1 ~]# cd /usr/local/src/httpd-2.4.16/ [root@web1 httpd-2.4.16]# yum install -y pcre-devel //使httpd支持pcre正則表達式 ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event [root@web1 httpd-2.4.16]# make && make install 編輯配置文件,添加Pidfile路徑: [root@web1 httpd-2.4.16]# mkdir /var/run/httpd24 [root@web1 httpd-2.4.16]# vim /etc/httpd24/httpd.conf Pidfile "/var/run/httpd24/httpd.pid"
提供服務腳本:創建/etc/rc.d/init.d下的httpd24
#!/bin/bash # # chkconfig: - 85 15 # description: The Apache HTTP Server management script start() { echo -n $"Starting $prog: " LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch ${lockfile} return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} } reload() { echo -n $"Reloading $prog: " if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then RETVAL=6 echo $"not reloading due to configuration syntax error" failure $"not reloading $httpd due to configuration syntax error" else # Force LSB behaviour from killproc LSB=1 killproc -p ${pidfile} $httpd -HUP RETVAL=$? if [ $RETVAL -eq 7 ]; then failure $"httpd shutdown" fi fi echo } case "$1" in start) start ;; stop) stop ;; status) status -p ${pidfile} $httpd RETVAL=$? ;; restart) stop start ;; condrestart|try-restart) if status -p ${pidfile} $httpd >&/dev/null; then stop start fi ;; force-reload|reload) reload ;; graceful|help|configtest|fullstatus) $apachectl $@ RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}" RETVAL=2 esac exit $RETVAL
[root@web1 httpd-2.4.16]# chkconfig --add httpd24 //添加開機自動啓動項 [root@web1 httpd-2.4.16]# chkconfig httpd24 on //設置開機自動啓動 [root@web1 httpd-2.4.16]# service httpd24 start //啓動httpd
編譯安裝php以fpm方式結合httpd
需要的軟件包:
php-5.6.13.tar.bz2
[root@web1 ~]# tar xf php-5.6.13.tar.bz2 -C /usr/local/src/ [root@web1 ~]# cd /usr/local/src/php-5.6.13/
解決依賴關係:
[root@web1 php-5.6.13]# yum install -y bzip2-devel libxml2-devel libmcrypt-devel [root@web1 php-5.6.13]# make && make install
將程序包自帶的配置文件模板複製到/etc下作爲php的配置文件
[root@web1 php-5.6.13]# cp php.ini-production /etc/php.ini
將程序包自帶的服務腳本模板複製到/etc/rc.d/init.d下作爲服務腳本,並添加至開機自動啓動
[root@web1 php-5.6.13]# cp sapi/fpm/init.d.php-fpm /etc/init.d/phpfpm 修改服務腳本中的pid項: [root@web1 php-5.6.13]# vim /etc/rc.d/init.d/phpfpm php_fpm_PID=/var/run/php5/php-fpm.pid [root@web1 php-5.6.13]# chmod +x /etc/init.d/phpfpm //賦予服務腳本執行權限 [root@web1 php-5.6.13]# chkconfig --add phpfpm [root@web1 php-5.6.13]# chkconfig phpfpm on
將fpm的配置文件模板複製更名爲fpm的配置文件,並做相應的配置:
[root@web1 php-5.6.13]# cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf [root@web1 php-5.6.13]# vim /usr/local/php5/etc/php-fpm.conf pid = /var/run/php5/php-fpm.pid //將此項前面的";"去掉,啓用該項 修改 Pool Definitions中: pm.max_children = 100 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 15 //此項一定要大於等於pm.min_spare_servers [root@web1 php-5.6.13]# mkdir -pv /var/run/php5 [root@web1 php-5.6.13]# service phpfpm start //啓動php-fpm
編輯httpd的配置文件,開啓以下兩個模塊,並做相應的配置:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so 在最後添加如下兩行: ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/sourcefile/$1 修改 DocumentRoot "/sourcefile" <Directory "/sourcefile"> DirectoryIndex index.php index.html 添加如下兩行 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
重啓httpd服務:
[root@web1 php-5.6.13]# service httpd24 restart
編輯測試腳本:
[root@web1 php-5.6.13]# vim /sourcefile/index.php <?php $conn = mysql_connect('172.16.113.57','webuser','root'); if ($conn) echo "OK"; else echo "Faulse"; phpinfo(); ?>
訪問測試:(將物理主機的DNS指向自己搭建的DNS服務器地址)
搭建phpMyadmin實現數據庫的圖形接口管理
需要的軟件包:
phpMyAdmin-4.4.14.1-all-languages.zip
[root@web1 ~]# unzip /root/phpMyAdmin-4.4.14.1-all-languages.zip -d /sourcefile/ [root@web1 ~]# cd /sourcefile/[root@web1 sourcefile]# ln -sv phpMyAdmin-4.4.14.1-all-languages pma &&&&將phpMyadmin配置文件模板複製改名: [root@web1 pma]# cp config.sample.inc.php config.inc.php
編輯配置文件
root@web1 pma]# vim config.inc.php
在瀏覽器訪問登錄即可:
安裝xcache,實現php加速:
需要的軟件包:
xcache-3.2.0.tar.gz 可在官網下載
[root@web1 ~]# tar xf xcache-3.2.0.tar.gz -C /usr/local/src
[root@web1 ~]# cd /usr/local/src/xcache-3.2.0/
[root@web1 xcache-3.2.0]# /usr/local/php5/bin/phpize //生成configure文件
[root@web1 xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/lo
cal/php5/bin/php-config
[root@web1 xcache-3.2.0]# make && make install
//此步驟結束後,會顯示xcache的模塊安裝位置,例如: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20131226/
[root@web1 xcache-3.2.0]# mkdir /etc/php.d //創建配置文件目錄
[root@web1 xcache-3.2.0]# cp xcache.ini /etc/php.d/ //爲xcache提供配置文件
[root@web1 xcache-3.2.0]# vim /etc/php.d/xcache.ini //編輯配置文件,指定xcache模塊的安裝位置
extension = /usr/local/php5/lib/php/extensions/no-debug-non-zts-20131226/xcache.so
其他保持默認即可
[root@web1 xcache-3.2.0]# service phpfpm restart //由於php工作在fpm模式,即php現在是一個獨立的服務,因此更改了配置重啓php-fpm服務即可。
刷新phpinfo頁面,出現以下信息便是添加成功。
待續~~~~~