搭建web

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

先在一臺機器上部署好所有環境,而後經過rsync同步整個環境。php

使用expect腳本以前安裝一些通用工具,yum -y install expect vim-enhanced epel-release libmcrypt-devel libmcryptcss

分發

  • 由於拿到機器後有一個簡單的初始密碼,因此須要使用腳本批量修改密碼,expect腳本以下:
[root@localhost ~]# vim mvPasswd.expect
#!/usr/bin/expect
set host [lindex $argv 0]
set passwd "原密碼"
set password [lindex $argv 1]
spawn ssh root@$host
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}

expect "]*"
send "passwd\r"
expect ":"
send "$password\r"
expect ":"
send "$password\r"
expect "]*"
send "exit\r"

interact

[root@localhost ~]# chmod a+x mvPasswd.expect
  • shell調用腳本以下:
[root@localhost ~]# vim mvPasswd.sh
#!/bin/bash
for ip in `cat $1`
do
  ./mvPasswd.expect $ip $2
done

# 第一個參數存儲ip列表的文件,第二個參數是須要修改的密碼
[root@localhost ~]# sh mvPasswd.sh /root/ip.txt "u7wtiYT22g"
  • 而後再寫一個通用的能夠批量遠程執行命令的expect腳本:
[root@localhost ~]# vim cmd.expect
#!/usr/bin/expect
set user [lindex $argv 0]  # 系統用戶
set host [lindex $argv 1]  # 服務器地址
set passwd [lindex $argv 2]  # 密碼
set cm [lindex $argv 3]  # 須要執行的命令
spawn ssh $user@$host
set timeout -1
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}

expect "]#"
send "$cm\r"
expect "]#"
send "exit\r"
interact

[root@localhost ~]# chmod a+x cmd.expect
[root@localhost ~]# vim cmd.sh
  • 調用腳本
#!/bin/bash
user=$2
password=$3
cm=$4
for ip in `cat $1`
do
  ./cmd.expect "$user" "$ip" "$password" "$cm"
done

## 參數1是存儲ip列表的文件路徑
## 參數2是用戶名
## 參數3是密碼
## 參數4須要執行的命令
  • 使用腳本:
[root@localhost ~]# sh cmd.sh "/root/ip.txt" "root" "u7wtiYT22g" "init 0"

安裝nginx

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; cd /usr/local/src/; wget http://nginx.org/download/nginx-1.8.0.tar.gz; tar -zxvf nginx-1.8.0.tar.gz; cd nginx-1.8.0; ./configure --prefix=/usr/local/nginx --with-http_ssl_module; echo $? > /root/downloadNginx.log; make && make install; echo $? >> /root/downloadNginx.log

先配置其中一臺機器的配置文件:

  • 編輯啓動腳本:
vim /etc/init.d/nginx
而後將這網址裏的文件內容複製進去:
https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/etc_init.d_nginx
  • 編輯完成後設置權限,把nginx服務添加到服務列表,並設置開機啓動:
chkconfig --add nginx
chkconfig nginx on

由於不使用nginx自帶的配置文件,因此須要從新編輯一個配置文件:

  • 進入nginx的conf目錄:cd /usr/local/nginx/confhtml

  • 備份一下原配置文件 :mv nginx.conf nginx.conf.bakjava

  • 從新編輯vim nginx.conf 寫入如下網址內容。mysql

https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/nginx.conf

啓動nginx

  • 檢查配置文件:/usr/local/nginx/sbin/nginx -tlinux

  • 啓動服務 :service nginx startnginx

  • 檢查進程: ps aux |grep nginxc++

  • 檢查80端口監聽:netstat -lntp |grep 80git

  • curl localhost有網頁內容輸出說明成功。


安裝mysql

安裝mysql,這是由於php須要用到mysql的驅動庫,因此只須要安裝便可,不須要進行配置:

cd /usr/local/src/; yum install -y epel-release wget perl-Module-Install.noarch libaio*; wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz; tar -zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz; mv mysql-5.6.39-linux-glibc2.12-x86_64 ../mysql; cd /usr/local/mysql; mkdir /data/; useradd mysql; ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql; echo $? > /root/downloadMySQL.log

安裝PHP

cd /usr/local/src/; 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; wget http://cn2.php.net/distributions/php-5.6.32.tar.gz; tar -zxvf php-5.6.32.tar.gz; cd php-5.6.32/; ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --with-fpm-user=nginx --with-fpm-group=nginx --with-mysql --with-pdo-mysql --with-mysqli --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir --enable-xml --with-mcrypt --enable-gd-native-ttf --enable-exif --with-pear --with-iconv-dir --enable-ftp --enable-soap --with-bz2 --with-curl --with-mhash --with-openssl --with-gd --enable-mysqlnd; echo $? > /root/downloadPHP.log; make && make install; echo $? >> /root/downloadPHP.log

cp配置文件

cp php.ini-production /usr/local/php-fpm/etc/php.ini

建立一個php-fpm.conf文件:

  • vim /usr/local/php-fpm/etc/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.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

拷貝啓動腳本、更改文件權限、添加到服務列表裏,並設置開機啓動

cp /usr/local/src/php-5.6.30/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on

添加php-fpm服務用戶

useradd -s /sbin/nologin php-fpm

使用php-fpm -t檢測一下配置文件有沒有問題

/usr/local/php-fpm/sbin/php-fpm -t

[06-Aug-2018 21:57:51] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
  • 沒有問題後就啓動服務,並檢查進程:
[root@xiangmu1 php-5.6.32]# service php-fpm start
Starting php-fpm  done
[root@xiangmu1 php-5.6.32]# ps aux |grep php-fpm

最後檢查一下nginx可否解析php,在nginx的html目錄下建立一個php文件,寫一句簡單的php代碼

vim /usr/local/nginx/html/1.php
<?php
echo "This Test Page!"
?>
  • curl測試
curl localhost/1.php
This Test Page!

Nginx 默認虛擬主機

  • 先編輯nginx.conf 裏面把server下面的全刪了

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;
gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/htm
    application/xml;
    *須要增長*
    include vhost/*.conf;

}
  • 建立vhost目錄 mkdir /usr/local/nginx/conf/vhost
  • 而後進去建立 aaa.com.conf
[root@aminglinux-01 conf]# cd /usr/local/nginx/conf/vhost
[root@aminglinux-01 vhost]# vim default.conf
  • 編輯 aaa.com.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;
    }
}
  • 建立/data/wwwroot/default,並寫一些東西
[root@aminglinux-01 vhost]# mkdir -p  /data/wwwroot/default
[root@aminglinux-01 vhost]# cd /data/wwwroot/default/

vim index.html 寫入 This is the default site.

  • 檢查有沒有語法錯誤 /usr/local/nginx/sbin/nginx -t
[root@aminglinux-01 default]# /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
  • 從新加載 /usr/local/nginx/sbin/nginx -s reload
  • 測試 curl localhost 正確以下:
[root@aminglinux-01 conf]# curl localhost
This is the default site.

JDK+tomcat

下載並安裝JDK

cd /usr/local/src/ ;wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz ; tar -zxvf jdk-8u181-linux-x64.tar.gz
mv jdk1.8.0_181/ /usr/local/jdk1.8

編輯/etc/profile環境變量配置文件末尾加上加入如下內容

  • 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
  • 執行生效 source /etc/profile

  • 執行java -version 顯示以下內容說明配置正確

[root@xiangmu1 src]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

安裝tomcat

cd /usr/local/src ; wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz ; tar -zxvf apache-tomcat-8.5.32.tar.gz ; mv apache-tomcat-8.5.32 /usr/local/tomcat

啓動與關閉服務的命令

/usr/local/tomcat/bin/startup.sh # 啓動服務
/usr/local/tomcat/bin/shutdown.sh # 關閉服務

查看進程與端口

netstat -lntp
ps aux |grep java
  • 若想開機啓動,須要把啓動命令放到/etc/rc.d/rc.local
echo "/usr/local/tomcat/bin/startup.sh" >> /etc/rc.d/rc.local
chmod a+x /etc/rc.d/rc.local //默認該文件沒有x權限,因此須要加一下

最後經過rsync把配置文件和安裝包同步到其餘機器上便可

  • 由於機器不算多,因此我是直接把整個根目錄給同步了,使用的是如下腳本:
#!/usr/bin/expect
set host [lindex $argv 0]
set passwd [lindex $argv 1]

spawn rsync -av / root@$host:/
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}

interact

## 調用腳本
#!/bin/bash
passwd=$2
for ip in `cat $1`
do
    ./syncAll.expect $ip $passwd
done

安裝mysql服務器,並配置主從複製

cd /usr/local/src/; yum install -y epel-release wget perl-Module-Install.noarch libaio*; wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz; tar -zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz; mv mysql-5.6.39-linux-glibc2.12-x86_64 ../mysql; cd /usr/local/mysql; mkdir /data/; useradd mysql; ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql; echo $? > /root/downloadMySQL.log

安裝完成後作以下操做

# 拷貝配置文件
[root@localhost ~]# cp /usr/local/mysql/support-files/my-default.cnf  /etc/my.cnf
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock

# 拷貝啓動腳本
[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

# 而後定義basedir和datadir的路徑
[root@localhost ~]# vim /etc/init.d/mysqld
	basedir=/usr/local/mysql
datadir=/data/mysql

# 將mysql加入服務列表裏面去,並設置爲開機啓動:
	[root@localhost ~]# chkconfig --add mysqld
[root@localhost ~]# chkconfig mysqld on
  • service mysqld start 啓服務

另外一臺mysql服務器一樣如上安裝

  • 把mysql添加到環境變量
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile          //將/usr/local/mysql/bin 加入環境變量
執行:source /etc/profile
  • 登錄 mysql -uroot -p

  • 錯誤解決:

若是出現密碼明明是正確的可是卻沒法登錄報錯的狀況:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  • 這是由於MySQL中默認存在一個用戶名爲空的帳戶,只要在本地,能夠不用輸入帳號密碼便可登陸到MySQL中。mysql在驗證用戶登錄的時候,首先是驗證host列,若是host列在驗證user列,再password列,而如今按照我以前的鏈接語句:按照host列找到爲空的那列(空匹配全部用戶名),因此匹配到了這條記錄,而後發現這條記錄的密碼爲空,而個人語句裏面有密碼,那麼就會報錯。

  • 解決辦法:刪除匿名用戶:

  • 首先修改my.cnf,vim /etc/my.cnf增長如下語句跳過密碼驗證:

skip-grant-tables
  • 而後登陸root用戶,執行如下語句刪除匿名用戶
mysql> use mysql;
mysql> delete from user where user='';
Query OK, 2 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
  • 而後重啓mysql服務就能夠正常登錄用戶了
[root@localhost ~]$ mysql -uroot -p
Enter password: 123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
  • 所有機器都安裝好mysql後開始配置主從

  • 修改my.cnf配置文件:

[root@localhost ~]$ vim /etc/my.cnf
[mysqld]
server-id=146
log_bin=master-bin
[root@localhost ~]$ service mysqld restart  # 修改完配置文件後,重啓mysqld服務
[root@localhost ~]$ ls /data/mysql  # 看看是否多瞭如下兩個文件
master-bin.000001  master-bin.index
  • 登陸master上的mysql,爲slave添加一個同步帳號:
grant replication slave on *.* to 'repl'@'192.168.159.40' identified by '123456';
grant replication slave on *.* to 'repl'@'192.168.159.50' identified by '123456';
  • 在slave上登陸這個用戶,
mysql -urepl -h"192.168.159.30" -p'123456'
  • 回到master機器上,進行鎖表
flush tables with read lock;
  • 看一下master的狀態,並記錄
mysql>  show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      120 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

完成以上master上的操做後,開始配置slave機器

  • 一樣的從上也要修改my.cnf配置文件,只不過在從上只須要增長一個server-id便可,改完以後都要重啓服務
[root@localhost ~]$ vim /etc/my.cnf
[mysqld]
server-id=147
[root@localhost ~]$ service mysqld restart
  • 登陸slave的mysql的root用戶,執行如下命令:
[root@localhost ~]$ mysql -uroot -p'123456'
 mysql> stop slave;
 mysql> change master to master_host='192.168.159.30', master_user='repl', master_password='123456', master_log_file='master-bin.000001', master_log_pos=120;
 mysql> start slave;
  • 查看slave的主從狀態是否正常,Slave_IO_Running和 Slave_SQL_Running要爲yes
mysql> show slave status\G
Slave_IO_Running: Yes
     Slave_SQL_Running: Yes
  • 回到master機器上解鎖表,並執行一些sql語句,看看是否可以同步到slave機器上
# master
mysql> unlock tables;
mysql> create database blog; # 建立一個數據庫
mysql> use blog;
mysql> create table users( uid int primary key, uname varchar(100), sex varchar(5));
mysql> insert into users(uid,uname,sex) values(1,'Jon','man');
  • 到slave上看看是否同步了數據
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> use blog;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from users;
+-----+-------+------+
| uid | uname | sex  |
+-----+-------+------+
|   1 | Jon   | man  |
+-----+-------+------+
1 row in set (0.00 sec)

mysql>
  • 能夠看到從上已經同步了剛剛在主上建立的數據庫和插入的數據,這樣就沒問題了。

搭建Mycat服務器

  • 主從搭建完成以後就能夠搭建Mycat服務器實現讀寫分離了,由於Mycat是Java開發的,因此在安裝Mycat以前得先安裝好jdk環境。

下載並安裝JDK

cd /usr/local/src/ ;wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz ; tar -zxvf jdk-8u181-linux-x64.tar.gz
mv jdk1.8.0_181/ /usr/local/jdk1.8
  • 編輯/etc/profile環境變量配置文件末尾加上加入如下內容 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
  • 執行生效 source /etc/profile

  • 執行java -version 顯示以下內容說明配置正確

[root@xiangmu1 src]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

下載安裝Mycat

cd /usr/local/src/
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
mv mycat/ /usr/local/
ls /usr/local/mycat/
bin  catlet  conf  lib  logs  version.txt
  • 修改Mycat服務器參數調整和用戶受權的配置文件server.xml。主要添加配置段以下:

vim /usr/local/mycat/conf/server.xml

# root用戶對邏輯數據庫ultrax,DedeCMS,zrlog具備增刪改查的權限
        <user name="root">
                <property name="password">123456</property>
                <property name="schemas">ultrax,DedeCMS,zrlog</property>
        </user>

        # discuz用戶對邏輯數據庫ultrax具備增刪改查的權限
        <user name="discuz">
                <property name="password">123456</property>
                <property name="schemas">ultrax</property>
        </user>

        # dedecms用戶對邏輯數據庫DedeCMS具備增刪改查的權限
        <user name="dedecms">
                <property name="password">123456</property>
                <property name="schemas">DedeCMS</property>
        </user>

        # zrlog用戶對邏輯數據庫zrlog具備增刪改查的權限
        <user name="zrlog">
                <property name="password">123456</property>
                <property name="schemas">zrlog</property>
        </user>

        # 該用戶對邏輯數據庫ultrax,DedeCMS,zrlog僅有隻讀的權限
        <user name="user">
                <property name="password">123456</property>
                <property name="schemas">ultrax,DedeCMS,zrlog</property>
                <property name="readOnly">true</property>
        </user>
  • 修改邏輯庫定義和表及分片定義的配置文件schema.xml

把自帶的配置文件重命名,做爲備份

mv /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml_bak

新建配置文件

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.159.30:3306" user="root" password="123456">
                  <!-- can have multi read hosts -->
                  <readHost host="hostS1" url="192.168.159.40:3306" user="root" password="123456" />
                 #<readHost host="hostS2" url="192.168.159.50:3306" user="root" password="123456" />
            </writeHost>
        </dataHost>
</mycat:schema>
  • schema.xml配置文件詳解
<?xml version="1.0"?>   xml文件格式;
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 文件標籤屬性;
<mycat:schema xmlns:mycat="http://io.mycat/">  Mycat起始標籤

配置邏輯庫,與server.xml指定庫名保持一致,綁定數據節點dn1;
<schema name="testdb" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn1"></schema> 

 添加數據節點dn1,設置數據節點host名稱,同時設置數據節點真實database爲discuz;
 <dataNode name="dn1" dataHost="localhost1" database="discuz" />

 數據節點主機,綁定數據節點,設置鏈接數及均衡方式、切換方法、驅動程序、鏈接方法; 
 <dataHost name="localhost1" maxCon="2000" minCon="1" balance="3" writeType="1" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

Balance均衡策略設置:
1)  balance=0  不開啓讀寫分離機制,全部讀操做都發送到當前可用writehost;
2)  balance=1  所有的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,而且M1與 M2互爲主備),正常狀況下,M2,S1,S2都參與select語句的負載均衡
3)  balance=2  全部讀操做都隨機的在readhost和writehost上分發;
4)  balance=3  全部讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力。
writeType 寫入策略設置
1)  writeType=0, 全部寫操做發送到配置的第一個writeHost;
2)  writeType=1,全部寫操做都隨機的發送到配置的writeHost;
3)  writeType=2,不執行寫操做。
switchType 策略設置
1)  switchType=-1,表示不自動切換;
2)  switchType=1,默認值,自動切換;
3)  switchType=2,基於MySQL 主從同步的狀態決定是否切換;
4)  switchType=3,基於MySQL galary cluster的切換機制(適合集羣)(1.4.1),心跳語句爲 show status like 'wsrep%'。

檢測後端MYSQL實例,SQL語句;
<heartbeat>select  user()</heartbeat>

指定讀寫請求,同時轉發至後端MYSQL真實服務器,配置鏈接後端MYSQL用戶名和密碼(該用戶名和密碼爲MYSQL數據庫用戶名和密碼);
<writeHost host="hostM1" url="192.168.200.146:3306" user="root"  password="123456">
     <readHost host="hostS1" url="192.168.200.147:3306" user="root" password="123456" />
     <readHost host="hostS2" url="192.168.200.148:3306" user="root" password="123456" />
</writeHost>

</dataHost>    數據主機標籤;
</mycat:schema>  mycat結束標籤;

mycat配置完畢。啓動mycat並查看端口8066和9066端口是否起來

[root@localhost ~]$ /usr/local/mycat/bin/mycat start
[root@localhost ~]$ netstat -lntp
tcp6       0      0 :::9066                 :::*                    LISTEN      6746/java
tcp6       0      0 :::8066                 :::*                    LISTEN      6746/java

# 注意:若是沒有這兩個端口沒有啓動,查看java環境是否生效。
# 8066是用於web鏈接mycat.
# 9066是用於SA|DBA管理端口.
  • 回到master上,經過mycat機器的IP和8066端口鏈接mysql
[root@localhost ~]$ mysql -h'192.168.159.100' -udiscuz -p'123456' -P'8066'
mysql> show databases;
+----------+
| DATABASE |
+----------+
| ultrax   |
+----------+
1 row in set (0.01 sec)

mysql>
  • 能夠正常登錄,也能查看到數據庫。

  • 使用root用戶登陸看看是否能查看到全部的數據庫

mysql -h'192.168.159.100' -uroot -p'123456' -P'8066'
mysql> show databases;
+----------+
| DATABASE |
+----------+
| DedeCMS  |
| ultrax   |
| zrlog    |
+----------+
3 rows in set (0.00 sec)

mysql>
  • 而後以9066端口登錄查看數據源
mysql>  show @@datasource;
+----------+--------+-------+----------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME   | TYPE  | HOST           | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+----------------+------+------+--------+------+------+---------+-----------+------------+
| dn1      | hostM1 | mysql | 192.168.159.30 | 3306 | W    |      0 |    0 | 2000 |       0 |         0 |          0 |
| dn1      | hostS1 | mysql | 192.168.159.40 | 3306 | R    |      0 |    0 | 2000 |       0 |         0 |          0 |
| dn3      | hostM1 | mysql | 192.168.159.30 | 3306 | W    |      0 |    0 | 2000 |       0 |         0 |          0 |
| dn3      | hostS1 | mysql | 192.168.159.40 | 3306 | R    |      0 |    0 | 2000 |       0 |         0 |          0 |
| dn2      | hostM1 | mysql | 192.168.159.30 | 3306 | W    |      0 |    0 | 2000 |       0 |         0 |          0 |
| dn2      | hostS1 | mysql | 192.168.159.40 | 3306 | R    |      0 |    0 | 2000 |       0 |         0 |          0 |
+----------+--------+-------+----------------+------+------+--------+------+------+---------+-----------+------------+
6 rows in set (0.00 sec)
  • 沒問題後,退出mycat中間件,在master上登陸mysql,建立這三個數據庫
[root@localhost ~]$ mysql -uroot -p'123456'
mysql> create database ultrax default character set utf8;
mysql> create database DedeCMS default character set utf8;
mysql> create database zrlog default character set utf8;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| DedeCMS            |
| mysql              |
| performance_schema |
| test               |
| ultrax             |
| zrlog              |
+--------------------+
7 rows in set (0.00 sec)

mysql>
  • 完成以上操做後主從複製和讀寫分離就弄好了,接下來就是搭建web服務器,而後進行對接便可。

  • 而後回到web服務器上修改discuz的配置文件。將dbhost,dbuser,dbpw,dbname中的參數改成和mycat一一對應。實現讀寫分離:

[root@localhost /data/wwwroot/discuz.com]$ vim /data/wwwroot/discuz.com/config/config_global.php
// ----------------------------  CONFIG DB  ----------------------------- //
$_config['db']['1']['dbhost'] = '192.168.159.100:8066';
$_config['db']['1']['dbuser'] = 'discuz';
$_config['db']['1']['dbpw'] = '123456';
$_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@localhost /data/wwwroot/discuz.com]$ service nginx restart
Restarting nginx (via systemctl):                          [  肯定  ]

在全部的web服務器上搭建discuz論壇、dedecms企業網站以及zrlog博客

這一步也是和搭建環境同樣,先在一臺機器上搭建好,而後再同步到其餘機器上。

搭建discuz論壇,先給discuz配置一個虛擬主機站點,和配置默認虛擬主機差很少

  • 進入到vhost目錄下,建立一個discuz.com.conf文件
cd /usr/local/nginx/conf/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;
    }
}
  • 建立站點目錄
mkdir -p /data/wwwroot/discuz.com/
  • 進入discuz.com目錄,建立一個php文件
cd /data/wwwroot/discuz.com/
vim index.php
  • 寫測試腳本
<?php
echo "This Test Page!"
?>
  • 文件內容和測試方式都是配置以上配置默認虛擬主機的過程同樣

  • 每配置一個虛擬主機站點都要重啓nginx服務

開始安裝Discuz

  • 下載Discuz的壓縮包

Discuz的壓縮包能夠在官網下載本身須要的版本 http://www.discuz.net/forum.php

[root@xiangmu1 ~]# cd /usr/local/src/
[root@xiangmu1 src]# wget http://download.comsenz.com/DiscuzX/3.3/Discuz_X3.3_SC_UTF8.zip
  • 解壓
[root@localhost /usr/local/src]# unzip Discuz_X3.3_SC_UTF8.zip
  • 解壓後會有如下幾個目錄
[root@localhost /usr/local/src]# ls
Discuz_X3.3_SC_UTF8.zip readme upload utility
  • 下載好並解壓後,先將以前用於測試的默認頁文件給刪掉,而後將以上解壓的upload目錄下全部的文件拷貝到discuz.com站點目錄下
[root@xiangmu1 src]# rm -f /data/wwwroot/discuz.com/index.php
[root@xiangmu1 src]#  ls /data/wwwroot/discuz.com/
[root@xiangmu1 src]# cp -r upload/* /data/wwwroot/discuz.com/
[root@xiangmu1 src]# ls !$
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
[root@xiangmu1 src]#
  • 以後到windows上配置hosts文件,添加一條
192.168.200.152 www.discuz.com
  • 保存以後就能夠在瀏覽器上直接進行訪問 www.discuz.com 了,訪問成功後會顯示以下頁面,點擊贊成進入下一步

  • 以後出現報錯

  • 這些目錄都沒有權限,因此要寫個腳本給這些目錄賦予權限了,頁面中顯示的目錄路徑都是相對路徑,因此這個腳本須要放在站點的根目錄下

把路徑都放在一個文本文件中

[root@localhost ~]# cd /data/wwwroot/discuz.com/
[root@localhost /data/wwwroot/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

寫個腳本調用上面的文件

[root@localhost /data/wwwroot/discuz.com]# vim filePermission.sh
#!bin/bash
# 寫個簡單的循環腳本就搞定了
for file in `cat ./fileList.txt`
do
  chmod 777 $file
done

[root@localhost /data/wwwroot/discuz.com]# sh ./filePermission.sh
  • 以後刷新網站點下一步

  • 點全新安裝點下一步

  • 點擊「下一步」,進入安裝數據庫的界面,以下圖所示

  • 下一步安裝完成

搭建dedecms

  • 配置好全部文件後遇到網頁沒法訪問,須要改一個配置文件,41行註釋掉
/data/wwwroot/DedeCMS/uploads/include/helpers

相關文章
相關標籤/搜索