搭建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
-
jdk的下载地址要临时去官网获取,官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
-
下载到/usr/local/src目录下: http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
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
-
下载并解压到/usr/local目录下
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