一、基本概念

负载均衡

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

主从配置

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

读写分离

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

二、实现原理

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读写分离


mayaohua
1 声望0 粉丝