Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第一部分(LAMP)
及时关注,下期更新第二部分
Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解
(Nginx Apache MySQL Redis)
一、实验简述
1.1 基本环境介绍
以下实验使用5台虚拟机,均为centos 6.8,发布Discuz开源论坛。
Nginx(192.168.8.134)
LAP-1(192.168.8.135)
LAP-2(192.168.8.136)
MYSQL-Master(192.168.8.137)
MYSQL-Slave(192.168.8.138)
Redis-Master(192.168.8.139)
Redis-Slave(192.168.8.140)
1.2 拓扑结构
![263e3301789d11ad35f7e1c5b56384c1.png](https://img-blog.csdnimg.cn/img_convert/263e3301789d11ad35f7e1c5b56384c1.png)
整理网络拓扑图
二、环境搭建
2.1 源码安装LAP
2.1.1 编译安装Apache
LAP(Linux Apache PHP)使用源码安装,当然亦可YUM安装
[root@localhost ~]# yum install apr-devel apr-util-devel -y
注:安装编译Apache需要的依赖包,若没有gcc 请安装gcc gcc-c++
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# wget http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.34.tar.gz
[root@localhost src]# tar zxf httpd-2.2.34.tar.gz
[root@localhost src]# cd httpd-2.2.34
[root@localhost httpd-2.2.34]# ./configure --prefix=/usr/local/apache2/ --enable-so --enable-rewrite --enable-module=so
[root@localhost httpd-2.2.34]# make -j8 && make install -j8
注:下载apache源码包进行编译安装,其中–enable-module=so参数一定要加上,不然后面不能进行模块添加
2.1.2 编译安装PHP
[root@localhost php-5.3.28]# yum -y install libxml2 libxml2-devel
注:安装PHP依赖包,不然编译会报错
[root@localhost src]# wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
[root@localhost src]# tar jxf php-5.3.28.tar.bz2
[root@localhost src]# cd php-5.3.28
[root@localhost php-5.3.28]# ./configure --prefix=/usr/local/php5
--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd
--with-apxs2=/usr/local/apache2/bin/apxs
[root@localhost php-5.3.28]# make -j8 && make install -j8
注:编译安装PHP
[root@localhost php-5.3.28]# cp php.ini-production /usr/local/php5/lib/php.ini
注:把安装包中的php.ini-production复制到/usr/local/php5/lib/并重命名为php.ini
2.1.3 集成Apache与PHP
[root@localhost php-5.3.28]# sed -i 's/DirectoryIndex/DirectoryIndex index.php/g' /usr/local/apache2/conf/httpd.conf
[root@localhost php-5.3.28]# sed -i '/LoadModule php5_module/aAddType application/x-httpd-php .phpAddType application/x-httpd-php-source .phps' /usr/local/apache2/conf/httpd.conf
注:默认情况下安装PHP后会默认生产LoadModule php5_module modules/libphp5.so这句话,所以需要在此局下面添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
[root@localhost php-5.3.28]# cd /usr/local/apache2/htdocs/
[root@localhost htdocs]# echo -e "<?phpphpinfo ();?>" > index.php
[root@localhost htdocs]# cat index.php
phpinfo();
?>
[root@localhost htdocs]# ../bin/apachectl restart
注:在发布目录新加index.php 并加入以上代码,刷新浏览器,出现如下图界面,说明apache与php集成成功
![14059ff3f0ad5125f3fcd3c010487e26.png](https://img-blog.csdnimg.cn/img_convert/14059ff3f0ad5125f3fcd3c010487e26.png)
2.2 MySQL主从搭建
2.2.1 Mysql主从原理
![f516fc3c357bf719ca5b308e180c01d8.png](https://img-blog.csdnimg.cn/img_convert/f516fc3c357bf719ca5b308e180c01d8.png)
MySQL 主从复制原理剖析
Mysql主从同步其实是一个异步复制的过程,要实现复制首先需要在master上开启bin-log日志功能,整个过程需要开启3个线程,分别是Master开启IO线程,slave开启IO线程和SQL线程。
- 在从服务器执行slave start,从服务器上IO线程会通过授权的用户连接上master,并请求master从指定的文件和位置之后发送bin-log日志内容。
- Master服务器接收到来自slave服务器的IO线程的请求后,master服务器上的IO线程根据slave服务器发送的指定bin-log日志之后的内容,然后返回给slave端的IO线程。(返回的信息中除了bin-log日志内容外,还有本次返回日志内容后在master服务器端的新的binlog文件名以及在binlog中的下一个指定更新位置。)
- Slave的IO线程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master.info文件中,以便在下一次读取的时候能够清楚的告诉Master”我需要从某个bin-log的哪 个位置开始往后的日志内容,请发给我”;
- Slave的Sql线程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
2.2.2安装mysql
- 安装mysql环境,master和slave都执行
[root@localhost ~]# yum install mysql-server mysql-devel mysql-libs –y
启动mysql数据库,此时数据会自动初始化
[root@localhost ~]# service mysqld restart
master修改my.cnf文件
[root@localhost ~]# vim /etc/my.cnf
在文件[mysqld]中添加如下内容:
log-bin=mysql-bin 开启binlog功能
server-id = 137 指定服务器的id,通常id指定为ip地址的最后一位
若需要指定数据目录请修改datadir=/var/lib/mysql,创建目录后需要给mysql授权,最好是把用户和组指定给mysql,本实验不指定。
![cee31cdd6072070ae20db66f50fc9e54.png](https://img-blog.csdnimg.cn/img_convert/cee31cdd6072070ae20db66f50fc9e54.png)
slave修改my.cnf文件
![1a55ddbf43943b1b24febcdf3102bdc7.png](https://img-blog.csdnimg.cn/img_convert/1a55ddbf43943b1b24febcdf3102bdc7.png)
在master上面给slave授权
mysql> grant all on *.* to slave@"%" identified by "123456";
其中all代表所有权限
%代表除本机外所有ip的主机均可连接,若本机连接需要把%改为localhost
此处的用户名slave亦可在安装discuz时使用,当然也可以针对数据库单独创建
mysql> flush privileges;
刷新权限
重启master及slave
![283a8c7635690b51e429767a8b5eabeb.png](https://img-blog.csdnimg.cn/img_convert/283a8c7635690b51e429767a8b5eabeb.png)
查看mysql-bin及Position
在master上执行
mysql> show master status;
![e81e5f17868c530bea0eba1ff9b6cdd2.png](https://img-blog.csdnimg.cn/img_convert/e81e5f17868c530bea0eba1ff9b6cdd2.png)
记录file及position
在slave服务器指定master IP和同步的mysql-bin及pos点
mysql> change master to master_host='192.168.8.137',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;
注意以上必须按照实际填写
![d798454736cebf36f9bbb6394f3ca574.png](https://img-blog.csdnimg.cn/img_convert/d798454736cebf36f9bbb6394f3ca574.png)
启动slave
mysql> slave start;
![6a030a02a4204237d0d9bd7a8d3a035a.png](https://img-blog.csdnimg.cn/img_convert/6a030a02a4204237d0d9bd7a8d3a035a.png)
在slave上查看同步状态
mysql> show slave statusG
如果如下两行为yes,代表主从同步成功。
![ef3de4c13d189ebbf4fdfb6ca54d2fb8.png](https://img-blog.csdnimg.cn/img_convert/ef3de4c13d189ebbf4fdfb6ca54d2fb8.png)
mysql> create database discuz;
注:创建discuz数据库
及时关注更新!!!