Nginx架构篇(三);LNMP架构实现discuz和wordpress搭建:MySQL多实例、主主及主从复制、读写分离及nfs网站代码集中式管理(后续可以为数据库添加MHA,DRBD)

news/2024/5/10 20:50:34/文章来源:https://wujincheng.blog.csdn.net/article/details/103394005

文章目录

    • 一、环境搭建及主从复制基础知识
    • 二、NFS服务器的配置
    • 三、Nginx服务器的配置
    • 四、PHP服务器需要做的配置(两个PHP都是一样的配置)
    • 五、MySQL多实例:主主、主从复制,读写分离
        • 先给3307数据库和3308数据库做主主复制
        • 再给3307数据库和3309数据库做主从复制
        • 3307数据库和3309数据库做读写分离
        • 1、下载mysql-proxy
        • 2、解压mysql-proxy
        • 3、启动mysql-proxy
        • 4、登录管理服务4041端口
        • 5、登录4040端口的代理服务
        • 6、实现网站的读写分离
    • 六、安装discuz和wordpress的准备工作
    • 七、安装wordpress、discuz
        • discuz安装:
        • wordpress安装:

本文架构图:
在这里插入图片描述

注意:此图的NFS还应该与Nginx相连!即在Nginx的html上也应该挂载NFS的共享目录

一、环境搭建及主从复制基础知识

1、Nginx安装教程:https://blog.csdn.net/weixin_44571270/article/details/102887048
2、PHP安装教程:https://blog.csdn.net/weixin_44571270/article/details/103223557
注意:php7相较php5版本发生了很大的变化,不再支持mysqli_connect函数,所以在此处建议安装使用php5版本。否则discuz和wordpress会安装不上。

3、yum安装MySQL多实例安装教程:https://blog.csdn.net/weixin_44571270/article/details/103368000
4、主从复制配置及知识:https://blog.csdn.net/weixin_44571270/article/details/103148755


确认自己所有的Nginx、PHP、MySQL已经完成基本的安装!
下面就是各种功能的实现:


二、NFS服务器的配置

1、新建共享文件的目录

mkdir /webapps

2、安装NFS服务

yum install nfs nfs-utils -y

注意:安装了上面这个也会自动安装RPC。

3、从外部上传wordpress、discuz
在mac终端上输入下面命令:

 scp /Users/shijiandingyiqingchun/Desktop/Discuz_X3.2_SC_UTF8.zip 172.16.193.206:/data/scp /Users/shijiandingyiqingchun/Desktop/wordpress-5.0.2-zh_CN.tar.gz 172.16.193.206:/data/

注意:
(1)不能在虚拟机上scp到物理机上拿文件,物理机很有可能关闭了ssh端口的,导致scp失败。所以我们需要到物理机的终端上scp,上传文件到虚拟机中,这样就好了。
(2)这样scp复制,需要在虚拟机中创建一个用户名为shijiandingyiqingchun,还需要passwd shijiandingyiqingchun,修改它的密码,scp会让你输入密码,就是这个passwd这个你修改的密码。

4、解压缩两个文件,并移到共享文件目录下
(1)解压

unzip Discuz_X3.2_SC_UTF8.zip
tar xvf wordpress-5.0.2-zh_CN.tar.gz 

(2)移到共享目录下
解压后的wordpress可以直接移:

mv wordpress /webapps/

解压后的discuz不能全部移到共享文件目录下:

mv upload/* /webapps/ 

4、编辑exports文件
添加以下内容:

/webapps/ 172.16.193.* [rw,all_squash]

5、开启NFS服务

systemctl start nfs

注:
(1)如果修改了exports文件,就可以使用exportfs -r不需要重新启动nfs。
(2)开启了NFS服务,会自动先开启RPC服务,然后再开启NFS。

三、Nginx服务器的配置

1、编辑主配置文件nginx.conf:

worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;upstream server_pool{server 172.16.193.201:9000;server 172.16.193.202:9000;}**discuz**server {listen       8080; //用基于端口的虚拟主机server_name  localhost;location / {root   /mnt/www.discuz.com/;index  index.html index.php;}location ~*\.php$ {root /mnt/www.discuz.com;fastcgi_pass server_pool;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}**wordpress**server {listen       80; //基于端口的虚拟主机server_name  localhost;location / {root   /mnt/wordpress;index  index.html index.php;}location ~*\.php$ {root /mnt/wordpress;fastcgi_pass server_pool;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

2、安装NFS服务,挂载共享文件目录

yum install nfs nfs-utils -y
mount 172.16.193.206:/webapps/ /mnt/

四、PHP服务器需要做的配置(两个PHP都是一样的配置)

1、安装NFS服务

yum install nfs nfs-utils -y

2、挂载共享文件目录

mount 172.16.193.206:/webapps/ /mnt/

3、查看是否挂载上

df -hT

4、修改监听地址为本地ip
在这里插入图片描述注意:不能写127.0.0.1
5、安装php-mysql

yum install php-mysql -y

这个特别重要,没有这个就不能实现对数据库的连接。
在这里插入图片描述注:记录这个目录:/usr/lib64/php/modules
这个目录就是安装php-mysql产生的。

6、现在就已经可以看到效果了
discuz论坛安装界面:
在这里插入图片描述
wordpress:
在这里插入图片描述

五、MySQL多实例:主主、主从复制,读写分离

有了主从复制,为什么还要采用主主复制?
答:MYSQL主从复制的弊端是一旦主库宕机,网站代码将数据库配置修改为从库,从库再更新数据,主从关系会破坏哦,企业生产环境一般采用主主模式+DRBD来保证数据的完整性。主主复制还可以分担写的压力。主主复制也可以做读写分离,只不过主库一般写压力都很大了,所以不建议再把读压力分担给主库。

1、打开三个终端,分别登录三个端口的数据库
在这里插入图片描述2、编辑3307、3308和3309的my.cnf文件

vim /etc/my.cnf.d/my3307.cnf

修改后为:

[client]
port = 3307
socket = /data/mysql/3307/mysql3307.sock
[mysqld]
server-id=1 //这个必须不一样
log-bin=mysql-bin
datadir=/data/mysql/3307/
port = 3307
socket = /data/mysql/3307/mysql3307.sock

my3308.cnf和my3309.cnf文件的配置照着上面这个文件修改即可。


先给3307数据库和3308数据库做主主复制


3、创建连接信息
(1)相互查看log_pos及其log-bin文件名
3307:
在这里插入图片描述
3308:
在这里插入图片描述
(2)创建连接信息
3307:

change master to master_host='172.16.193.203',master_user='tongbu',master_port=3308,master_password='mysql',master_log_file='mysql-bin.000001',master_log_pos=474;

3308:

change master to master_host='172.16.193.203',master_user='tongbu',master_port=3307,master_password='mysql',master_log_file='mysql-bin.000001',master_log_pos=549;

4、相互授权访问
3307:

MariaDB [(none)]> grant replication slave on *.* to 'tongbu'@'172.16.193.%' identified by 'mysql';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> start slave;

3308:

MariaDB [(none)]> grant replication slave on *.* to 'tongbu'@'172.16.193.%' identified by 'mysql';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> start slave;

5、查看是否成功
在这里插入图片描述
在这里插入图片描述


再给3307数据库和3309数据库做主从复制


注:配置略!不相互声明为主的主主就是主从,单方声明!

为什么有了主主复制还要主从复制呢?
主从复制过后,再次确保数据的完整性,为数据做备份,还可以做读写分离,两个主库写,一个从库做读操作,真是再好不过了!


3307数据库和3309数据库做读写分离


注:电脑足够强大的情况下,建议安装mysql-proxy的这台机器单独放在一个服务器上。

mysql-proxy在本实验中架构图中的位置需要明确
NFS上的网站代码中连接数据库的文件,不要再写数据库的地址,需要写mysql-proxy的服务器的4040端口,网站运行时,php找mysql-proxy所在的服务器的4040端口,然后mysql-proxy再把写请求分配给主库,读请求分配给从库。

//wordpress的连接数据库文件:
[root@NFS_SERVER ~]# vim /webapps/wordpress/wp-config.php
//discuz的连接数据库文件
[root@NFS_SERVER ~]# vim /webapps/www.discuz.com/config/config_global.php 

实现MYSQL读写分离可以基于第三方插件,也可以通过开发修改代码实现。
比较:
第三方插件实现,效率不如修改代码的好,但是修改代码实现读写分离需要比较高的开发功底!一般中小企业都适用第三方插件,大型企业才会修改代码去实现读写分离!

下面我们就使用mysql-proxy这个中间件,实现读写分离:

1、下载mysql-proxy

wget -O /usr/local/mysql-proxy.tar.gz http://ftp.ntu.edu.tw/pub/MySQL/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-el6-x86-64bit.tar.gz

2、解压mysql-proxy

cd /usr/local/
tar xvf mysql-proxy.tar.gz
mv mysql-proxy-0.8.4-linux-el6-x86-64bit/ mysql-proxy/

3、启动mysql-proxy

/usr/local/mysql-proxy/bin/mysql-proxy --daemon --log-level=debug --user=mysql-proxy --keepalive --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend-addresses="172.16.193.203:3307" --proxy-read-only-backend-addresses="172.16.193.203:3309" --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua" --plugins=admin --admin-username="admin" --admin-password="admin" --admin-lua-script="/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua"

上述命令中的admin用户及其密码,登录4041端口的管理服务时需要使用。

参数说明:

--help-all   				          :获取全部帮助信息;
--proxy-address=host:port 	          :代理服务监听的地址和端口,默认为4040--admin-address=host:port  	          :管理模块监听的地址和端口,默认为4041--proxy-backend-addresses=host:port   :后端mysql服务器的地址和端口,即为主库地址和端口;
--proxy-read-only-backend-addresses=host:port :后端只读mysql服务器的地址和端口,即为从库地址和端口;
--proxy-lua-script=file_name           :完成mysql代理功能的Lua脚本;
--daemon  						      :以守护进程模式启动mysql-proxy;
--keepalive 					 	  :在mysql-proxy崩溃时尝试重启之;
--log-file=/path/to/log_file_name 	     :日志文件名称;
--log-level=level 					  :日志级别;
--log-use-syslog 					  :基于syslog记录日志;
--plugins=plugin					  :在mysql-proxy启动时加载的插件;
--user=user_name  				      :运行mysql-proxy进程的用户;
--defaults-file=/path/to/conf_file_name :默认使用的配置文件路径,其配置段使用[mysql-proxy]标识;
--proxy-skip-profiling 				  :禁用profile;
--pid-file=/path/to/pid_file_name 	  :进程文件名;

查看是否启动:
在这里插入图片描述

4、登录管理服务4041端口

关闭防火墙后执行以下操作:

 mysql  -h172.16.193.203  -uadmin  -padmin  -P 4041//管理服务,登录使用的用户名和密码是启动命令时指定的//-h后的ip是mysql-proxy所在的ip地址,此条命令一般在mysql服务器上执行,看mysql-proxy服务器,因为mysql-proxy没有mysql这个命令。

在这里插入图片描述注:在这里可以看到3307的主库状态时up的,从库还是未知的。我们接下来需要通过操作4040端口,让它变成up。

5、登录4040端口的代理服务

注:代理服务主要是接受网站请求的,所以网站代码中需要改成4040(修改内容请看下面第五步)。
(1)执行查询命令;
执行show databases;直到在4041上的从库状态从unknown变成up为止,这个变可能需要点时间,耐心等,几分钟吧。
注:变成up就说明读写分离成功了,如下。
在这里插入图片描述怎么确认,这个读不是从主库读,而是从从库读到的呢?请看下步!

(2)登录从库,在从库创建test数据库,且创建www表,并插入信息。

[root@MySQL-SERVER ~]# mysql -uroot  -p123456 -S /data/mysql/3309/mysql3309.sock
//这里也可以是其他用户,但是这个用户一定不能是本地用户,必须是MySQL允许可以远程登录的用户

在这里插入图片描述注:在从库中创建的这个信息,是不会同步到主库的是吧!我们如果在4040端口上能够查询到这个信息,是不是就能说明是在从库上读的了!
(3)在4040上看是否能成功读到主库特有信息。
在这里插入图片描述大家现在就放心读写分离是真的成功了吧!

6、实现网站的读写分离

当主从库全部都是up状态时,读写分离起来,再改网站代码,实现网站读写分离。
以wordpress为例:
在这里插入图片描述 :其他信息不变,只是把MySQL主机变成MySQL-proxy所在的服务器的ip和4040端口。

六、安装discuz和wordpress的准备工作

在3307、3308、3309数据库下配置如下(赋予权限):

Warning:

下面所有的'discuz'@'172.16.193.*',其中的'*'全部改成'%',就是这个星号害我找了三天的错误,全都是在php上找错误去了!!

在这里插入图片描述注:3307和3308、3309配置一样。因为如果做了高可用,有库不能工作,它们之间可以相互代替完成工作。所以权限都要给。

创建discuz和wordpress所需要的库:

MariaDB [(none)]> create database discuz charset=utf8;
//创建库discuz,且字符集为utf8

在这里插入图片描述

MariaDB [(none)]> create database wordpress;
//因为安装wordpress没有要字符集,所以这里我们就不要设置了!

七、安装wordpress、discuz

discuz安装:

1、
在这里插入图片描述2、
在这里插入图片描述3、
在这里插入图片描述4、
在这里插入图片描述5、
在这里插入图片描述

wordpress安装:

1、
在这里插入图片描述
2、
在这里插入图片描述3、
在这里插入图片描述4、
在这里插入图片描述5、
在这里插入图片描述5、
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_747926.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LNMP+zabbix监控平台部署(采用阿里云服务器一体化部署监控wordpress网站)

部署前须知: 一般情况下,我们是将其中Zabbix-Server、Zabbix-Proxy、Zabbix-Web、Zabbix-Database专门部署在一台独立服务器上,Zabbix-Agent一般部署在需要被监控的网站的服务器上。 由于资金限制,本人只有一台阿里云服务器,所以…

jQuery网站/博客-全球最佳

这是Internet上最好的jQuery网站和博客的集合(或者至少是到目前为止我发现的博客)。如果您想出现在此列表中,请发表评论并证明自己的理由。 相关文章: 进入互联网的十大jQuery Gurus blog.jquery.com 写更少,做更多&am…

2019升级版最新Python学习路线:关于电影购票网站实现的讲解

这次的Python学习路线跟大家讲一下关于电影购票网站的实现。这几天咱们国产的哪吒很火嘛! 1. 用户功能 同前面所有项目的用户功能,利用AjaxDjango系统认证QQ邮箱实现登陆注册 2. 用户未登陆会跳转到注册登录界面,登录后会返回至主页&#…

jquerymobile_使用jQueryMobile从桌面到移动网站的转换

jquerymobilejQuery Mobile是用于制作移动Web应用程序的强大框架。 但是,我们可以使用它将现有的桌面网站转换为移动形式吗? 可以使用MobilizeToday.com在线服务。 它们提供了基于小部件的模型,该模型将任何现有HTML内容表示到移动视图中。 …

使用jQueryMobile从桌面到移动网站的转换

jQuery Mobile是用于制作移动Web应用程序的强大框架。 但是,我们可以使用它将现有的桌面网站转换为移动形式吗? 可以使用MobilizeToday.com在线服务。 它们提供了基于小部件的模型,该模型将任何现有HTML内容表示到移动视图中。 背后的技术是X…

eyoucms 网站原创文章要怎样进行优化?

互联网一直都是在变化中的,而且百度、搜狗等搜索引擎的抓取方式也在不断的进行改变,这些都导致了网站优化手法的改变,如果说唯一没有变化的话就是对于原创文章的编写以及发布。但是要写出一个高质量原创的文章可不是一件简单的事情&#xff0…

用Python清理收藏夹里已失效的网站,快测试一下你的收藏夹吧

最近打开好多以前收藏的网站,发现好多都已经失效了,好多以前想看还没来得及看的内容,也找不见了。。。 失效的书签们 我们日常浏览网站的时候,时不时会遇到些新奇的东西,于是我们就默默的点了个收藏或者加书签。然而…

SEO删除网站的旧内容,对目前已有的排名有影响吗?

搜索引擎是一个动态变化的过程,而相对于网站而言,对于过往的内容,它都是一沉不变的,这就是为什么网站需要持续的推陈出新,才能使得整站排名保持长期的稳定。 但这里有一个问题,垂直行业的内容资源库是有限…

大型网站系统架构分析

千万级的注册用户,千万级的帖子,nTB级的附件,还有巨大的日访问量,大型网站采用什么系统架构保证性能和稳定性? 首先讨论一下大型网站需要注意和考虑的问题。 数据库海量数据处理:负载量不大的情况下select、…

用Python爬取各大网站招聘平台,终于让我给知道对口的工作

个人经历:低不成,高不就 依稀还记得15年刚出来工作那会,在第一个互联网公司实习,在公司听惯了身边人说公司这不好,那不好,作为新人的我深受影响,不知从何时开始就想快点结束实习期换一份更好的…

用Python爬取各大网站招聘平台,终于让我给知道对口的工作

个人经历:低不成,高不就 依稀还记得15年刚出来工作那会,在第一个互联网公司实习,在公司听惯了身边人说公司这不好,那不好,作为新人的我深受影响,不知从何时开始就想快点结束实习期换一份更好的…

用Python清理收藏夹里已失效的网站

失效的书签们 我们日常浏览网站的时候,时不时会遇到些新奇的东西( 你懂的.jpg ),于是我们就默默的点了个收藏或者加书签。然而当我们面对成百上千的书签和收藏夹的时候,总会头疼不已…… 尤其是昨天还在更新的程序设计…

织梦怎么样备份网站

很多用织梦的朋友不知道怎么备份网站,还有些朋友备份网站的方式不对。当遇到网站被黑、服务器到期等关键时刻,导致数据丢失,网站不能用。新搭建网站就得一切从头再来,找技术恢复,又是一笔不小的开支。这是一种无形的损…

网市场云建站 v4.9 更新,增加网站子账户

开发四年只会写业务代码,分布式高并发都不会还做程序员? 网市场云建站系统,结合云技术,一台2核4G服务器可以建立超过4万个网站!打破传统建站的高成本,让价格不再是阻碍的门槛,让每个人都能有自…

Python_爬虫_爬取好大夫网站_数据清洗部分

1.前言 通过对好大夫网站内容的爬取,我们已经收集到好大夫的相关数据,并将其存入excel表中。之所以先存入excel表中,是因为有很多是非结构化数据,需要进行数据清理后在进行保存,excel中有很多的功能能够帮助进行数据清…

使用Apache服务部署静态网站。

1、安装Apache服务程序,命令后面的Apache服务的软件包名称为httpd。2、httpd服务程序并将其加入到开机启动项中3、在浏览器(这里以Firefox浏览器为例)的地址栏中输入http://127.0.0.1并按回车键,就可以看到用于提供Web服务的httpd…

php特级课---1、网站大访问量如何解决

php特级课---1、网站大访问量如何解决 一、总结 一句话总结: 负载均衡和冗余技术 1、负载均衡和冗余技术是一回事么? 并不是:负载均衡是用户分流;冗余技术是避免出现单点故障 负载均衡:将不同的用户分流到不同的服务器…

python实战教程:7万网站用户行为大数据的分析

今天的教程有点长,耐心点看完,你会有收获的。基础薄弱的伙伴,不清楚的可以留言,要视频学习教程的,可以留言! 7万网站用户行为大数据分析 数据分析师,是通过数据对业务团队决策、公司管理层的决…

手把手教你做毕业设计:基于JSP+MySQL的简单校园新闻网站(1)

系列教程来了!毕业设计头大的伙伴,看过来了!基础薄弱的伙伴,需要视频教程的,可以留言,我整理后发大家! 整体流程 做一个项目,首先是需求分析,将要做的东西说明白。 然后…

手把手教你做毕设计系列:基于JSP+MySQL的简单校园新闻网站(3)

系列教程(2)下一期出,保存的文件一下子打不开了,下期更新哈! 新建数据库 使用Navicat新建数据库shcoolnews。 为了保存管理员用户名、密码,新建user表,结构如下图。 简单解释下,i…