侧边栏壁纸
  • 累计撰写 10 篇文章
  • 累计收到 17 条评论

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

mayh
2022-12-22 / 4 评论 / 8 阅读 / 正在检测是否收录...

一、基本概念

负载均衡

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

主从配置

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

读写分离

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

二、实现原理

2022-12-22T08:59:42.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命令查看创建的容器列表
2022-12-22T09:00:05.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; 
    }
}

2022-12-22T09:00:30.png
修改完成之后重启容器

docker restart nginx_web1 nginx_web2 nginx_balance

2022-12-22T09:00:47.png
重启完成之后,我们通过浏览器访问 192.168.0.111:8111 来查看结果
2022-12-22T09:00:57.png
2022-12-22T09:01:09.png

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

0

评论 (4)

取消
  1. 头像
    qvsdubpjsf
    Windows 10 · Google Chrome

    2025年10月新盘 做第一批吃螃蟹的人coinsrore.com

    回复
  2. 头像
    vzgoskvgtp
    Windows 10 · Google Chrome

    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com

    回复
  3. 头像
    ktqvpxzdvd
    Windows 10 · Google Chrome

    2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

    回复
  4. 头像

    华纳圣淘沙公司开户新手教程

    零基础学会(183-8890-9465薇-STS5099)
    华纳圣淘沙公司开户

    华纳圣淘沙公司开户保姆级教程(183-8890-9465薇-STS5099)

    一步步教你开通华纳圣淘沙公司账户(183-8890-9465薇-STS5099)

    华纳圣淘沙公司开户分步图解

    首次开户必看:(183-8890-9465薇-STS5099)
    华纳圣淘沙全攻略

    华纳圣淘沙公司开户实操手册(183-8890-9465薇-STS5099)
    华纳圣淘沙开户流程视频教程

    手把手教学:(183-8890-9465薇-STS5099)
    华纳圣淘沙公司开户

    华纳圣淘沙公司开户完全指南(183-8890-9465薇-STS5099)

    回复