一、基本概念
负载均衡
大型网站都要面对庞大的用户量,高并发,海量数据等挑战。为了提升系统整体的性能,尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性
主从配置
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。
简单来说,数据库主从配置是为了解决读写分离,从而提高数据库性能的一种优化方式。
读写分离
大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用“分组架构”(读写分离架构)
二、实现原理
如上图所示,用户访问网站,首先由负载均衡器接收,然后根据负载均衡算法,将流量均衡的分配给代理的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
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
来查看结果
至此负载均衡配置完成,接下来进行数据库主从配置和读写分离,点击查看下篇
docker下进行mysql主从配置实现thinkphp读写分离