Nginx-集群架构-1-LANMP部署

实战内容:

使用三台Linux服务器,一台设备安装Nginx作为反向代理,两台设备部署LAP(发布两个网站wordpress、discuz)+ 两台Mysql(主从同步、可以公用)

在此集群架构部署中,配置不再过于详细描述,有细节问题可以翻阅之前的LAMP源码部署笔记;

1、拓扑:

目的:在两台Web服务器上都部署Wordpress和discuz;然后使用Nginx服务器进行反向代理;当用户访问bbs.zhanggeng.com的时候,让其在两个discuz之间进行 1:1轮询访问;当用户访问blog.zhanggeng.com的时候,让其在两个wordpress之间进行 1:1轮询访问;所以需要在web服务器上做虚拟主机;并且Nginx上也需要做虚拟主机;

2、部署LAMP、Mysql主从同步、授权wordpress,discuz;

部署在两台设备上:

Lamp1:192.168.169.202 Lamp2:192.168.169.203

1)、安装各种软件包:

[root@Lamp1 ~]# yum install -y httpd mariadb mariadb-server php php-mysql php-devel mysql-devel
[root@Lamp2 ~]# yum install -y httpd mariadb mariadb-server php php-mysql php-devel mysql-devel

yum安装的Apache,默认在conf.d目录下存在php.conf,所以默认LAMP就关联起来了;

2)、配置Mysql主从同步:Lamp1作为Master Lamp2作为Slave

A: Lamp1上做如下配置:

在/etc/my.cnf中添加如下内容:
log-bin=mysql-binlog-master
server-id=1

systemctl start mariadb


[root@Lamp1 ~]# mysql
MariaDB [(none)]> grant replication slave on *.* to 'slave'@'192.168.169.203' identified by '123456';
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> create database discuz;
MariaDB [mysql]> grant all on wordpress.* to 'wordpress'@'%' identified by 'wordpress';
MariaDB [mysql]> grant all on discuz.* to 'discuz'@'%' identified by 'discuz';

查看position和二进制文件名,并作记录:

mysql-binlog-master.000003 871

B: Lamp2上做如下配置:

在/etc/my.cnf中添加如下内容
server-id=3

systemctl start mariadb

MariaDB [(none)]> change master to
    -> master_host='192.168.169.202',
    -> master_user='slave',
    -> master_password='123456',
    -> master_log_file='mysql-binlog-master.000003',     #与Master上一致
    -> master_log_pos=871;                                               #与Master上一致

MariaDB [(none)]> start slave;

MariaDB [(none)]> show slave status\G     #查看同步状态

C:Lamp1上做如下配置:

[root@Lamp1 ~]# mysqldump -A --events > backup.sql
[root@Lamp1 ~]# scp backup.sql root@192.168.169.203:/etc/

D:Lamp2上做如下配置:

MariaDB [(none)]> stop slave;     #先停止同步

[root@Lamp2 ~]# mysql < /etc/backup.sql     #导入数据库

MariaDB [(none)]> start slave;       #开启同步

MariaDB [(none)]> select user from mysql.user;     #使用该命令查看之前在Master上创建的用户就有了;

需要C和D的过程是因为两个数据库在开启同步之前的数据是不会被同步的;如果先开启同步,然后再创建wordpress、discuz用户就不需要C和D的导入数据库的操作;


3、配置Lamp1上的Apache虚拟主机,然后同步给Lamp2;

1)、配置Lamp1内容如下

在配置文件中添加如下内容:

[root@Lamp1 ~]# vim /etc/httpd/conf/httpd.conf 
Include /usr/local/domain
修改#ServerName www.example.com:80   为 ServerName 127.0.0.1:80

创建domain:

[root@Lamp1 ~]# mkdir -p /usr/local/domain

创建虚拟主机文件

[root@Lamp1 ~]# cd /usr/local/domain/
[root@Lamp1 domain]# touch bbs.zhanggeng.com
[root@Lamp1 domain]# touch blog.zhanggeng.com

基于域名的虚拟主机内容如下:

bbs.zhanggeng.com内容:

<VirtualHost  *:80>
    ServerAdmin 1216653470@qq.com
    DocumentRoot "/var/www/html/discuz"
    ServerName bbs.zhanggeng.com
    ErrorLog "logs/bbs-error_log"
    CustomLog "logs/bbs-access_log" common
</VirtualHost>

blog.zhanggeng.com内容:

<VirtualHost  *:80>
    ServerAdmin 1216653470@qq.com
    DocumentRoot "/var/www/html/wordpress"
    ServerName blog.zhanggeng.com
    ErrorLog "logs/blog-error_log"
    CustomLog "logs/blog-access_log" common
</VirtualHost>

在/var/www/html/下创建wordpress以及discuz:

[root@Lamp1 domain]# mkdir -p /var/www/html/{discuz,wordpress}

检测Apache语法:

[root@Lamp1 ~]# httpd -t
Syntax OK

上传Discuz和Wordpress:

yum install -y unzip #安装解压工具

解压,并将upload目录中的东西都放到discuz目录下:

[root@Lamp1 ~]# unzip Discuz_X3.2_SC_GBK.zip -d /var/www/html/discuz/
[root@Lamp1 ~]# cd /var/www/html/discuz/
[root@Lamp1 discuz]# cp -a upload/* .

解压,并将解压出的内容都放到创建的wordpress目录下,将解压出的目录删除掉:

[root@Lamp1 ~]# unzip wordpress-4.8.zip -d /var/www/html/wordpress/
[root@Lamp1 ~]# cd /var/www/html/wordpress/
[root@Lamp1 wordpress]# cp -a wordpress/* .
[root@Lamp1 wordpress]# rm -rf wordpress/

修改属主属组:

[root@Lamp1 ~]# chown -R apache.apache /var/www/html/

由于是用基于域名做的虚拟主机,所以访问的时候不能使用IP地址,需要使用域名:

修改本地hosts,添加内容:

192.168.169.202 bbs.zhanggeng.com blog.zhanggeng.com

systemctl restart httpd

访问域名:由于还没有进行安装,所以访问时302重定向安装路径,属于正常:

在自己电脑本地修改host文件:

192.168.169.202 bbs.zhanggeng.com
192.168.169.202 blog.zhanggeng.com

由于是基于域名的虚拟主机,得用域名访问:

2)、将Lamp1 的Apache内容同步给 Lamp2

# -r 表示递归
[root@Lamp1 ~]# scp -r /var/www/html/  root@192.168.169.203:/var/www/html/

[root@Lamp1 ~]# scp -r /usr/local/domain/ root@192.168.169.203:/usr/local/domain/

[root@Lamp1 ~]# scp /etc/httpd/conf/httpd.conf root@192.168.169.203:/etc/httpd/conf/

在Lamp2上hosts添加解析,并修改属主属组:

[root@Lamp2 ~]# vim /etc/hosts
192.168.169.203 bbs.zhanggeng.com blog.zhanggeng.com
[root@Lamp2 ~]# chown -R apache.apache /var/www/html/

两个域名能够正常访问:


4、Nginx负载均衡+虚拟主机内容

LB:192.168.169.201 该主机上已经部署了Nginx,部署过程在前一篇文章中描述过了;可以参考Nginx入门与安装,将其搭建出来;

在Nginx配置文件中,如下标红部分Nginx虚拟主机配置:

配置文件路径:/usr/local/nginx/conf/nginx.conf

将标红部分删除,做include调用;

标红内容:

  server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

修改为:

[root@LB ~]# mkdir -p /usr/local/domain
[root@LB ~]# /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@LB ~]# 

[root@LB ~]# cd /usr/local/domain/
[root@LB domain]# touch bbs.zhanggeng.com
[root@LB domain]# touch blog.zhanggeng.com

Nginx基于域名的虚拟主机内容如下:

bbs.zhanggeng.com内容:


upstream web_discuz {                                 #类似于Service-group
          server 192.168.169.202:80;
          server 192.168.169.203:80;
}
server {
        listen       80;
        server_name  bbs.zhanggeng.com;      #定义访问的域名bbs
        location / {
            root   html;
            index  index.html index.htm;
            proxy_set_header Host $host;             
            proxy_pass http://web_discuz;        #启动代理,当有人访问bbs调用web_discuz内容

        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

注释:用户使用域名访问Nginx,然后Nginx通过判断域名将请求跳转到后端Web服务器的IP地址上,到Web服务器上之后,由于是IP地址访问的,所以Web服务器没办法辨别是访问wordpress还是discuz的,因此需要 proxy_set_header Host $host 参数,将域名也传递给后端Web服务器;在upstream参数里面,用户访问的时候,会在两个地址之间进行1:1轮询;

blog.zhanggeng.com内容:

upstream web_wordpress {   
          server 192.168.169.202:80;
          server 192.168.169.203:80;
}
server {
        listen       80;
        server_name  blog.zhanggeng.com;     
        location / {
            root   html;
            index  index.html index.htm;
            proxy_set_header Host $host;          
            proxy_pass http://web_wordpress;     

        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
[root@LB domain]# /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@LB domain]# /usr/local/nginx/sbin/nginx -s reload

修改本地windows的host:

192.168.169.201 bbs.zhanggeng.com
192.168.169.201 blog.zhanggeng.com

本地访问测试:修改host之后访问Nginx成功跳转:如下

至此,该集群架构基本完成。


5、配置Apache Web服务器两边使用inotifywait同步(选做部分)

[root@Lamp1 ~]# yum install -y rsync
[root@Lamp2 ~]# yum install -y rsync

[root@Lamp1 ~]# ssh-keygen
[root@Lamp1 ~]# ssh-copy-id 192.168.169.203


[root@Lamp2 ~]# ssh-keygen
[root@Lamp2 ~]# ssh-copy-id 192.168.169.202

[root@Lamp1 ~]# yum install -y gcc gcc-c++
[root@Lamp2 ~]# yum install -y gcc gcc-c++

rz上传inotify,并解压、编译安装:

Lamp1 和 Lamp2 都需要操作:

[root@Lamp1 ~]# tar xf inotify-tools-3.13.tar.gz 
[root@Lamp1 ~]# cd inotify-tools-3.13
[root@Lamp1 inotify-tools-3.13]# ./configure 

[root@Lamp2 ~]# tar xf inotify-tools-3.13.tar.gz 
[root@Lamp2 ~]# cd inotify-tools-3.13
[root@Lamp2 inotify-tools-3.13]# ./configure 
[root@Lamp1 inotify-tools-3.13]# make && make install
[root@Lamp2 inotify-tools-3.13]# make && make install

在Lamp1 和 Lamp2 编写脚本:

[root@Lamp1 ~]# vim rsync.sh   

inotifywait -mrq -e create,move,modify,delete,attrib /var/www/html/ | while read a b c 
do

   rsync -azP /var/www/html/ root@192.168.169.203:/var/www/html/

done

[root@Lamp1 ~]# scp rsync.sh 192.168.169.203:/root/

[root@Lamp2 ~]# vim rsync.sh   

inotifywait -mrq -e create,move,modify,delete,attrib /var/www/html/ | while read a b c 
do

   rsync -azP /var/www/html/ root@192.168.169.202:/var/www/html/

done
[root@Lamp1 ~]# chmod +x rsync.sh 
[root@Lamp2 ~]# chmod +x rsync.sh 

[root@Lamp1 ~]# ./rsync.sh &       #后台运行该脚本
[root@Lamp2 ~]# ./rsync.sh &       #后台运行该脚本

做到这里需要保存快照方便后面的实验,快照名称:LAMP+Nginx集群架构-1

后面相关Nginx调优以及在该架构上增加内容,都基于快照LAMP+Nginx集群架构-1 来进行部署实验。

本博客中Nginx相关博文,都是从头到尾相关联的,需要读者从头至尾阅读;