階段總結——用虛擬機搭建一個高可用負載均衡集羣架構javascript
linux基本知識已經介紹完,現有一個業務須要操做,經過對這個項目的操做,能夠複習、總結、鞏固以前的知識點;php
用13臺虛擬機搭建一個高可用負載均衡集羣架構出來,並運行三個站點,具體需求以下css
1 設計你認爲合理的架構,用visio把架構圖畫出來html
2 搭建lnmp、tomcat+jdk環境前端
3 三個站點分別爲:discuz論壇、dedecms企業網站以及zrlog博客java
4 因爲機器有限,儘量地把三個站點放到同一臺服務器上,而後作負載均衡集羣,要求全部站點域名解析到一個ip上,也就是說只有一個出口ipnode
5 須要共享靜態文件,好比discuz須要共享的目錄是 data/attachment,dedecms須要共享upload(具體目錄,你能夠先上傳一個圖片,查看圖片所在目錄)mysql
6 設計合理的目錄、文件權限,好比discuz的data目錄須要給php-fpm進程用戶可寫權限,其餘目錄不用寫的就不要給寫權限(目錄755,文件644,屬主屬組root)linux
7 全部服務器要求只能普通用戶登陸,並且只能密鑰登陸,root只能普通用戶sudonginx
8 給全部服務器作一個簡單的命令審計功能
9 php-fpm服務要求設置慢執行日誌,超時時間爲2s,並作日誌切割,日誌保留一月
10 全部站點都須要配置訪問日誌,並作日誌切割,要求靜態文件日誌不作記錄,日誌保留一月
11 制定合理的mysql數據備份方案,並寫備份腳本,要求把備份數據傳輸到備份服務器
12 制定代碼、靜態文件的備份方案,並寫備份腳本,要求把備份數據傳輸到備份服務器
12 編寫數據恢復文檔,能保證當數據丟失在2小時內恢復全部數據
13 搭建zabbix監控告警系統,要求監控各個基礎指標(cpu、內存、硬盤),網卡流量須要成圖,還須要監控web站點的可用性,
14 定製自定義監控腳本,監控web服務器的併發鏈接數,接入zabbix,成圖,設置觸發器,超過100告警
15 定製自定義監控腳本,監控mysql的隊列,接入zabbix,成圖,設置觸發器,隊列超過300告警
16 定製自定義監控腳本,監控mysql的慢查詢日誌,接入zabbix,成圖,設置觸發器,每分鐘超過60條日誌須要告警,須要仔細分析慢查詢日誌的規律,肯定日誌條數
17 利用jmx,在zabbix上監控tomcat
18 給三個站點的後臺訪問作二次認證,增長安全性
19 用shell腳本實現文件、代碼同步上線(參考分發系統)
第一步:先完成基礎架構:
1 設計你認爲合理的架構,用visio把架構圖畫出來
2 搭建lnmp、tomcat+jdk環境
3 三個站點分別爲:discuz論壇、dedecms企業網站以及zrlog博客
4 因爲機器有限,儘量地把三個站點放到同一臺服務器上,而後作負載均衡集羣,要求全部站點域名解析到一個ip上,也就是說只有一個出口ip
5 須要共享靜態文件,好比discuz須要共享的目錄是 data/attachment,dedecms須要共享upload(具體目錄,你能夠先上傳一個圖片,查看圖片所在目錄)
6 設計合理的目錄、文件權限,好比discuz的data目錄須要給php-fpm進程用戶可寫權限,其餘目錄不用寫的就不要給寫權限(目錄755,文件644,屬主屬組root)
19 給三個站點的後臺訪問作二次認證,增長安全性;
第二部分:佈置監控、以及日誌查詢等
14 搭建zabbix監控告警系統,要求監控各個基礎指標(cpu、內存、硬盤),網卡流量須要成圖,還須要監控web站點的可用性,
15 定製自定義監控腳本,監控web服務器的併發鏈接數,超過100告警
16 定製自定義監控腳本,監控mysql的隊列,隊列超過300告警
17 定製自定義監控腳本,監控mysql的慢查詢日誌,每分鐘超過60條日誌須要告警,須要仔細分析慢查詢日誌的規律,肯定日誌條數
18 利用jmx,在zabbix上監控tomcat
8 給全部服務器作一個簡單的命令審計功能
9 php-fpm服務要求設置慢執行日誌,超時時間爲2s,並作日誌切割,日誌保留一月
10 全部站點都須要配置訪問日誌,並作日誌切割,要求靜態文件日誌不作記錄,日誌保留一月
第三部分:數據備份及分發
11 制定合理的mysql數據備份方案,並寫備份腳本,要求把備份數據傳輸到備份服務器
12 制定代碼、靜態文件的備份方案,並寫備份腳本,要求備份
13 編寫數據恢復文檔,能保證當數據丟失在2小時內恢復全部數據
20 用shell腳本實現文件、代碼同步上線(參考分發系統)
7 全部服務器要求只能普通用戶登陸,並且只能密鑰登陸,root只能普通用戶sudo
1 設計你認爲合理的架構,用visio把架構圖畫出來
mysql服務器:
主機名 IP 功能 zq00 192.168.112.180 Master zq01 192.168.112.181 Slave1 zq02 192.168.112.182 Slave2 Mycat讀寫分離調度器+備份服務器
主機名 IP 功能 zq03 192.168.112.183 mycat Web服務器:
主機名 IP 功能 zq04 192.168.112.184 zabbix、NFS服務器 zq05 192.168.112.185 web服務器 zq06 192.168.112.186 web服務器 負載均衡服務器:
主機名 IP 功能 zq07 192.168.112.187 dir zq08 192.168.112.188 load dir
肯定好機器的角色後,如今怎麼建立這些機器?有如下兩種方法:
一、批量遠程執行命令的expect腳本,這個我測試過,速度太慢;
二、利用虛擬機的優點克隆;
三、總體同步;
實際應用仍是須要:批量遠程執行命令的expect腳本; 目前主要是測試,所以這3種方法,我將都會利用到;
首先用VMware建立虛擬機zq00;ip設爲:192.168.112.180;並用xshell遠程鏈接;
安裝一些經常使用工具
[root@zq00 ~]# yum -y install expect vim-enhanced epel-release libmcrypt-devel libmcrypt
安裝mysql,最後輸出爲0,爲操做正確
[root@zq00 ~]# cd /usr/local/src/; yum install -y epel-release wget perl-Module-Install.noarch libaio*; wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz; tar -zxf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz; mv mysql-5.6.36-linux-glibc2.5-x86_64 ../mysql; cd /usr/local/mysql; mkdir /data/; useradd mysql; ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql; echo $?
更改配置文件 ,更改如下目錄
[root@zq00 ~]# vim /etc/my.cnf [mysqld] datadir=/data/mysql socket=/tmp/mysql.sock
修改啓動mysql啓動腳本
[root@zq00 ~]# cd /usr/local/mysql/ [root@zq00 mysql]# ls support-files/ //mysql的啓動腳本也在此目錄下 binary-configure magic my-default.cnf mysqld_multi.server mysql-log-rotate mysql.server [root@zq00 mysql]# cp support-files/mysql.server /etc/init.d/mysqld //把mysql.server複製到mysqld這個新目錄 [root@zq00 mysql]# vim !$ //編輯此腳本文件 vim /etc/init.d/mysqld ..... //下面爲在編輯mysqld下 basedir=/usr/local/mysql //指定mysql 的程序目錄 datadir=/data/mysql //指定日期目錄
開啓服務
[root@zq00 mysql]# chkconfig --add mysqld [root@zq00 mysql]# chkconfig --list 注:該輸出結果只顯示 SysV 服務,並不包含 原生 systemd 服務。SysV 配置數據 可能被原生 systemd 配置覆蓋。 要列出 systemd 服務,請執行 'systemctl list-unit-files'。 查看在具體 target 啓用的服務請執行 'systemctl list-dependencies [target]'。 mysqld 0:關 1:關 2:開 3:開 4:開 5:開 6:關 //系統服務開啓 netconsole 0:關 1:關 2:關 3:關 4:關 5:關 6:關 network 0:關 1:關 2:關 3:關 4:關 5:關 6:關
開啓mysql
[root@zq00 mysql]# service mysqld start Starting MySQL.Logging to '/data/mysql/zq00.err'.
進入mysql,設置密碼
[root@zq00 ~]# mysql -uroot mysql> set password=password('www123'); mysql> quit Bye [root@zq00 ~]# service mysqld restart //重啓mysql服務
配置環境變量
[root@zq00 ~]# mysql -uroot //直接啓動,找不到mysql命令 -bash: mysql: 未找到命令 [root@zq00 ~]# vim /etc/profile export PATH=$PATH:/usr/local/mysql/bin/ //在配置文件中,添加此行語句 [root@zq00 ~]# source /etc/profile //加載配置文件
設置mysql密碼
[root@zq00 ~]# mysqladmin -uroot password 'www123' //設置密碼爲 www123 Warning: Using a password on the command line interface can be insecure.
此時配置完以後,開始克隆zq0一、zq0二、zq0三、zq04這4臺機器,由於mysql每臺機器都須要的;
[root@zq00 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR=192.168.112.181
重啓網絡服務
[root@zq00 ~]# systemctl restart networkw.service
更改主機名
[root@zq00 ~]# hostnamectl set-hostname zq01 [root@zq00 ~]# bash [root@zq01 ~]#
依次更改IP,以及主機名;
根據架構,zq00爲master,zq0一、zq02爲slaver一、slaver2
在zq00上,修改配置文件
[root@zq00 ~]# vim /etc/my.cnf [mysqld] server-id=180 //定義id, log_bin=master-bin //定義log_bin
在zq00上,修改配置文件
[root@zq01 ~]# vim /etc/my.cnf [mysqld] server-id=181 //定義id,這個與master不一致便可
在zq02上,修改配置文件
[root@zq02 ~]# vim /etc/my.cnf [mysqld] server-id=182 //定義id,這個與master不一致便可
zq0一、zq0一、zq02都重啓mysql服務,使其配置生效
[root@zq00 ~]# service mysqld restart //修改完配置文件後,重啓mysqld服務 [root@zq00 ~]# ls /data/mysql //看看master是否多瞭如下兩個文件 master-bin.000001 master-bin.index
在master(zq00)上,登陸mysql,爲zq0一、zq02受權兩個帳號
mysql> grant replication on *.* to 'repl''@'192.168.112.184' identified by 'www1234'; Query OK, 0 rows affected (0.10 sec) mysql> grant replication on *.* to 'repl''@'192.168.112.184' identified by 'www1234'; Query OK, 0 rows affected (0.10 sec)
在zq0一、zq02上登陸這個帳號,是否成功
[root@zq01 ~]# mysql -urepl -h192.168.112.180 -pwww1234 Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 815 Server version: 5.6.36-log MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
回到master(zq00)機器上,進行鎖表,防止配置過程當中,主表寫入
mysql> flush tables with read lock;
看一下master的狀態,並記錄file、position
mysql> show master status; +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000001 | 1820 | | | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.07 sec)
如今在slaver上進行配置,zq0一、zq02操做同樣
[root@zq01 ~]# mysql -uroot -pwww123 mysql> stop slave; mysql> change master to master_host='192.168.112.180', master_user='repl', master_password='www1234', master_log_file='master-bin.000001', master_log_pos=1820; mysql> start slave;
查看兩臺slave的主從狀態是否正常,Slave_IO_Running和 Slave_SQL_Running要爲yes:
mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.112.180 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000002 Read_Master_Log_Pos: 1820 Relay_Log_File: zq01-relay-bin.000003 Relay_Log_Pos: 3204 Relay_Master_Log_File: master-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes
回到master(zq00)機器上解鎖表;
mysql> unlock tables;
此時mysql主從設置完成;
master:192.168.112.180 zq00
mycat: 192.168.112.183 zq03
以前下載過JDK,則用scp命令複製到mycat機器的;解壓,更改目錄、名稱;
[root@zq03 src]# scp 192.168.112.136:/usr/local/src/jdk-8u171-linux-x64.tar.gz ./ [root@zq03 src]# tar zxf jdk-8u171-linux-x64.tar.gz [root@zq03 src]# mv jdk1.8.0_171 /usr/local/jdk1.8
編輯/etc/profile文件,添加如下配置
[root@zq03 src]# vim /etc/profile JAVA_HOME=/usr/local/jdk1.8/ JAVA_BIN=/usr/local/jdk1.8/bin JRE_HOME=/usr/local/jdk1.8/jre PATH=$PATH:/usr/local/jdk1.8/bin:/usr/local/jdk1.8/jre/bin CLASSPATH=/usr/local/jdk1.8/jre/lib:/usr/local/jdk1.8/lib:/usr/local/jdk1.8/jre/lib/charsets.jar
加載/etc/profile配置文件,並查看版本號;
[root@zq03 src]# source /etc/profile [root@zq03 src]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
下載mycat,解壓;
[root@zq03 src]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz [root@zq03 src]# tar -zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz //解壓 [root@zq03 src]# ls 5.txt Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz jdk-8u171-linux-x64.tar.gz mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz mycat [root@zq03 src]# mv mycat/ /usr/local/ //移到新目錄 [root@zq03 src]# ls /usr/local/mycat/ bin catlet conf lib logs version.txt [root@zq03 src]# ls /usr/local/mycat/conf/ autopartition-long.txt rule.xml auto-sharding-long.txt schema.xml auto-sharding-rang-mod.txt sequence_conf.properties cacheservice.properties sequence_db_conf.properties ehcache.xml sequence_distributed_conf.properties index_to_charset.properties sequence_time_conf.properties log4j2.xml server.xml migrateTables.properties sharding-by-enum.txt myid.properties wrapper.conf partition-hash-int.txt zkconf partition-range-mod.txt zkdownload
編輯Mycat服務器參數調整和用戶受權的配置文件server.xml;(把如下內容添加,默認的刪除,相似的配置)
[root@zq03 src]# vim /usr/local/mycat/conf/server.xml # root用戶對邏輯數據庫ultrax,DedeCMS,zrlog具備增刪改查的權限 <user name="root"> <property name="password">www123</property> <property name="schemas">ultrax,DedeCMS,zrlog</property> </user> # discuz用戶對邏輯數據庫ultrax具備增刪改查的權限 <user name="discuz"> <property name="password">www123</property> <property name="schemas">ultrax</property> </user> # dedecms用戶對邏輯數據庫DedeCMS具備增刪改查的權限 <user name="dedecms"> <property name="password">www123</property> <property name="schemas">DedeCMS</property> </user> # zrlog用戶對邏輯數據庫zrlog具備增刪改查的權限 <user name="zrlog"> <property name="password">www123</property> <property name="schemas">zrlog</property> </user> # 該用戶對邏輯數據庫ultrax,DedeCMS,zrlog僅有隻讀的權限 <user name="user"> <property name="password">www123</property> <property name="schemas">ultrax,DedeCMS,zrlog</property> <property name="readOnly">true</property> </user>
修改邏輯庫定義和表及分片定義的配置文件schema.xml;
[root@zq03 src]# mv /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml_bak //備份schema.xml [root@zq03 src]# vim /usr/local/mycat/conf/schema.xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="ultrax" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn1" /> <schema name="DedeCMS" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn2" /> <schema name="zrlog" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn3" /> <dataNode name="dn1" dataHost="localhost1" database="ultrax" /> <dataNode name="dn2" dataHost="localhost1" database="DedeCMS" /> <dataNode name="dn3" dataHost="localhost1" database="zrlog" /> <dataHost name="localhost1" maxCon="2000" minCon="1" balance="3" writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.112.180:3306" user="root" password="www123"> <!-- can have multi read hosts --> <readHost host="hostS1" url="192.168.112.181:3306" user="root" password="123456" /> <readHost host="hostS2" url="192.168.112.182:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema>
mycat機器配置完畢。啓動mycat並查看端口8066和9066端口是否起來:
[root@zq03 src]# /usr/local/mycat/bin/mycat start Starting Mycat-server... [root@zq03 src]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1012/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1096/master tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN 2355/java tcp6 0 0 :::38862 :::* LISTEN 2355/java tcp6 0 0 :::41234 :::* LISTEN 2355/java tcp6 0 0 :::22 :::* LISTEN 1012/sshd tcp6 0 0 ::1:25 :::* LISTEN 1096/master tcp6 0 0 :::1984 :::* LISTEN 2355/java tcp6 0 0 :::8066 :::* LISTEN 2355/java tcp6 0 0 :::9066 :::* LISTEN 2355/java tcp6 0 0 :::3306 :::* LISTEN 1558/mysqld
注意:若是沒有這兩個端口沒有啓動,查看java環境是否生效。
- 8066是用於web鏈接mycat.
- 9066是用於SA|DBA管理端口.
在mastet機器上,用戶名登陸mycat機器的mysql;須要先關閉firewalld
master機器上的防火牆
[root@zq00 ~]# service firewalld stop Redirecting to /bin/systemctl stop firewalld.service
mycat機器上的防火牆
[root@zq03 ~]# service firewalld stop Redirecting to /bin/systemctl stop firewalld.service
用discuz用戶登陸mycat機器;
[root@zq00 ~]# mysql -h192.168.112.183 -udiscuz -pwww123 -P8066
能查看到全部的數據庫;裏面只有ultrax庫
mysql> show databases; +----------+ | DATABASE | +----------+ | ultrax | +----------+ 1 row in set (0.00 sec)
使用root用戶登陸mycat;
[root@zq00 ~]# mysql -h192.168.112.183 -uroot -pwww123 -P8066
能查看到全部的數據庫:
mysql> show databases; +----------+ | DATABASE | +----------+ | DedeCMS | | ultrax | | zrlog | +----------+ 3 rows in set (0.00 sec)
在master(192.168.112.180)以9066端口登錄
[root@zq00 ~]# mysql -h192.168.112.183 -uroot -pwww123 -P9066
查看數據源
mysql> show @@datasource; +----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+ | DATANODE | NAME | TYPE | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD | +----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+ | dn1 | hostM1 | mysql | 192.168.112.180 | 3306 | W | 0 | 0 | 2000 | 1 | 0 | 0 | | dn1 | hostS1 | mysql | 192.168.112.181 | 3306 | R | 0 | 0 | 2000 | 0 | 0 | 0 | | dn1 | hostS2 | mysql | 192.168.112.182 | 3306 | R | 0 | 0 | 2000 | 0 | 0 | 0 | | dn3 | hostM1 | mysql | 192.168.112.180 | 3306 | W | 0 | 0 | 2000 | 1 | 0 | 0 | | dn3 | hostS1 | mysql | 192.168.112.181 | 3306 | R | 0 | 0 | 2000 | 0 | 0 | 0 | | dn3 | hostS2 | mysql | 192.168.112.182 | 3306 | R | 0 | 0 | 2000 | 0 | 0 | 0 | | dn2 | hostM1 | mysql | 192.168.112.180 | 3306 | W | 0 | 0 | 2000 | 1 | 0 | 0 | | dn2 | hostS1 | mysql | 192.168.112.181 | 3306 | R | 0 | 0 | 2000 | 0 | 0 | 0 | | dn2 | hostS2 | mysql | 192.168.112.182 | 3306 | R | 0 | 0 | 2000 | 0 | 0 | 0 | +----------+--------+-------+-----------------+------+------+--------+------+------+---------+-----------+------------+ 9 rows in set (0.00 sec) mysql> quit
在master上登陸mysql,建立ultrax、DedeCMS、zrlog這三個數據庫;
[root@zq00 ~]# mysql -uroot -pwww123 mysql> create database ultrax default character set utf8; //建立數據庫,默認字體,設置爲utf8字符編碼 Query OK, 1 row affected (0.00 sec) mysql> create database DedeCMS default character set utf8; Query OK, 1 row affected (0.00 sec) mysql> create database zrlog default character set utf8; Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | ABC | | DedeCMS | | mysql | | performance_schema | | test | | ultrax | | zrlog | +--------------------+ 8 rows in set (0.00 sec) mysql>
還須要對建立用戶,並受權;
mysql> grant all on *.* to 'root'@'192.168.112.183' identified by 'www123'; Query OK, 0 rows affected (0.00 sec) mysql> grant all on ultrax.* to 'discuz'@'192.168.112.%' identified by 'www123'; Query OK, 0 rows affected (0.00 sec) mysql> grant all on DedeCMS.* to 'dedecms'@'192.168.112.%' identified by 'www123'; Query OK, 0 rows affected (0.00 sec) mysql> grant all on zrlog.* to 'zrlog'@'192.168.112.%' identified by 'www123'; Query OK, 0 rows affected (0.00 sec) mysql> quit
完成以上操做後主從複製和讀寫分離就弄好了,接下來就是搭建web服務器,而後進行對接便可。
剩下的全部服務器(zq0四、zq0五、zq0六、zq0七、zq08)
先搭建LNMP環境,和Tomcat+Java環境,默認80端口給Nginx,Tomcat使用8080端口。
下載nginx,並解壓
[root@zq04 ~]# cd /usr/local/src/;wget http://nginx.org/download/nginx-1.4.7.tar.gz;tar zxf nginx-1.4.7.tar.gz
安裝須要的安裝包及庫
[root@zq04 nginx-1.4.7]# yum -y install epel-release wget gcc gcc-c++ libmcrypt-devel libmcrypt libcurl-devel libxml2-devel openssl-devel bzip2-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel;
編輯ngnix
[root@zq04 nginx-1.4.7]# cd nginx-1.4.7/;./configure --prefix=/usr/local/nginx;echo $?
安裝ngnix
[root@zq04 nginx-1.4.7]# make;make install;echo $?
在init.d目錄下,新建nginx腳本文件
[root@zq04 nginx-1.4.7]# vim /etc/init.d/nginx 如下爲腳本內容..... #!/bin/bash # chkconfig: - 30 21 # description: http service. # Source Function Library . /etc/init.d/functions # Nginx Settings NGINX_SBIN="/usr/local/nginx/sbin/nginx" NGINX_CONF="/usr/local/nginx/conf/nginx.conf" NGINX_PID="/usr/local/nginx/logs/nginx.pid" RETVAL=0 prog="Nginx" start() { echo -n $"Starting $prog: " mkdir -p /dev/shm/nginx_temp daemon $NGINX_SBIN -c $NGINX_CONF RETVAL=$? echo return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc -p $NGINX_PID $NGINX_SBIN -TERM rm -rf /dev/shm/nginx_temp RETVAL=$? echo return $RETVAL } reload() { echo -n $"Reloading $prog: " killproc -p $NGINX_PID $NGINX_SBIN -HUP RETVAL=$? echo return $RETVAL } restart() { stop start } configtest() { $NGINX_SBIN -c $NGINX_CONF -t return 0 } case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; configtest) configtest ;; *) echo $"Usage: $0 {start|stop|reload|restart|configtest}" RETVAL=1 esac exit $RETVAL
而後增長權限,以及啓動服務;
[root@zq04 nginx-1.4.7]# chmod 755 /etc/init.d/nginx [root@zq04 nginx-1.4.7]# chkconfig --add nginx [root@zq04 nginx-1.4.7]# chkconfig nginx on
進入nginx/conf/目錄下,把默認的配置文件做爲備份;
[root@zq04 nginx-1.4.7]# cd /usr/local/nginx/conf/ [root@zq04 conf]# mv nginx.conf nginx.conf.1 //把原配置文件做爲備份
新建nginx.conf配置文件,並按下面寫入內容
[root@zq04 conf]# vim nginx.conf 如下爲配置內容..... user nobody nobody; worker_processes 2; error_log /usr/local/nginx/logs/nginx_error.log crit; pid /usr/local/nginx/logs/nginx.pid; worker_rlimit_nofile 51200; events { use epoll; worker_connections 6000; } http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 3526; server_names_hash_max_size 4096; log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]' ' $host "$request_uri" $status' ' "$http_referer" "$http_user_agent"'; sendfile on; tcp_nopush on; keepalive_timeout 30; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 8 4k; request_pool_size 4k; output_buffers 4 32k; postpone_output 1460; client_max_body_size 10m; client_body_buffer_size 256k; client_body_temp_path /usr/local/nginx/client_body_temp; proxy_temp_path /usr/local/nginx/proxy_temp; fastcgi_temp_path /usr/local/nginx/fastcgi_temp; fastcgi_intercept_errors on; tcp_nodelay on; gzip on; gzip_min_length 1k; gzip_buffers 4 8k; gzip_comp_level 5; gzip_http_version 1.1; gzip_types text/plain application/x-javascript text/css text/htm application/xml; server { listen 80; server_name localhost; index index.html index.htm index.php; root /usr/local/nginx/html; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; } } }
注意:此時關機,拍攝快照,克隆zq04,建立zq0七、zq08,建立keepalived + nginx 實現負載均衡;
更改其IP
[root@zq04 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR=192.168.112.187重啓網絡服務
[root@zq04 ~]# systemctl restart networkw.service更改主機名
[root@zq04 ~]# hostnamectl set-hostname zq07 [root@zq04 ~]# bash [root@zq07 ~]#zq08機器同樣配置;
以前下載過JDK,則用scp命令複製到mycat機器的;解壓,更改目錄、名稱;
[root@zq04 src]# scp 192.168.112.184:/usr/local/src/jdk-8u171-linux-x64.tar.gz ./ [root@zq04 src]# tar zxf jdk-8u171-linux-x64.tar.gz [root@zq04 src]# mv jdk1.8.0_171 /usr/local/jdk1.8
編輯/etc/profile文件,添加如下配置
[root@zq03 src]# vim /etc/profile JAVA_HOME=/usr/local/jdk1.8/ JAVA_BIN=/usr/local/jdk1.8/bin JRE_HOME=/usr/local/jdk1.8/jre PATH=$PATH:/usr/local/jdk1.8/bin:/usr/local/jdk1.8/jre/bin CLASSPATH=/usr/local/jdk1.8/jre/lib:/usr/local/jdk1.8/lib:/usr/local/jdk1.8/jre/lib/charsets.jar
加載/etc/profile配置文件,並查看版本號;
[root@zq03 src]# source /etc/profile [root@zq03 src]# java -version java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
在官網找到二進制包,下載;
[root@zq04 src]# wget http://www-eu.apache.org/dist/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz
解壓、並把解壓包移到 /usr/local/tomcat下;
[root@zq04 src]# tar zxf apache-tomcat-8.5.32.tar.gz [root@zq04 src]# mv apache-tomcat-8.5.32 /usr/local/tomcat
開啓服務與關閉服務
[root@zq04 src]# /usr/local/tomcat/bin/startup.sh //啓動服務 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/jdk1.8 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. [root@zq04 src]# /usr/local/tomcat/bin/shutdown.sh //關閉服務 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/jdk1.8 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
監聽端口;
[root@zq04 src]# /usr/local/tomcat/bin/startup.sh [root@zq04 src]# netstat -lntp |grep java tcp6 0 0 :::8080 :::* LISTEN 8986/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 8986/java tcp6 0 0 :::8009 :::* LISTEN 8986/java
三個端口釋義:
8080爲提供web服務的端口;
8005爲管理端口;顯示調用會慢半拍
8009端口爲第三方服務調用的端口,好比httpd和Tomcat結合時會用到
php解壓目錄中的php.ini-production文件複製到php-fpm/etc/目錄中,而且重命名爲php.ini
[root@zq04 php-5.6.32]# cp php.ini-production /usr/local/php-fpm/etc/php.ini
建立php-fpm.conf配置文件
[root@zq04 php-5.6.32]# cd /usr/local/php-fpm/etc/ [root@zq04 etc]# vim php-fpm.conf //新建立文件 [global] pid = /usr/local/php-fpm/var/run/php-fpm.pid error_log = /usr/local/php-fpm/var/log/php-fpm.log [www] listen = /tmp/php-fcgi.sock #listen =127.0.0.1:9000 listen.mode = 666 user = php-fpm group = php-fpm pm = dynamic pm.max_children = 50 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests = 500 rlimit_files = 1024
把解壓目錄下的腳本sapi/fpm/init.d.php-fpm 複製到/etc/init.d下
[root@zq04 etc]# cd /usr/local/src/php-5.6.32/ [root@zq04 php-5.6.32]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
而後給予755權限,建立php-fpm用戶名,增長開機服務等操做
[root@zq04 php-5.6.32]# chmod 755 /etc/init.d/php-fpm [root@zq04 php-5.6.32]# chkconfig --add php-fpm //開機啓動 [root@zq04 php-5.6.32]# chkconfig php-fpm on [root@zq04 php-5.6.32]# useradd -s /sbin/nologin php-fpm //建立 php-fpm用戶 [root@zq04 php-5.6.32]# tail -1 /etc/passwd php-fpm:x:1001:1001::/home/php-fpm:/sbin/nologin [root@zq04 php-5.6.32]# service php-fpm start //開啓php-fpm服務 Starting php-fpm done
測試nginx是否解析php
[root@zq04 php-5.6.32]# curl localhost/1.php How do uou do!
在nginx.conf配置文件下,更改如下內容;
[root@zq04 ~]# vim /usr/local/nginx/conf/nginx.conf 如下默認虛擬主機,刪除; server { listen 80; server_name localhost; index index.html index.htm index.php; root /usr/local/nginx/html; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; } }
更換成此語句;
include vhost/*.conf; //至關於把虛擬主機作成模塊
建立vhost目錄:
[root@zq04 ~]# mkdir /usr/local/nginx/conf/vhost [root@zq04 ~]# cd /usr/local/nginx/conf/vhost [root@zq04 vhost]# vim default.conf server { listen 80 default_server; server_name aaa.com; index index.html index.htm index.php; root /data/wwwroot/default; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name; } }
建立網站目錄,並這次目錄下新建一個php文件
[root@zq04 vhost]# mkdir -p /data/wwwroot/default/ [root@zq04 vhost]# cd /data/wwwroot/default/ [root@zq04 default]# vim index.php <?php echo "Nice to meet you!" ?>
重啓nginx服務,解析php文件
[root@zq04 default]# service nginx restart Restarting nginx (via systemctl): [ 肯定 ] [root@zq04 default]# curl localhost Nice to meet you!
此時 zq04 配置好了環境
建立虛擬主機配置文件:discuz.com.conf
[root@zq04 ~]# cd /usr/local/nginx/conf/vhost [root@zq04 vhost]# vim discuz.com.conf server { listen 80; server_name www.discuz.com; index index.html index.htm index.php; root /data/wwwroot/discuz.com; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/discuz.com$fastcgi_script_name; } }
建立相應的discuz.com網站數據目錄;
[root@zq04 vhost]# cd /data/wwwroot/discuz.com/ [root@zq04 discuz.com]# vim index.php <?php echo "Welcome to discuz.com" ?>
重啓,測試網站discuz.com
[root@zq04 discuz.com]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@zq04 discuz.com]# /usr/local/nginx/sbin/nginx -s reload [root@zq04 discuz.com]# curl -x192.168.112.184:80 www.discuz.com Welcome to discuz.com
開始安裝Discuz
[root@zq06 src]# yum install -y unzip [root@zq06 src]# unzip Discuz_X3.3_SC_UTF8.zip [root@zq06 src]# ls 5.txt Discuz_X3.3_SC_UTF8.zip mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz nginx-1.4.7.tar.gz php-5.6.32.tar.bz2 upload apache-tomcat-8.5.32.tar.gz jdk-8u171-linux-x64.tar.gz nginx-1.4.7 php-5.6.32 readme utility
此時把以前discuz.com目錄下的,測試文件index.php刪除,把upload下的全部文件複製到discuz.com目錄下
[root@zq06 src]# rm -f /data/wwwroot/discuz.com/index.php [root@zq06 src]# ls /data/wwwroot/discuz.com/ [root@zq06 src]# cp -r upload/* /data/wwwroot/discuz.com/ [root@zq06 src]# ls /data/wwwroot/discuz.com/ admin.php archiver cp.php favicon.ico home.php member.php portal.php source uc_client api config crossdomain.xml forum.php index.php misc.php robots.txt static uc_server api.php connect.php data group.php install plugin.php search.php template userapp.php
在windows下,打開hosts文件
添加如下:
192.168.112.184 www.discuz.com www.dedecms.com www.zrlog.com
在瀏覽器下,輸入 www.discuz.com 域名,出現discuz的安裝頁面
如今出現紅色,那是須要受權777權限
現把全部須要更改權限的文件,複製到一個文本里
[root@zq04 discuz.com]# vim filelist.txt ./config ./data ./data/cache ./data/avatar ./data/plugindata ./data/download ./data/addonmd5 ./data/template ./data/threadcache ./data/attachment ./data/attachment/album ./data/attachment/forum ./data/attachment/group ./data/log ./uc_client/data/cache ./uc_server/data/ ./uc_server/data/cache ./uc_server/data/avatar ./uc_server/data/backup ./uc_server/data/logs ./uc_server/data/tmp ./uc_server/data/view
建立一個shell腳本,這個腳本很簡單,就是輪流給清單裏的文件777權限;
[root@zq04 discuz.com]# vim qxgg.sh #!bin/bash for file in `cat ./filelist.txt` do chmod 777 $file done
執行此腳本
[root@zq04 discuz.com]# sh qxgg.sh
執行完腳本後,此時刷新瀏覽器,就能夠看到所有變綠色
點擊下一步,
點擊下一步,按下面內容填寫;假如此處有問題,那說明沒有在mastet(zq01)上沒有建立用戶,及受權;
如今開始用使用mycat鏈接mysql
[root@zq04 ~]# vim /data/wwwroot/discuz.com/config/config_global.php // ---------------------------- CONFIG DB ----------------------------- // $_config['db']['1']['dbhost'] = '192.168.112.183:8066'; //mycat ip 及其端口 $_config['db']['1']['dbuser'] = 'discuz'; //用戶名 $_config['db']['1']['dbpw'] = 'www123'; //密碼 $_config['db']['1']['dbcharset'] = 'utf8'; $_config['db']['1']['pconnect'] = '0'; $_config['db']['1']['dbname'] = 'ultrax'; $_config['db']['1']['tablepre'] = 'pre_'; $_config['db']['slave'] = ''; $_config['db']['common']['slave_except_table'] = '';
重啓nginx服務;
[root@zq04 ~]# nginx restart Restarting nginx (via systemctl): [ 肯定 ]
此時退出登陸頁面,只要可以從新登陸,那證實架構沒問題;
搭建dedecms企業網站,一樣的也須要先配置一個虛擬主機站點:
[root@zq04 ~]# cd /usr/local/nginx/conf/vhost [root@zq04 vhost]# vim dedecms.com.conf server { listen 80; server_name www.dedecms.com; index index.html index.htm index.php; root /data/wwwroot/dedecms.com; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/dedecms.com$fastcgi_script_name; } }
建立站點目錄,並建立測試頁
[root@zq04 vhost]# mkdir -p /data/wwwroot/dedecms.com/ [root@zq04 vhost]# cd /data/wwwroot/dedecms.com/ [root@zq04 dedecms.com]# vim index.php <?php echo "Welcome to dedecms.com" ?>
重啓,測試網站dedecms.com
[root@zq04 dedecms.com]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@zq04 dedecms.com]# /usr/local/nginx/sbin/nginx -s reload [root@zq04 dedecms.com]# curl -x192.168.112.184:80 www.dedecms.com Welcome to discuz.com [root@zq04 dedecms.com]# rm -f index.php //刪除此測試頁
開始安裝dedecms,下載dedecms的安裝包
[root@zq04 dedecms.com]# cd /usr/local/src/ [root@zq04 src]# wget http://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7-UTF8-SP2.tar.gz
把軟件包的uploads目錄裏,全部的文件都複製到dedecms.com網站目錄下
[root@zq04 src]# ls DedeCMS-V5.7-UTF8-SP2 docs uploads [root@zq04 src]# cd DedeCMS-V5.7-UTF8-SP2/ [root@zq04 DedeCMS-V5.7-UTF8-SP2]# docs uploads [root@zq04 DedeCMS-V5.7-UTF8-SP2]# cp -r ./uploads/* /data/wwwroot/dedecms.com/
由於以前在 windows上 添加了域名www.dedecms.com,所以直接在瀏覽器輸入 www.dedecms.com;
此處須要受權,由於須要受權的目錄少,不必寫腳本
[root@zq04 DedeCMS-V5.7-UTF8-SP2]# cd /data/wwwroot/dedecms.com/ [root@zq04 dedecms.com]# chmod 777 ./ [root@zq04 dedecms.com]# chmod 777 ./dede [root@zq04 dedecms.com]# chmod 777 ./data [root@zq04 dedecms.com]# chmod 777 ./a [root@zq04 dedecms.com]# chmod 777 ./install [root@zq04 dedecms.com]# chmod 777 ./special [root@zq04 dedecms.com]# chmod 777 ./uploads/
更改權限後,直接刷新瀏覽器
點繼續;按下圖填寫,鏈接服務器;
點擊繼續;此時顯示安裝完成;
點擊登陸網站後臺,此時須要輸入用戶名;(注意此處不是數據庫的,而是網站的)
可以登陸到後臺,配置正確;
[root@zq04 ~]# vim /usr/local/tomcat/conf/server.xml # 在文件中增長如下內容: <Host name="www.zrlog.com" appBase="" unpackWARs= "true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="/data/wwwroot/zrlog.com/" debug="0" reloadable="true" crossContext="true"/> </Host>
建立相應的站點目錄,下載安裝包,並解壓到zrlog.com站點目錄下
[root@zq04 ~]# mkdir /data/wwwroot/zrlog.com [root@zq04 src]# wget http://dl.zrlog.com/release/zrlog-1.7.1-baaecb9-release.war [root@zq04 src]# ls zrlog-1.7.1-baaecb9-release.war zrlog-1.7.1-baaecb9-release.war [root@zq04 src]# unzip zrlog-1.7.1-baaecb9-release.war -d /data/wwwroot/zrlog.com [root@zq04 src]# cd /data/wwwroot/zrlog.com [root@zq04 zrlog.com]# ls admin assets attached error favicon.ico include install logs META-INF WEB-INF
爲了共享80端口還須要配置nginx反向代理tomcat,否則就會訪問衝突;編輯主機配置文件:
[root@zq04 zrlog.com]# vim /usr/local/nginx/conf/vhost/zrlog.com.conf upstream zrlog_com { ip_hash; server localhost:8080; } server { listen 80; server_name www.zrlog.com; location / { proxy_pass http://zrlog_com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
重啓nginx服務;
[root@zq04 zrlog.com]# service nginx restart Restarting nginx (via systemctl): [ 肯定 ] [root@zq04 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2164/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1007/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1262/master tcp6 0 0 :::22 :::* LISTEN 1007/sshd tcp6 0 0 ::1:25 :::* LISTEN 1262/master tcp6 0 0 :::3306 :::* LISTEN 1218/mysqld
由於zrlog是java站點,所以重啓tomcat服務;並查看端口
[root@zq04 ~]# /usr/local/tomcat/bin/shutdown.sh [root@zq04 ~]# /usr/local/tomcat/bin/startup.sh [root@zq04 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2164/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1007/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1262/master tcp6 0 0 :::8080 :::* LISTEN 2208/java tcp6 0 0 127.0.0.1:42102 :::* LISTEN 2262/java tcp6 0 0 127.0.0.1:22102 :::* LISTEN 2262/java tcp6 0 0 :::22 :::* LISTEN 1007/sshd tcp6 0 0 ::1:25 :::* LISTEN 1262/master tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2208/java tcp6 0 0 127.0.0.1:52102 :::* LISTEN 2262/java tcp6 0 0 :::8009 :::* LISTEN 2208/java tcp6 0 0 :::3306 :::* LISTEN 1218/mysqld
在Windows上,直接瀏覽器訪問 www.zrlog.com
跟前面同樣,都是同mycat鏈接mysql;
此處按照自定義,填寫
登陸到就能夠進入後臺管理;
6.給站點的後臺訪問作二次認證
作二次訪問,須要一個命令:htpasswd,所以須要安裝httpd
[root@zq04 ~]# yum install -y httpd //安裝httpd [root@zq04 ~]# htpasswd -c /usr/local/nginx/conf/htpasswd admin //設置 登陸用戶的密碼 New password: Re-type new password: Adding password for user admin //用戶爲admin,這個能夠自定義 [root@zq04 ~]# cat /usr/local/nginx/conf/htpasswd //此時密碼生成 admin:$apr1$lIcVEl3m$HE8Q86GfFlJ4te6T2UY.k.
[root@zq04 ~]# vim /usr/local/nginx/conf/vhost/discuz.com.conf server { listen 80; server_name www.discuz.com; index index.html index.htm index.php; root /data/wwwroot/discuz.com; access_log /data/wwwroot/discuz.com/data/log/discuz.com.log combined_realip; location ~ admin.php //此模塊爲 ,二次訪問 { auth_basic "Auth"; auth_basic_user_file /usr/local/nginx/conf/htpasswd; //密碼文件 } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/discuz.com$fastcgi_script_name; }
[root@zq04 ~]# vim /usr/local/nginx/conf/vhost/dedecms.com.conf server { listen 80; server_name www.dedecms.com; index index.html index.htm index.php; root /data/wwwroot/dedecms.com; location /dede/ //此模塊爲 ,二次訪問 { auth_basic "Auth"; auth_basic_user_file /usr/local/nginx/conf/htpasswd; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/dedecms.com$fastcgi_script_name; } }
[root@zq04 ~]# vim /usr/local/nginx/conf/vhost/zrlog.com.conf upstream zrlog_com { ip_hash; server localhost:8080; } server { listen 80; server_name www.zrlog.com; location /admin/ //此模塊爲 ,二次訪問 { auth_basic "Auth"; auth_basic_user_file /usr/local/nginx/conf/htpasswd; proxy_pass http://zrlog_com/admin/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { proxy_pass http://zrlog_com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
檢查語法錯誤,從新加載配置文件,重啓nginx服務;
[root@zq04]# usr/local/nginx/sbin/nginx -t [root@zq04]# /usr/local/nginx/sbin/nginx -s reload [root@zq04]# service nginx restart Restarting nginx (via systemctl): [ 肯定 ]
在登陸後臺管理時候,都說明須要auth ,也就是密碼訪問;
[root@zq04 ~]# curl -x127.0.0.1:80 http://www.discuz.com/admin.php -I HTTP/1.1 401 Unauthorized Server: nginx/1.4.7 Date: Mon, 20 Aug 2018 07:51:49 GMT Content-Type: text/html Content-Length: 194 Connection: keep-alive WWW-Authenticate: Basic realm="Auth" [root@zq04 ~]# curl -x127.0.0.1:80 http://www.dedecms.com/dede/ -I HTTP/1.1 401 Unauthorized Server: nginx/1.4.7 Date: Mon, 20 Aug 2018 07:52:28 GMT Content-Type: text/html Content-Length: 194 Connection: keep-alive WWW-Authenticate: Basic realm="Auth" [root@zq04 ~]# curl -x127.0.0.1:80 http://www.zrlog.com/admin/ -I HTTP/1.1 401 Unauthorized Server: nginx/1.4.7 Date: Mon, 20 Aug 2018 07:52:53 GMT Content-Type: text/html Content-Length: 194 Connection: keep-alive WWW-Authenticate: Basic realm="Auth"
爲了更清楚看到,在瀏覽器登陸後臺,此時會彈出一個對話框
搭建lnmp、tomcat+jdk環境 ; 三個站點分別爲:discuz論壇、dedecms企業網站以及zrlog博客都已經佈置完畢;
如今把zq04機器,關機,排快照保存,再克隆兩臺機器爲,zq0五、zq06
更改其IP
[root@zq04 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR=192.168.112.185重啓網絡服務
[root@zq05 ~]# systemctl restart networkw.service更改主機名
[root@zq04 ~]# hostnamectl set-hostname zq05 [root@zq04 ~]# bash [root@zq05 ~]#zq06機器同樣配置;
5 須要共享靜態文件,好比discuz須要共享的目錄是 data/attachment,dedecms須要共享upload(具體目錄,你能夠先上傳一個圖片,查看圖片所在目錄)
此步驟用NFS,參照 Linux 第25課——NFS/FTP服務搭建與配置
計劃安排:zq04做爲NFS服務器,zq0五、zq06做爲客戶端
在zq04上安裝 nfs-utils和rpcbind包,安裝命令
[root@zq04 ~]# install -y nfs-utils rpcbind
開啓rpcbind和nfs
[root@zq04 ~]# systemctl start rpcbind [root@zq04 ~]# systemctl start nfs [root@zq04 ~]# ps aux |grep nfs root 1051 0.0 0.0 0 0 ? S< 07:36 0:00 [nfsd4_callbacks] root 1055 0.0 0.0 0 0 ? S 07:36 0:00 [nfsd] root 1056 0.0 0.0 0 0 ? S 07:36 0:00 [nfsd] root 1057 0.0 0.0 0 0 ? S 07:36 0:00 [nfsd] root 1058 0.0 0.0 0 0 ? S 07:36 0:00 [nfsd] root 1059 0.0 0.0 0 0 ? S 07:36 0:00 [nfsd] root 1060 0.0 0.0 0 0 ? S 07:36 0:00 [nfsd] root 1061 0.0 0.0 0 0 ? S 07:36 0:00 [nfsd] root 1062 0.0 0.0 0 0 ? S 07:36 0:00 [nfsd] root 1799 0.0 0.0 112720 980 pts/1 R+ 08:24 0:00 grep --color=auto nfs [root@zq04 ~]# ps aux |grep rpc root 500 0.0 0.0 0 0 ? S< 07:36 0:00 [rpciod] root 633 0.0 0.0 43860 540 ? Ss 07:36 0:00 /usr/sbin/rpc.idmapd rpc 657 0.0 0.1 65000 1396 ? Ss 07:36 0:00 /sbin/rpcbind -w root 1035 0.0 0.2 41704 2976 ? Ss 07:36 0:00 /usr/sbin/rpc.mountd -p 20048 rpcuser 1038 0.0 0.1 42420 1748 ? Ss 07:36 0:00 /usr/sbin/rpc.statd root 1801 0.0 0.0 112720 984 pts/1 R+ 08:24 0:00 grep --color=auto rpc [root@zq04 ~]# rpcinfo -p program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100005 1 udp 20048 mountd 100005 1 tcp 20048 mountd 100005 2 udp 20048 mountd 100005 2 tcp 20048 mountd 100005 3 udp 20048 mountd 100005 3 tcp 20048 mountd 100024 1 udp 38738 status 100024 1 tcp 42835 status 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 3 udp 2049 nfs_acl 100021 1 udp 49049 nlockmgr 100021 3 udp 49049 nlockmgr 100021 4 udp 49049 nlockmgr 100021 1 tcp 39016 nlockmgr 100021 3 tcp 39016 nlockmgr 100021 4 tcp 39016 nlockmgr
設置開機啓動
[root@zq04 ~]# systemctl enable rpcbind [root@zq04 ~]# systemctl enable nfs
須要共享的目錄
- discuz須要共享的目錄是:/data/wwwroot/discuz.com/data/attachment/
- dedecms須要共享的目錄是:/data/wwwroot/dedecms.com/uploads/
- zrlog須要共享的目錄是:/data/wwwroot/zrlog.com/attached/
- 而後給這些目錄777的權限
先用一個腳本寫入NFS服務的信息
[root@zq04 ~]# vim forIP.sh file=$1 for i in `seq 5 6` //ip 18五、186 do echo "$file 192.168.112.18$i/24(rw,sync,no_root_squash)" >> /etc/exports done
執行此腳本
[root@localhost ~]$ sh forIP.sh "/data/wwwroot/discuz.com/data/attachment/" [root@localhost ~]$ sh forIP.sh "/data/wwwroot/dedecms.com/uploads/" [root@localhost ~]$ sh forIP.sh "/data/wwwroot/zrlog.com/attached/"
查看寫入的狀況
[root@zq04 ~]# vim /etc/exports /data/wwwroot/discuz.com/data/attachment/ 192.168.112.185/24(rw,sync,no_root_squash) /data/wwwroot/discuz.com/data/attachment/ 192.168.112.186/24(rw,sync,no_root_squash) /data/wwwroot/dedecms.com/uploads/ 192.168.112.185/24(rw,sync,no_root_squash) /data/wwwroot/dedecms.com/uploads/ 192.168.112.186/24(rw,sync,no_root_squash) /data/wwwroot/zrlog.com/attached/ 192.168.112.185/24(rw,sync,no_root_squash) /data/wwwroot/zrlog.com/attached/ 192.168.112.186/24(rw,sync,no_root_squash)
清空防火牆規則;中止防火牆
[root@zq04 ~]# systemctl stop firewalld
檢測NFS服務器(zq04)上的共享目錄是否掛載上
[root@zq04 ~]# exportfs /data/wwwroot/discuz.com/data/attachment 192.168.112.185/24 /data/wwwroot/discuz.com/data/attachment 192.168.112.186/24 /data/wwwroot/dedecms.com/uploads 192.168.112.185/24 /data/wwwroot/dedecms.com/uploads 192.168.112.186/24 /data/wwwroot/zrlog.com/attached 192.168.112.185/24 /data/wwwroot/zrlog.com/attached 192.168.112.186/24
其實184機器也至關於客戶端、服務端一體
[root@zq04 ~]# showmount -e 192.168.112.184 Export list for 192.168.112.184: /data/wwwroot/zrlog.com/attached 192.168.112.186/24,192.168.112.185/24 /data/wwwroot/dedecms.com/uploads 192.168.112.186/24,192.168.112.185/24 /data/wwwroot/discuz.com/data/attachment 192.168.112.186/24,192.168.112.185/24
如今再配置客戶端,由於機器少,就不用腳本
安裝客戶端的軟件,
[root@zq05 ~]# yum install -y nfs-utils
啓動rpcbind服務,並設置其開機啓動
[root@zq05 ~]# systemctl start rpcbind [root@zq05 ~]# systemctl enable rpcbind
注意:客戶端不須要啓動nfs服務;
檢查NFS服務器(即184機器上)的共享目錄
root@zq05 ~]# showmount -e 192.168.112.184 Export list for 192.168.112.184: /data/wwwroot/zrlog.com/attached 192.168.112.186/24,192.168.112.185/24 /data/wwwroot/dedecms.com/uploads 192.168.112.186/24,192.168.112.185/24 /data/wwwroot/discuz.com/data/attachment 192.168.112.186/24,192.168.112.185/24
再用mount掛載NFS服務器上的共享目錄,沒有目錄建立目錄;
[root@zq05 ~]# mount -t nfs 192.168.112.184:/data/wwwroot/dedecms.com/uploads /data/wwwroot/dedecms.com/uploads [root@zq05 ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 7.8G 4.2G 3.7G 53% / devtmpfs 482M 0 482M 0% /dev tmpfs 493M 0 493M 0% /dev/shm tmpfs 493M 6.8M 486M 2% /run tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/sda1 197M 103M 95M 53% /boot tmpfs 99M 0 99M 0% /run/user/0 192.168.112.184:/data/wwwroot/dedecms.com/uploads 7.8G 4.2G 3.7G 53% /data/wwwroot/dedecms.com/uploads
先測試一下,回到NFS服務器(184)上,在/data/wwwroot/dedecms.com/uploads目錄下建立文件
[root@zq04 ~]# cd /data/wwwroot/dedecms.com/uploads [root@zq04 uploads]# ls allimg flink index.html litimg media soft userup [root@zq04 uploads]# touch 2.txt [root@zq04 uploads]# touch 5.txt
再回到客戶端機器(185)上,在相應目錄下查看
[root@zq05 ~]# ls /data/wwwroot/dedecms.com/uploads 2.txt 5.txt allimg flink index.html litimg media soft userup
相反操做,看NFS服務器上能看到不
root@zq05 ~]# cd /data/wwwroot/dedecms.com/uploads [root@zq05 uploads]# ls 2.txt 5.txt allimg flink index.html litimg media soft userup [root@zq05 uploads]# touch 88.txt
NFS服務器(184)上查看,以及另外一個客戶端zq06
[root@zq04 uploads]# ls 2.txt 5.txt 88.txt allimg flink index.html litimg media soft userup [root@zq06 ~]# ls /data/wwwroot/dedecms.com/uploads 2.txt 5.txt 88.txt allimg flink index.html litimg media soft userup
此時證實配置成功;
如今把須要掛載的目錄掛載上,
[root@zq05 uploads]# mount -t nfs 192.168.112.184:/data/wwwroot/zrlog.com/attached /data/wwwroot/zrlog.com/attached [root@zq05 uploads]# mount -t nfs 192.168.112.184:/data/wwwroot/discuz.com/data/attachment /data/wwwroot/discuz.com/data/attachment [root@zq05 uploads]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 7.8G 4.2G 3.7G 53% / devtmpfs 482M 0 482M 0% /dev tmpfs 493M 0 493M 0% /dev/shm tmpfs 493M 6.8M 486M 2% /run tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/sda1 197M 103M 95M 53% /boot tmpfs 99M 0 99M 0% /run/user/0 192.168.112.184:/data/wwwroot/dedecms.com/uploads 7.8G 4.2G 3.7G 53% /data/wwwroot/dedecms.com/uploads 192.168.112.184:/data/wwwroot/zrlog.com/attached 7.8G 4.2G 3.7G 53% /data/wwwroot/zrlog.com/attached 192.168.112.184:/data/wwwroot/discuz.com/data/attachment 7.8G 4.2G 3.7G 53% /data/wwwroot/discuz.com/data/attachment
zq06同樣的操做;
9 因爲機器有限,儘量地把三個站點放到同一臺服務器上,而後作負載均衡集羣,要求全部站點域名解析到一個ip上,也就是說只有一個出口ip
安裝keepalived
[root@zq07 ~]# yum install -y keepalived
在虛擬主機目錄,建立一個新的配置文件,名稱自定義
[root@zq07 ~]# vim /usr/local/nginx/conf/vhost/load.conf upstream zq { ip_hash; server 192.168.112.184:80; server 192.168.112.185:80; server 192.168.112.186:80; } server { listen 80; server_name www.discuz.com www.dedecms.com www.zrlog.com; location / { proxy_pass http://zq; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
清空默認配置文件內容,寫入如下代碼
[root@zq07 ~]# > /etc/keepalived/keepalived.conf [root@zq07 ~]# vim /etc/keepalived/keepalived.conf global_defs { notification_email { txwd188@126.com } notification_email_from txwd188@126.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } } vrrp_script chk_nginx { script "/usr/local/sbin/check_ng.sh" //定義的腳本 interval 3 } vrrp_instance VI_1 { state MASTER //狀態爲 主 interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass zq } virtual_ipaddress { //VIP 192.168.112.199 } track_script { chk_nginx } }
腳本路徑在keepalived配置文件中有定義,路徑爲/usr/local/sbin/check_ng.sh 編輯配置文件:
[root@zq07 ~]# vim /usr/local/sbin/check_ng.sh #!/bin/bash #時間變量,用於記錄日誌 d=`date --date today +%Y%m%d_%H:%M:%S` #計算nginx進程數量 n=`ps -C nginx --no-heading|wc -l` #若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量, #若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived if [ $n -eq "0" ]; then /etc/init.d/nginx start n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log systemctl stop keepalived fi fi
授予755權限,開啓keepalived服務
[root@zq07 ~]# chmod 755 /usr/local/sbin/check_ng.sh [root@zq07 ~]# systemctl start keepalived
查看zq07上是否出現VIP,出現
[root@zq07 ~]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::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 1000 link/ether 00:0c:29:13:a1:97 brd ff:ff:ff:ff:ff:ff inet 192.168.112.187/24 brd 192.168.112.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.112.199/32 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::b235:e548:b630:9167/64 scope link valid_lft forever preferred_lft forever inet6 fe80::9721:39ae:1869:d046/64 scope link tentative dadfailed valid_lft forever preferred_lft forever
zq08 配置上和 zq07基本同樣;只須要再/etc/keepalived/keepalived.conf配置文件中,略有不一樣;
[root@zq08 ~]# vim /etc/keepalived/keepalived.conf global_defs { notification_email { txwd188@126.com } notification_email_from txwd188@126.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/usr/local/sbin/check_ng.sh" interval 3 } vrrp_instance VI_1 { state BACKUP //狀態爲 備用機 interface ens33 virtual_router_id 51 //和主機器 保持一致 priority 90 //權重比zq07上低,主次分明 advert_int 1 authentication { auth_type PASS auth_pass zq } virtual_ipaddress { 192.168.112.199 } track_script { chk_nginx } }
如今zq0七、zq08搭建了 keeplived + Ngnix 負載均衡;
在windows下,打開hosts文件,把原ip 192.168.112.184 改成 192.168.112.199,此爲 VIP;
192.168.112.199 www.discuz.com www.dedecms.com www.zrlog.com
此時全部的 web服務器(zq0四、zq0五、zq06)的出口,就成爲192.168.112.199這一個出口;
任何一臺web服務器宕機,均可以主動切換爲其餘服務器,並且zq0七、zq08做爲調度機也是一主、一備;
先測試調用zq的那臺web服務器
對於測試,由於訪問的頁面 是不同的,所以,分別在三臺web服務器,作三個測試頁,來分析,每次調用的 是哪一個服務器
此時vip 192.168.112.199 在zq07機器上,由於zq07做爲master機器,權重高,所以處於主動工做
[root@zq07 vhost]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::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 1000 link/ether 00:0c:29:13:a1:97 brd ff:ff:ff:ff:ff:ff inet 192.168.112.187/24 brd 192.168.112.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.112.199/32 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::9eae:4950:ecfd:1144/64 scope link valid_lft forever preferred_lft forever inet6 fe80::b235:e548:b630:9167/64 scope link tentative dadfailed valid_lft forever preferred_lft forever inet6 fe80::9721:39ae:1869:d046/64 scope link tentative dadfailed valid_lft forever preferred_lft forever
zq08做爲備用機器;
[root@zq08 vhost]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::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 1000 link/ether 00:0c:29:ab:da:a2 brd ff:ff:ff:ff:ff:ff inet 192.168.112.188/24 brd 192.168.112.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::9721:39ae:1869:d046/64 scope link valid_lft forever preferred_lft forever
如今把zq07上的keepalived服務中止;此時 vip 192.168.112.199已經轉移到zq08機器上
[root@zq07 vhost]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::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 1000 link/ether 00:0c:29:13:a1:97 brd ff:ff:ff:ff:ff:ff inet 192.168.112.187/24 brd 192.168.112.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::9eae:4950:ecfd:1144/64 scope link valid_lft forever preferred_lft forever inet6 fe80::b235:e548:b630:9167/64 scope link tentative dadfailed valid_lft forever preferred_lft forever inet6 fe80::9721:39ae:1869:d046/64 scope link tentative dadfailed valid_lft forever preferred_lft forever
vip 192.168.112.199 在zq08上,說明zq07宕機,備用機zq08代替zq07繼續工做;
[root@zq08 vhost]# ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::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 1000 link/ether 00:0c:29:ab:da:a2 brd ff:ff:ff:ff:ff:ff inet 192.168.112.188/24 brd 192.168.112.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.112.199/32 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::9721:39ae:1869:d046/64 scope link valid_lft forever preferred_lft forever
首先在以前zq0七、zq08寫一個虛擬主機配置文件; 域名www.aaa.com 能夠被3臺機器代理訪問;
[root@zq07 vhost]# vim test.conf upstream z { ip_hash; server 192.168.112.184; server 192.168.112.185; server 192.168.112.186; } server { listen 80; server_name www.aaa.com; location / { proxy_pass http://z; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
在 zq0四、zq0五、zq06 的默認文件下,建立測試頁
[root@zq04]# vim /data/wwwroot/default/index.php <?php echo "It,s zq04 web server" ?>
編輯其默認虛擬主機配置文件
[root@zq04]# vim /usr/local/nginx/conf/vhost/default.conf server { listen 80 default_server; server_name www.aaa.com; //域名 index index.html index.htm index.php; root /data/wwwroot/default; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /data/wwwroot/default$fastcgi_script_name; } }
從新加載配置文件;
[root@zq04 ~]# /usr/local/nginx/sbin/nginx -t [root@zq04 ~]# /usr/local/nginx/sbin/nginx -s reload
zq0五、zq06機器上同樣配置
再在windows hosts文件中,把 www.aaa.com添加在 192.168.112.199後面
192.168.112.199 www.discuz.com www.dedecms.com www.zrlog.com www.aaa.com
此時在瀏覽器裏,輸入www.aaa.com,隨機出現zq05機器,可是刷新比較久,仍是未變;
模擬zq05宕機,在zq05上中止nginx服務
[root@zq05 default]# /etc/init.d/nginx stop Stopping nginx (via systemctl): [ 肯定 ]
一樣模擬zq06宕機,在zq06上中止nginx服務,最後剩下zq04
[root@zq06 default]# /etc/init.d/nginx stop Stopping nginx (via systemctl): [ 肯定 ]
此時說明vip 192.168.112.199 隨機調用zq0四、zq0五、zq06任意一臺,其中一臺宕機,其他的會頂上;
此部分完成;