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

109次阅读

共计 2270 个字符,预计需要花费 6 分钟才能阅读完成。

一、基本概念

负载平衡

大型网站都要面对宏大的用户量,高并发,海量数据等挑战。为了晋升零碎整体的性能,尽力将网络流量均匀散发到多个服务器上,以进步零碎整体的响应速度和可用性

主从配置

主从复制,是用来建设一个和主数据库齐全一样的数据库环境,称为从数据库。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。
简略来说,数据库主从配置是为了解决读写拆散,从而进步数据库性能的一种优化形式。

读写拆散

大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果咱们心愿可能线性的晋升数据库的读性能,打消读写锁抵触从而晋升数据库的写性能,那么就能够应用“分组架构”(读写拆散架构)

二、实现原理

如上图所示,用户拜访网站,首先由负载均衡器接管,而后依据负载平衡算法,将流量平衡的调配给代理的 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 -e MYSQL_ROOT_PASSWORD=123456 -itd mysql
docker run -p 8115:3306 --name mysql_salve -e MYSQL_ROOT_PASSWORD=123456 -itd mysql

创立实现之后通过 docker ps 命令查看创立的容器列表

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;}
}

批改实现之后重启容器

docker restart nginx_web1 nginx_web2 nginx_balance

重启实现之后,咱们通过浏览器拜访 192.168.0.111:8111 来查看后果

至此负载平衡配置实现,接下来进行数据库主从配置和读写拆散

正文完
 0