Docker集群环境下安装Fastdfs集群+Nginx负载均衡
一、环境配置
现有两台服务器10.168.103.110(旧服务器)和10.168.103.111(新服务器),其中110服务器上有swarm集群,一个tracker和一个storage,现在要做Fastdfs集群,满足110上Fastdfs宕机的情况,111服务器上的Fastdfs能够正常使用。
- 首先查看110服务器的网络情况:
docker network ls
网络名称为prod-net
docker node ls
二、搭建docker网络集群(swarm)
这里我们需要在新服务器111上创建swarm的管理节点,将两台服务器的docker节点组织起来,以同一集群的方式进行管理:
参考博客:https://segmentfault.com/a/1190000020378231
- 在管理节点前首先要初始化110服务器上的管理节点(这里已经初始化过)
- 将111服务器加入到110的管理节点,这里111需要加的是管理节点而不是工作节点(docker swarm的工作节点不能正常使用docker-compose启动)
在110服务器上输入docker swarm join-token manager,即可获得管理节点的join-token
docker swarm join-token manager
然后在111服务器上执行前面取得的管理节点join token:
docker swarm join --token SWMTKN-1-36skn1672aqlxnx7bsqh5hhudvbdjxak48c1qsy3loy9ny7hh0-8zpzistuo0ycolr50ihlhodbd 10.168.103.110:2377
This node joined a swarm as a manager.
在111服务器上输入docker node ls 可以查看到和110服务器上一样的新加入的节点
到这里就完成了两个Docker节点组织起来了,用户就能以集群的方式进行管理。在docker-compose启动服务的时候就可以使用同一个网络了。(之前搭建Fastdfs一直没有成功,就是因为docker网络的问题)
三、搭建Fastdfs集群
因为110上已经有了Fastdfs了,所以直接在111上搭建,拿到110上的Fastdfs镜像编写docker-compose文件(这里我指定了容器的ip为10.0.1.59,因为每次起容器的时候ip都会改变,所以这里固定下,后面会用到),看到网络和110上的都是prod-net,要统一。
因为是后续搭建的集群,所以我们要先同步110上的历史数据,这里的同步也非常简单,刚开始编写docker-compose文件的时候,FASTDFS_IPADDR指定用旧服务器的ip,或者旧服务器Fastdfs的容器名称,当我把111上Fastdfs启动的时候他就会自动去同步(Binlong同步)110服务器的数据。
version: "3"services:fdfs-service:image: fastdfs:v2container_name: fdfs-prodrestart: alwaysports:- 8888:8888- 22122:22122- 23000:23000- 8011:80volumes:- /home/xbb/fdfs/storage:/home/dfsenvironment:- FASTDFS_IPADDR=10.168.103.110networks:prod-net:ipv4_address: 10.0.1.59networks:prod-net:external: true
切换到docker-compose文件目录下执行启动容器(这里是tracker和storage都启动):
docker-compose -f docker-compose.yml up -d
我这里映射到宿主机的目录是/home/xbb/fdfs/storage,启动后在它下面会生成data目录和logs文件夹,这里就不多说Fastdfs的介绍,请参考:https://blog.csdn.net/zrs19800702/article/details/53911526
进入到容器内部查看同步状态:
docker exec -it fdfs-prod bash
查看状态:
fdfs_monitor /etc/fdfs/client.conf
# FDFS_STORAGE_STATUS:INIT :初始化,尚未得到同步已有数据的源服务器# FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到同步已有数据的源服务器# FDFS_STORAGE_STATUS:SYNCING :同步中# FDFS_STORAGE_STATUS:DELETED :已删除,该服务器从本组中摘除# FDFS_STORAGE_STATUS:OFFLINE :离线# FDFS_STORAGE_STATUS:ONLINE :在线,尚不能提供服务# FDFS_STORAGE_STATUS:ACTIVE :在线,可以提供服务
这里表示我们的数据已经同步好并可以提供服务,这个时候去访问图片发现两个服务器都是可以访问的。
现在把历史数据同步完成了,接下来需要去完成增量同步:
上面说到我们把ip固定了,这里我们也需要去把旧服务器110上的容器ip给固定,这里我们把110 的修改为10.0.1.56
version: "3"services:fdfs-service:image: fastdfs:v2container_name: fdfs-testrestart: alwaysports:- 8888:8888- 22122:22122- 23000:23000- 8011:80volumes:- /home/xbb/fastdfs/storage:/home/dfsenvironment:- FASTDFS_IPADDR=10.168.103.110networks:prod-net:ipv4_address: 10.0.1.56 networks:prod-net:external: true
因为是用docker 部署的Fastdfs,所以他的ip也是容器的ip,tracker和storage的配置里面不能用宿主机的ip,否则会找不到对应ip而报错。改完固定ip后再把旧服务器的容器down调重新用docker-compose启动,之后在启动ip就会一直是固定的。
两个都启动过后开始修改容器内tracker和storage的配置,需要修改的就三个文件:
vi /etc/fdfs/client.conf
vi /etc/fdfs/storage.conf
vi /etc/fdfs/mod_fastdfs.conf
将两个容器内的这三个配置文件的tracker_server都改成:容器名称:22122
tracker_server=10.0.1.59:22122
tracker_server=10.0.1.56:22122
三个文件都改结束过后,退出容器重新启动。
docker stop fdfs-prod
docker start fdfs-prod
重启之后集群搭建成功。
测试:
在旧服务器上(110)上传一个文件看新服务器(111)上是否同步成功:
docker exec -it fdfs-test bash
cd /var
echo qawsedrftg > a.txt
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.txt
执行后会返回一个路径,去浏览器访问,110和111都可以访问,此时集群搭建成功。
四、nginx负载均衡(https://www.cnblogs.com/1214804270hacker/p/9325150.html)
version: '3'
services:nginx:image: nginx:1.20.1container_name: nginx-testrestart: alwaysnetworks:- prod-netports:- 81:80volumes:- /home/xbb/nginx/conf/nginx.conf:/etc/nginx/nginx.conf- /home/xbb/nginx/log:/var/log/nginxnetworks:prod-net:external:name: prod-net
在宿主机/home/xbb/nginx/conf目录下创建nginx.conf文件:
worker_processes auto;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;upstream fdfsServer{server 10.168.103.111:8888;server 10.168.103.110:8888;}client_max_body_size 20m;server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location ~/group([0-9])/M[0-9] {proxy_pass http://fdfsServer;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;# location = /50x.html {# root html;# }# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}
}
修改两个部分,然后启动docker-compose文件,此时完成了nginx的负载均衡,如果110的Fastdfs宕机了,访问的时候会自动寻找111的。适应Nginx访问上面测试文件也是可以的。
Docker集群环境下安装Fastdfs集群+Nginx负载均衡相关推荐
- Ubuntu环境下安装FastDFS+Nginx服务的流程
step 1 : 准备材料 链接:https://pan.baidu.com/s/1_vGoqA-FJIHcYI5NJZAxuw 密码:67cu step 2: 安装fastdfscommon 2-1 ...
- Linux下部署LVS(DR)+keepalived+Nginx负载均衡
架构部署 LVS/keepalived(master):192.168.21.3 LVS/keepalived(Slave):192.168.21.6 Nginx1:192.168.21.4 N ...
- emqx集群+nginx负载均衡
1.虚拟机 准备两台虚拟机,网上都有安装教程,我的是virtual box +centos7,附加一个centos7的中科大镜像地址: http://mirrors.ustc.edu.cn/cento ...
- Windows环境下安装HBase(Hadoop3.1.3、HBase2.2.5)与Linux环境下搭建HBase高可用集群
Windows环境下安装HBase 下载HBase 官网: https://hbase.apache.org/downloads.html 不同版本集合:https://archive.apache. ...
- Ambari在离线环境中安装Hadoop集群
2019独角兽企业重金招聘Python工程师标准>>> http://www.hackbase.com/article-973-1.html (WJW)Ambari在离线环境中安装H ...
- 分布式集群环境下,如何实现session共享三(环境搭建)
这是分布式集群环境下,如何实现session共享系列的第三篇.在上一篇:分布式集群环境下,如何实现session共享二(项目开发)中,准备好了一个通过原生态的servlet操作session的案例.本 ...
- Java技术分享:集群环境下的定时任务
定时任务的实现方式有多种,例如JDK自带的Timer+TimerTask方式,Spring 3.0以后的调度任务(Scheduled Task),Quartz框架等. Timer+TimerTask是 ...
- 0110-如何给Kerberos环境下的CDH集群添加Gateway节点
2019独角兽企业重金招聘Python工程师标准>>> Fayson的github: https://github.com/fayson/cdhproject 1.文档编写目的 Ga ...
- linux下安装oracle集群,【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)...
目录 数据库安装 继oracle集群安装之后,接下来也是最重要的数据库安装,整个数据库安装难度不大,用户以oracle用户身份登录RAC1主节点,对解压后的文件安装.主节点下安装后,其他所有结点自动安 ...
最新文章
- Java如何配置ibmmq集群_如何在IBM MQ集群中动态创建订阅?
- 洛谷 P2749 [USACO5.1]【夜空繁星Starry Night】
- 信息图:大数据2016年分析趋势
- 模型驱动开发 - 产品线架构的演进
- android之activety生命周期
- 思维导图哪款好用?怎么借助MindManager 做旅游计划
- 2008年入职华为,开始运维生涯
- Android个人日常消费理财_财务软件
- linux关键vi按什么键n,linux vi 使用方法
- Win环境下配置PyTorch深度学习环境
- scala面向对象基础---类继承和特质
- mac系统ssh可视化工具zoc的简单使用
- CF1774C. Ice and Fire
- 软件测试周刊(第59期):觉得自己生活的很好吗?为什么视而不见?
- Pycharm 的设置背景颜色和字体颜色
- colab常见问题解答
- 让你的python说话
- 【企业架构】现代企业架构方法——第 1 章
- 【求助】ipad远程桌面下vmware键盘布局错乱
- 偷盗钻石(Diamond)
热门文章
- Delphi 外挂源代码+外挂制作视频教程
- 明日之后android和ios,明日之后ios和安卓能一起玩吗
- word双栏/单栏排版问题
- Snipaste:简单、强大的截图、取色工具
- MySQL索引之最左匹配原则
- 2023第11届上海国际生物发酵产品与技术装备展览会
- 解决 .NET Framework 4 (KB2468871) 更新失败
- 课堂练习及课后作业2.3:系统调用
- 从零开始学VUE之Webpack(Html打包插件的使用)
- python列表批量删除元素_Python基础--list列表删除元素