階段總結——用虛擬機搭建一個高可用負載均衡集羣架構

階段總結——用虛擬機搭建一個高可用負載均衡集羣架構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、準備工做

1.1 集羣架構圖

1 設計你認爲合理的架構,用visio把架構圖畫出來

1.2 機器分配

  • 機器分配: 因爲電腦配置問題,我分配了9臺機器,作實驗;

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種方法,我將都會利用到;

2、安裝mysql

首先用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,以及主機名;


3、建立myaql主從服務

根據架構,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主從設置完成;

4、搭建Mycat服務器

master:192.168.112.180 zq00

mycat: 192.168.112.183 zq03

4.1 安裝jdk環境

以前下載過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)

4.2 安裝、配置mycat

下載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管理端口.

4.3 測試mycat配置

在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服務器,而後進行對接便可。


5、搭建lnmp、tomcat+jdk環境

剩下的全部服務器(zq0四、zq0五、zq0六、zq0七、zq08)

先搭建LNMP環境,和Tomcat+Java環境,默認80端口給Nginx,Tomcat使用8080端口。

5.1 安裝、配置nginx

下載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機器同樣配置;

5.2 安裝jdk環境;

以前下載過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)

5.3 安裝Tomcat

在官網找到二進制包,下載;

[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結合時會用到

5.4 安裝php5

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默認虛擬主機,方便之後能夠直接使用:

在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 配置好了環境

6、開始建立 網站目錄

6.1 discuz.com網站建立

建立虛擬主機配置文件: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):                          [  肯定  ]

此時退出登陸頁面,只要可以從新登陸,那證實架構沒問題;

6.2 dedecms.com網站建立

搭建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/

更改權限後,直接刷新瀏覽器

點繼續;按下圖填寫,鏈接服務器;

點擊繼續;此時顯示安裝完成;

點擊登陸網站後臺,此時須要輸入用戶名;(注意此處不是數據庫的,而是網站的)

可以登陸到後臺,配置正確;

6.3 搭建zrlog博客系統

[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;
    }
}

6.4 配置檢測

重啓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;

此處按照自定義,填寫

登陸到就能夠進入後臺管理;

7、站點後臺二次訪問

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.
  • 編輯discuz的主機配置文件
[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;
    }
  • 配置dedecms,一樣的也是須要編輯主機配置文件
[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;
    }
}
  • zrlog,編輯nginx的反向代理配置文件
[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機器同樣配置;


8、配置機器中web服務器的靜態文件共享

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、keepalived + nginx負載均衡

9 因爲機器有限,儘量地把三個站點放到同一臺服務器上,而後作負載均衡集羣,要求全部站點域名解析到一個ip上,也就是說只有一個出口ip

  • 192.168.112.187 前端nginx負載主機+keepalived zq07
  • 192.168.112.188 前端nginx負載備機+keepalived zq08
  • 192.168.112.199 VIP

安裝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 負載均衡;

10、目前測試整個架構

在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服務器,作三個測試頁,來分析,每次調用的 是哪一個服務器

  • 先測試如下,keepalived 主備工做場景;

此時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
  • 測試 vip 調用的是那一臺的web 服務器;

首先在以前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任意一臺,其中一臺宕機,其他的會頂上;

此部分完成;

相關文章
相關標籤/搜索