一、环境配置

现有两台服务器10.168.103.110(旧服务器)和10.168.103.111(新服务器),其中110服务器上有swarm集群,一个tracker和一个storage,现在要做Fastdfs集群,满足110上Fastdfs宕机的情况,111服务器上的Fastdfs能够正常使用。

  1. 首先查看110服务器的网络情况:
docker network ls

网络名称为prod-net

docker node ls

二、搭建docker网络集群(swarm)

这里我们需要在新服务器111上创建swarm的管理节点,将两台服务器的docker节点组织起来,以同一集群的方式进行管理:
参考博客:https://segmentfault.com/a/1190000020378231

  1. 在管理节点前首先要初始化110服务器上的管理节点(这里已经初始化过)
  2. 将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)

我们还需要在110服务器上搭建一个nginx,让它去轮询访问2个Fastdfs。
下载一个nginx镜像。
编写docker-compose文件,nginx.conf文件映射到容器内部 还有日志文件,注意网段要使用同一网段。

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负载均衡相关推荐

  1. Ubuntu环境下安装FastDFS+Nginx服务的流程

    step 1 : 准备材料 链接:https://pan.baidu.com/s/1_vGoqA-FJIHcYI5NJZAxuw 密码:67cu step 2: 安装fastdfscommon 2-1 ...

  2. 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 ...

  3. emqx集群+nginx负载均衡

    1.虚拟机 准备两台虚拟机,网上都有安装教程,我的是virtual box +centos7,附加一个centos7的中科大镜像地址: http://mirrors.ustc.edu.cn/cento ...

  4. Windows环境下安装HBase(Hadoop3.1.3、HBase2.2.5)与Linux环境下搭建HBase高可用集群

    Windows环境下安装HBase 下载HBase 官网: https://hbase.apache.org/downloads.html 不同版本集合:https://archive.apache. ...

  5. Ambari在离线环境中安装Hadoop集群

    2019独角兽企业重金招聘Python工程师标准>>> http://www.hackbase.com/article-973-1.html (WJW)Ambari在离线环境中安装H ...

  6. 分布式集群环境下,如何实现session共享三(环境搭建)

    这是分布式集群环境下,如何实现session共享系列的第三篇.在上一篇:分布式集群环境下,如何实现session共享二(项目开发)中,准备好了一个通过原生态的servlet操作session的案例.本 ...

  7. Java技术分享:集群环境下的定时任务

    定时任务的实现方式有多种,例如JDK自带的Timer+TimerTask方式,Spring 3.0以后的调度任务(Scheduled Task),Quartz框架等. Timer+TimerTask是 ...

  8. 0110-如何给Kerberos环境下的CDH集群添加Gateway节点

    2019独角兽企业重金招聘Python工程师标准>>> Fayson的github: https://github.com/fayson/cdhproject 1.文档编写目的 Ga ...

  9. linux下安装oracle集群,【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)...

    目录 数据库安装 继oracle集群安装之后,接下来也是最重要的数据库安装,整个数据库安装难度不大,用户以oracle用户身份登录RAC1主节点,对解压后的文件安装.主节点下安装后,其他所有结点自动安 ...

最新文章

  1. Java如何配置ibmmq集群_如何在IBM MQ集群中动态创建订阅?
  2. 洛谷 P2749 [USACO5.1]【夜空繁星Starry Night】
  3. 信息图:大数据2016年分析趋势
  4. 模型驱动开发 - 产品线架构的演进
  5. android之activety生命周期
  6. 思维导图哪款好用?怎么借助MindManager 做旅游计划
  7. 2008年入职华为,开始运维生涯
  8. Android个人日常消费理财_财务软件
  9. linux关键vi按什么键n,linux vi 使用方法
  10. Win环境下配置PyTorch深度学习环境
  11. scala面向对象基础---类继承和特质
  12. mac系统ssh可视化工具zoc的简单使用
  13. CF1774C. Ice and Fire
  14. 软件测试周刊(第59期):觉得自己生活的很好吗?为什么视而不见?
  15. Pycharm 的设置背景颜色和字体颜色
  16. colab常见问题解答
  17. 让你的python说话
  18. 【企业架构】现代企业架构方法——第 1 章
  19. 【求助】ipad远程桌面下vmware键盘布局错乱
  20. 偷盗钻石(Diamond)

热门文章

  1. Delphi 外挂源代码+外挂制作视频教程
  2. 明日之后android和ios,明日之后ios和安卓能一起玩吗
  3. word双栏/单栏排版问题
  4. Snipaste:简单、强大的截图、取色工具
  5. MySQL索引之最左匹配原则
  6. 2023第11届上海国际生物发酵产品与技术装备展览会
  7. 解决 .NET Framework 4 (KB2468871) 更新失败
  8. 课堂练习及课后作业2.3:系统调用
  9. 从零开始学VUE之Webpack(Html打包插件的使用)
  10. python列表批量删除元素_Python基础--list列表删除元素