搭建web

搭建LNMP环境,和Tomcat+Java环境,默认80端口给Nginx,Tomcat使用8080端口。

先在一台机器上部署好全部环境,然后通过rsync同步整个环境。

使用expect脚本之前安装一些通用工具,yum -y install expect vim-enhanced epel-release libmcrypt-devel libmcrypt

分发

  • 因为拿到机器后有一个简单的初始密码,所以需要使用脚本批量修改密码,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/conf

  • 备份一下原配置文件 :mv nginx.conf nginx.conf.bak

  • 重新编辑vim nginx.conf 写入以下网址内容。

https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D15Z/nginx.conf
启动nginx
  • 检查配置文件:/usr/local/nginx/sbin/nginx -t

  • 启动服务 :service nginx start

  • 检查进程: ps aux |grep nginx

  • 检查80端口监听:netstat -lntp |grep 80

  • 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

转载于:https://my.oschina.net/u/3852961/blog/1922736

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值