docker环境下搭建PHP网站,实现nginx负载均衡和mysql主从配置

一、基本概念

负载均衡

大型网站都要面对庞大的用户量,高并发,海量数据等挑战。为了提升系统整体的性能,尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性

主从配置

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。
简单来说,数据库主从配置是为了解决读写分离,从而提高数据库性能的一种优化方式。

读写分离

大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用“分组架构”(读写分离架构)

二、实现原理

image.png

如上图所示,用户访问网站,首先由负载均衡器接收,然后根据负载均衡算法,将流量均衡的分配给代理的web服务器以平衡各个服务器的负载压力,此时用户访问数据库时,通过读写分离分配给不同的服务器,当有写入操作时,主服务器通过复制的方式将数据同步到从服务器,从而实现主从服务器的数据统一。

三、环境搭建

了解完基本概念和实现原理后我们开始进行实验环境搭建,我们需要有1个负载均衡服务器,2个web应用服务器,2个数据库服务器。实验环境为树莓派4B

1、docker安装和国内镜像配置

curl -sSL https://get.daocloud.io/docker | sh
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2、镜像拉取

拉取nginx镜像
docker pull nginx:latest
拉取mysql镜像
docker pull mysql:latest

3、启动容器

首先我们创建均衡服务器容器,映射容器80端口到宿主机8111端口上,把容器/etc/nginx/conf.d目录挂载到宿主机/data/nginx/conf.d目录

docker run --name nginx_balance -p 8111:80 -v /data/nginx/conf.d/:/etc/nginx/conf.d/ -itd nginx

再创建两个web服务器容器来承载业务,映射出8112和8113端口

docker run --name nginx_web1 -p 8112:80 -itd nginx
docker run --name nginx_web2 -p 8113:80 -itd nginx

最后再创建两个mysql服务器容器

docker run -p 8114:3306 --name mysql_master -v /data/mysql/mysql_master/conf.d/:/etc/mysql/conf.d/ -e MYSQL_ROOT_PASSWORD=123456 -itd mysql
docker run -p 8115:3306 --name mysql_salve -v /data/mysql/mysql_salve/conf.d/:/etc/mysql/conf.d/ -e MYSQL_ROOT_PASSWORD=123456 -itd mysql

创建完成之后通过docker ps命令查看创建的容器列表
image.png

4、web服务器和负载均衡服务器配置

修改nginx_web1 和 nginx_web2 服务器默认nginx输出页面来用来区分负载均衡服务器访问了哪个web服务器

修改web服务器默认页面

进入nginx_web1容器内部,修改默认页面内容

docker exec -it nginx_web1 bash
root@e94a6acc59fc:/# cd /usr/share/nginx/html/
root@e94a6acc59fc:/usr/share/nginx/html# rm index.html
root@e94a6acc59fc:/usr/share/nginx/html# echo hello nginx_web1 ninetySeven > index.html
root@e94a6acc59fc:/usr/share/nginx/html# exit

再进入nginx_web2容器内部修改默认页面内容

docker exec -it nginx_web2 bash
root@e94a6acc59fc:/# cd /usr/share/nginx/html/
root@e94a6acc59fc:/usr/share/nginx/html# rm index.html
root@e94a6acc59fc:/usr/share/nginx/html# echo hello nginx_web2 ninetySeven > index.html
root@e94a6acc59fc:/usr/share/nginx/html# exit

负载均衡服务器配置

修改负载均衡默认nginx配置,因为我们对容器进行了文件挂载,所以直接在宿主机上改动
sudo vim /data/nginx/conf.d/default.conf
修改内容如下

upstream ces {
    #server 服务ip地址:端口号 weight表示权值,权值越大,被分配的几率越大;
    server 192.168.0.111:8112 weight=1;
    server 192.168.0.111:8113 weight=1;
}
server {
    listen       80;
    listen  [::]:80;
    location / {
        proxy_pass         http://ces; 
    }
}

image.png
修改完成之后重启容器

docker restart nginx_web1 nginx_web2 nginx_balance

image.png
重启完成之后,我们通过浏览器访问 192.168.0.111:8111 来查看结果
image.png
image.png

至此负载均衡配置完成,接下来进行数据库主从配置和读写分离,点击查看下篇
docker下进行mysql主从配置实现thinkphp读写分离

1 声望
0 粉丝
0 条评论
推荐阅读
docker下进行mysql主从配置实现thinkphp读写分离
写在前面在上篇 docker环境下搭建PHP网站,实现nginx负载均衡和mysql主从配置中我们使用docker搭建了1台负载均衡器,2个web服务器和两个主、从数据库服务器 实现了nginx负载均衡访问网站web服务器接下来我们看一...

mayaohua阅读 1.1k

花了半个小时基于 ChatGPT 搭建了一个微信机器人
相信大家最近被 ChatGPT 刷屏了,其实在差不多一个月前就火过一次,不会那会好像只在程序员的圈子里面火起来了,并没有被大众认知到,不知道最近是因为什么又火起来了,而且这次搞的人尽皆知。

Java极客技术12阅读 3.7k评论 3

封面图
如何选择适合你的微服务 API 网关:对比 Kong、APISIX、Tyk、Apigee 和其他网关
API 网关并非一个新兴的概念,在十几年前就已经存在了,它的作用主要是作为流量的入口,统一的处理和业务相关的请求,让请求更加安全、快速和准确的得到处理。它有以下传统的功能:

API7_技术团队8阅读 8.7k评论 2

张晋涛:我的 2022 总结
大家好,我是张晋涛。2022 年已经结束,我每年都会惯例的做个小回顾,今年因为阳了在恢复身体,一直拖到了今天才写。生活在 2022 年初做回顾的时候,觉得 2021 是魔幻的一年,但现在看来 2022 年其实更加魔幻。一...

张晋涛6阅读 1.1k评论 2

封面图
利用Docker部署管理LDAP及其初次使用
前言:本周主要写了gitlabWebhook转github的项目,总体上没有遇到什么大问题,这周接触到了LDAP,于是就花时间实际操作了解了一下。

李明5阅读 1.3k

Docker学习:Image的本地存储结构
在使用Docker时候,针对镜像的操作一般就是docker pull,docker build,docker commit(刚开始接触Docker的时候,还不会Dockerfile,经常使用这个命令,但是经历了一次血的教训,已经放弃这个命令很久)这些操作...

backbp4阅读 10k评论 3

使用docker快速搭建xssPlatform测试平台实践
笔者之前给一些开发团队多次做Web安全开发培训,为了让培训的学员能够理解XSS原理和XSS的危害,将xssPlatform进行了更新,之前一直放在GitHub中;发现关注的人越来越多,很多人在安装的过程中遇到问题不知道怎么...

汤青松1阅读 26.2k

1 声望
0 粉丝
宣传栏