赞
踩
现有两台服务器10.168.103.110(旧服务器)和10.168.103.111(新服务器),其中110服务器上有swarm集群,一个tracker和一个storage,现在要做Fastdfs集群,满足110上Fastdfs宕机的情况,111服务器上的Fastdfs能够正常使用。
docker network ls
网络名称为prod-net
docker node ls
这里我们需要在新服务器111上创建swarm的管理节点,将两台服务器的docker节点组织起来,以同一集群的方式进行管理:
参考博客:https://segmentfault.com/a/1190000020378231
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网络的问题)
因为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:v2 container_name: fdfs-prod restart: always ports: - 8888:8888 - 22122:22122 - 23000:23000 - 8011:80 volumes: - /home/xbb/fdfs/storage:/home/dfs environment: - FASTDFS_IPADDR=10.168.103.110 networks: prod-net: ipv4_address: 10.0.1.59 networks: 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:v2 container_name: fdfs-test restart: always ports: - 8888:8888 - 22122:22122 - 23000:23000 - 8011:80 volumes: - /home/xbb/fastdfs/storage:/home/dfs environment: - FASTDFS_IPADDR=10.168.103.110 networks: 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都可以访问,此时集群搭建成功。
我们还需要在110服务器上搭建一个nginx,让它去轮询访问2个Fastdfs。
下载一个nginx镜像。
编写docker-compose文件,nginx.conf文件映射到容器内部 还有日志文件,注意网段要使用同一网段。
version: '3' services: nginx: image: nginx:1.20.1 container_name: nginx-test restart: always networks: - prod-net ports: - 81:80 volumes: - /home/xbb/nginx/conf/nginx.conf:/etc/nginx/nginx.conf - /home/xbb/nginx/log:/var/log/nginx networks: 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访问上面测试文件也是可以的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。