集羣架構和自簽證書

環境準備

主機名 角色 外網IP 內網IP 安裝服務
lb01 負載均衡 10.0.0.51 172.16.1.51 nginx
web01 web服務器 10.0.0.7 172.16.1.7 nginx php nfs-utils wordpress wecenter phpmyadmin
web02 web服務器 10.0.0.8 172.16.1.8 nginx php nfs-utils wordpress wecenter phpmyadmin
web03 web服務器 10.0.0.9 172.16.1.9 nginx php nfs-utils wordpress wecenter phpmyadmin
nfs 共享存儲 10.0.0.31 172.16.1.31 nfs-utils sersync
db01 數據庫 10.0.0.51 172.16.1.51 mariadb-server
backup 備份服務器 10.0.0.41 172.16.1.41 rsync

安裝相關服務

1.將作好的rpm包使用rz命令上傳
mkdir nginx_php && cd nginx_php && tar xf ../nginx_php.tar.gz 

2.
代理機 負載均衡機 安裝nginx
[root@lb01 ~]# yum -y localinstall nginx*

服務器安裝nginx php nfs-utils
[root@web01 ~]# yum remove -y php-mysql-5.4 php php-fpm php-common && \
yum localinstall -y *.rpm
[root@web01 ~]# yum install -y nfs-utils
[root@web02 ~]# yum remove -y php-mysql-5.4 php php-fpm php-common && \
yum localinstall -y *.rpm
[root@web02 ~]# yum install -y nfs-utils
[root@web03 ~]# yum remove -y php-mysql-5.4 php php-fpm php-common && \
yum localinstall -y *.rpm
[root@web03 ~]# yum install -y nfs-utils

共享存儲機安裝nfs
[root@nfs ~]# yum install -y nfs-utils

數據庫機安裝mariadb
[root@db01 ~]# yum install -y mariadb-server

3.啓動並加入開機自啓動
[root@lb01 ~]# systemctl start nginx
[root@web01 ~]# systemctl start nginx php-fpm nfs (能夠一塊兒啓動)
[root@web02 ~]# systemctl start nginx php-fpm nfs
[root@web03 ~]# systemctl start nginx php-fpm nfs
[root@nfs ~]# systemctl start nfs
[root@db01 ~]# systemctl start mariadb

[root@lb01 ~]# systemctl enable nginx
[root@web01 ~]# systemctl enable nginx php-fpm nfs	(一個一個啓動)
[root@web02 ~]# systemctl enable nginx php-fpm nfs
[root@web03 ~]# systemctl enable nginx php-fpm nfs
[root@nfs ~]# systemctl enable nfs
[root@db01 ~]# systemctl enable mariadb

4.建立www用戶
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

[root@web02 ~]# groupadd www -g 666
[root@web02 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

5.web01 web02修改nginx和PHP的默認用戶
sed -i '/^user/c user www;' /etc/nginx/nginx.conf
sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf 
sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf

6.重載nginx配置文件
nginx -sreload && systemctl restart php-fpm.service

web服務器安裝wordpress 和WeCenter和phpmyadmin服務

須要先作好數據庫php

部署web01

服務器web01 web02執行如下操做,server是通用的
1.手寫server語句'模板'
vim /etc/nginx/conf.d/wp.conf
server {
	listen 80;
	server_name cs.wp.com;
	root /code/wordpress;
	index info.php index.php;
 
	location ~ \.php$ {
		fastcgi_pass   127.0.0.1:9000;
		fastcgi_index  index.php;
		fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
		}
}

2.重載nginx服務
nginx -sreload

3.下載安裝包
wp: mkdir /code -p && cd /code && \
wget http://test.driverzeng.com/Nginx_Code/wordpress-5.0.3-zh_CN.tar.gz

zh: mkdir /code -p && cd /code && \
wget http://test.driverzeng.com/Nginx_Code/WeCenter_3-2-1.zip

pm: mkdir /code -p && cd /code && \ wget http://test.driverzeng.com/Nginx_Code/phpMyAdmin-4.9.0.1-all-languages.zip

4.安裝服務
tar xf wordpress-5.0.3-zh_CN.tar.gz && rm -rf wordpress-5.0.3-zh_CN.tar.gz

zh: unzip WeCenter_3-2-1.zip && rm -rf WeCenter_3-2-1.zip __MACOSX/ && \
mv WeCenter_3-2-1 WeCenter

pm: : unzip phpMyAdmin-4.9.0.1-all-languages.zip && rm -rf phpMyAdmin-4.9.0.1-all-languages.zip && \
mv phpMyAdmin-4.9.0.1-all-languages pm

5.受權
chown -R www.www /code

部署數據庫

1.給root一個密碼
[root@db01 ~]# mysqladmin -uroot password '1'
2.鏈接數據庫
[root@db01 ~]# mysql -uroot -p1
3.建立用戶
MariaDB [(none)]> grant all on *.* to ty@'%' identified by '1';
4.建立數據庫
MariaDB [(none)]> create database wp;
MariaDB [(none)]> create database zh;
5.重啓數據庫
systemctl restart mariadb

#phpmyadmin只是管理數據庫的工具,不須要建立數據庫
phpmyadmin能夠直接鏈接數據庫,不須要外網(???)
navicat須要鏈接外網才能鏈接數據庫

#域名解析
10.0.0.7 cs.wp.com

#瀏覽器訪問
cs.wp.com

部署負載均衡

能夠作upstream鏈接池,減小.conf中的重複node

負載均衡機lb01 執行如下操做
1.手寫server語句
vim /etc/nginx/conf.d/wp_zh.conf
upstream backend {
    server 10.0.0.7;
    server 10.0.0.8;
    server 10.0.0.9;
}

server {
        listen 80;
        server_name cs.wp.com cs.zh.com;
        return 302 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
        server_name cs.wp.com cs.zh.com;
        ssl_certificate   ssl_key/server.crt;
        ssl_certificate_key  ssl_key/server.key;

        location / {
            proxy_pass http://backend;  
            proxy_set_header Host $http_host;
            include proxy_params;
        }
}

2.寫入include文件
vim /etc/nginx/proxy_params
# 客戶端的請求頭部信息,帶着域名來找我,我也帶着域名去找下一級(代理機或者代理服務器)
proxy_set_header Host $host;
# 顯示客戶端的真實ip(和代理的全部IP)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	
#nginx代理與後端服務器鏈接超時時間(代理鏈接超時)
proxy_connect_timeout 60s;
#nginx代理等待後端服務器的響應時間
proxy_read_timeout 60s;
	#後端服務器數據回傳給nginx代理超時時間
proxy_send_timeout 60s;
	
#nignx會把後端返回的內容先放到緩衝區當中,而後再返回給客戶端,邊收邊傳, 不是所有接收完再傳給客戶端
proxy_buffering on;
#設置nginx代理保存用戶頭信息的緩衝區大小
proxy_buffer_size 4k;
#proxy_buffer_size 8k;
#proxy_buffers 緩衝區
proxy_buffers 8 4k;
#proxy_buffers 8 8k;
#使用http 1.1協議版本
proxy_http_version 1.1;

#錯誤頁面重定向
proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;

3.告訴PHP,與lb交流使用https協議(#web部署)
echo 'fastcgi_param https on;' >> /etc/nginx/fastcgi_params

4.重載nginx配置文件
nginx -sreload

生成證書

把證書部署在lbmysql

#建立存放ssl證書的路徑,位置隨意
[root@web03 ~]# mkdir -p /etc/nginx/ssl_key_zh && cd /etc/nginx/ssl_key_wp

[root@web03 ssl_key]# openssl genrsa -idea -out $(date +%Y%m%d).key 2048

[root@web03 ssl_key]# openssl req -days 36500 -x509 \
-sha256 -nodes -newkey rsa:2048 -keyout /etc/nginx/ssl_key_zh/$(date +%Y%m%d).key -out /etc/nginx/ssl_key_zh/$(date +%Y%m%d).crt

域名解析

10.0.0.5 cs.wp.com cs.zh.com cs.pm.com

#瀏覽器訪問,創建wp zh pm與數據庫的鏈接
cs.wp.com
cs.zh.com
cs.pm.com

部署web02,web03

1.web01打包安裝過的服務
cd / && tar zcf code_conf.tgz code etc/nginx/conf.d
2.使用scp或者rsync傳過去
rsync -avz code_conf.tgz 10.0.0.8:/
rsync -avz code_conf.tgz 10.0.0.9:/
3.web02等服務器解壓
cd / && tar xf code_conf.tgz 
cd / && tar xf code_conf.tgz 
4.重載nginx配置文件#
nginx -sreload
nginx -sreload

部署nfs服務端和客戶端

先作好web01,再縱向拷貝,避免出現重複註冊數據表nginx

# 1.編輯nfs配置文件
[root@nfs ~]# vim /etc/exports
/wp_data 172.16.1.0/24(sync,rw,all_squash,anonuid=666,anongid=666)
/zh_data 172.16.1.0/24(sync,rw,all_squash,anonuid=666,anongid=666)
# 2.建立共享目錄
[root@nfs ~]# mkdir /wp_data /zh_data

# 3.沒有上傳過圖片,直接建立uploads目錄,上傳過圖片,先把數據拷貝到nfs中
[root@web01 ~]# mkdir /code/wordpress/wp-content/uploads -p
[root@web01 ~]# mkdir /code/WeCenter/uploads/ -p

#爲了使用rsync,受權(空目錄報錯不用管)
chmod -R 777 /code 

#給建立的目錄受權
chown -R www.www /code

[root@web01 ~]# rsync -avz /code/wordpress/wp-content/uploads/* root@172.16.1.31:/wp_data 
[root@web01 ~]# rsync -avz /code/WeCenter/uploads/* root@172.16.1.31:/wp_data 

########## 先登陸導入數據庫, 再rsync服務和配置文件過去(部署web02),由於wordpress不能用相同的數據庫註冊######

# 5.受權
[root@nfs ~]# chown -R www.www /wp_data/ /zh_data/
# 6.掛載(掛載最好放最後)
[root@web01 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads/
[root@web02 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads/
[root@web03 ~]# mount -t nfs 172.16.1.31:/wp_data /code/wordpress/wp-content/uploads/

[root@web01 ~]# mount -t nfs 172.16.1.31:/zh_data /code/WeCenter/uploads/
[root@web02 ~]# mount -t nfs 172.16.1.31:/zh_data /code/WeCenter/uploads/
[root@web03 ~]# mount -t nfs 172.16.1.31:/zh_data /code/WeCenter/uploads/

umount /code/wordpress/wp-content/uploads
umount /code/WeCenter/uploads

NFS服務器部署sersync

# 0.安裝sersync的依賴包
[root@nfs ~]# yum install -y rsync inotify-tools

# 1.下載sersync
[root@nfs ~]# wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz

# 2.解壓sersync
[root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz

# 3.移動並更名
[root@nfs ~]# mv GNU-Linux-x86 /usr/local/sersync
# 4.修改配置文件
[root@nfs ~]# vim /usr/local/sersync/confxml.xml
<!-- #修改後的配置文件 -->

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
    <host hostip="localhost" port="8008"></host>
    <debug start="false"/>
    <fileSystem xfs="false"/>
    <filter start="false">
	<exclude expression="(.*)\.svn"></exclude>
	<exclude expression="(.*)\.gz"></exclude>
	<exclude expression="^info/*"></exclude>
	<exclude expression="^static/*"></exclude>
    </filter>
    <inotify>   # 1.所有改爲true
	<delete start="true"/>
	<createFolder start="true"/>
	<createFile start="false"/>
	<closeWrite start="true"/>
	<moveFrom start="true"/>
	<moveTo start="true"/>
	<attrib start="true"/>
	<modify start="true"/>
    </inotify>

    <sersync>
	<!-- #客戶端須要監控的目錄 -->
	<localpath watch="/wp_date">  #2. 改爲nfs服務端要推送的那個目錄

	    <!-- rsync服務端的IP 和 name:模塊 -->
	    <remote ip="10.0.0.41" name="backupmk"/>	#3. 備份服務器的外網IP和模塊名
	    <!--<remote ip="192.168.8.39" name="tongbu"/>-->
	    <!--<remote ip="192.168.8.40" name="tongbu"/>-->
	</localpath>
	<rsync>
	    <!-- rsync命令執行的參數 -->
	    <commonParams params="-az"/>	# 4.改爲 -az
            <!-- #rsync認證start="true" users="rsync指定的匿名用戶" passwordfile="指定一個密碼文件的位置權限必須600" -->	#5.下行的false改爲true,匿名用戶bck,密碼文件
	    <auth start="true" users="bck" passwordfile="/etc/rsync.passwd"/>
	    <userDefinedPort start="false" port="874"/><!-- port=874 -->
	    <timeout start="false" time="100"/><!-- timeout=100 -->
	    <ssh start="false"/>	#不使用ssh通道(相似於rsync的daemon模式),不使用874端口,不設置超時時間
	</rsync>
	<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
	<crontab start="false" schedule="600"><!--600mins-->
	    <crontabfilter start="false">
		<exclude expression="*.php"></exclude>
		<exclude expression="info/*"></exclude>
	    </crontabfilter>
	</crontab>
	<plugin start="false" name="command"/>
    </sersync>

    <plugin name="command">
	<param prefix="/bin/sh" suffix="" ignoreError="true"/>	<!--prefix /opt/tongbu/mmm.sh suffix-->
	<filter start="false">
	    <include expression="(.*)\.php"/>
	    <include expression="(.*)\.sh"/>
	</filter>
    </plugin>

    <plugin name="socket">
	<localpath watch="/opt/tongbu">
	    <deshost ip="192.168.138.20" port="8009"/>
	</localpath>
    </plugin>
    <plugin name="refreshCDN">
	<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
	    <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
	    <sendurl base="http://pic.xoyo.com/cms"/>
	    <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
	</localpath>
    </plugin>
</head>

# 5.建立客戶端的密碼文件,只寫密碼,不須要指定虛擬用戶
[root@nfs /usr/local/sersync]# echo 123 > /etc/rsync.passwd		

# 6.受權密碼文件權限爲600
[root@nfs ~]# chmod 600 /etc/rsync.passwd

# 7.啓動服務
[root@nfs ~]# /usr/local/sersync/sersync2 -rdo /usr/local/sersync/confxml.xml
export PATH="/usr/local/sersync/sersync2:$PATH"

rsync服務器部署rsync

1.rsync服務器下載rsync
[root@web01 ~]# yum install -y rsync

2.修改配置文件
[root@web01 ~]# vim /etc/rsyncd.conf  #先刪除,再拷貝
#################################### 服務相關配置 ###########################
uid = www	
#指定rsync進程啓動的用戶(打工的),和傳送文件的用戶---------useradd
gid = www			
#指定rsync進程啓動的組
port = 873			
#指定rsync使用的監聽端口(默認873端口,能夠改)
fake super = yes	 
#無需讓rsync以root身份運行,容許接收文件的  完整屬性(屬主屬組不變)
use chroot = no		 	
#禁錮指定的目錄(只能推到指定的目錄,不緊固的話隨便推)
max connections = 200	
#最大鏈接數(同時鏈接的主機數,減小服務端負載)
timeout = 600			
#超時時間
ignore errors			
#忽略報錯
read only = false		
#不僅讀(可讀可寫)
list = false						
#不容許別人查看模塊名
#################################### 命令相關配置 ###########################
auth users = bck			 
#傳輸文件的用戶(至關於密碼,沒有實際意義),客戶端認證1
secrets file = /etc/rsync.passwd	  
#傳輸用戶文件的密碼文件,vim或echo/600,客戶端認證2
log file = /var/log/rsyncd.log		  
#日誌文件,使用了rsync以後纔會生成

[backupmk]								
#模塊名,能夠隨便改,當心大寫字母,空格,數字,多模塊對應多主機(隨便推?),客戶端認證3
comment = welcome to oldboyedu backup!	   
#註釋(廢物)
path = /backup							 
#備份的目錄-------mkdir/權限屬主屬組,,客戶端認證4

3.根據配置文件的內容,建立出來須要的用戶,目錄,密碼文件
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M	#配置文件指定了www用戶

[root@web01 ~]# mkdir /backup
[root@web01 ~]# chown www.www /backup/		#配置文件指定了rsync用戶

[root@web01 ~]# echo bck:123 >/etc/rsync.passwd     (虛擬用戶名:密碼,必需要作)
#修改傳輸文件的密碼文件的權限
[root@web01 ~]# chmod 600 /etc/rsync.passwd

4.啓動服務,而且加入開機自啓
[root@web01 ~]# systemctl enable rsyncd
[root@web01 ~]# systemctl start rsyncd
相關文章
相關標籤/搜索