docker-compose.mount-rdma.yml 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. version: '3.8'
  2. services:
  3. # SeaweedFS Master
  4. seaweedfs-master:
  5. image: chrislusf/seaweedfs:latest
  6. container_name: seaweedfs-master
  7. ports:
  8. - "9333:9333"
  9. - "19333:19333"
  10. command: >
  11. master
  12. -port=9333
  13. -mdir=/data
  14. -volumeSizeLimitMB=1024
  15. -defaultReplication=000
  16. volumes:
  17. - seaweedfs_master_data:/data
  18. networks:
  19. - seaweedfs-rdma
  20. healthcheck:
  21. test: ["CMD", "wget", "--timeout=10", "--quiet", "--tries=1", "--spider", "http://127.0.0.1:9333/cluster/status"]
  22. interval: 10s
  23. timeout: 10s
  24. retries: 6
  25. start_period: 60s
  26. # SeaweedFS Volume Server
  27. seaweedfs-volume:
  28. image: chrislusf/seaweedfs:latest
  29. container_name: seaweedfs-volume
  30. ports:
  31. - "8080:8080"
  32. - "18080:18080"
  33. command: >
  34. volume
  35. -mserver=seaweedfs-master:9333
  36. -port=8080
  37. -dir=/data
  38. -max=100
  39. volumes:
  40. - seaweedfs_volume_data:/data
  41. networks:
  42. - seaweedfs-rdma
  43. depends_on:
  44. seaweedfs-master:
  45. condition: service_healthy
  46. healthcheck:
  47. test: ["CMD", "sh", "-c", "pgrep weed && netstat -tln | grep :8080"]
  48. interval: 10s
  49. timeout: 10s
  50. retries: 6
  51. start_period: 30s
  52. # SeaweedFS Filer
  53. seaweedfs-filer:
  54. image: chrislusf/seaweedfs:latest
  55. container_name: seaweedfs-filer
  56. ports:
  57. - "8888:8888"
  58. - "18888:18888"
  59. command: >
  60. filer
  61. -master=seaweedfs-master:9333
  62. -port=8888
  63. -defaultReplicaPlacement=000
  64. networks:
  65. - seaweedfs-rdma
  66. depends_on:
  67. seaweedfs-master:
  68. condition: service_healthy
  69. seaweedfs-volume:
  70. condition: service_healthy
  71. healthcheck:
  72. test: ["CMD", "sh", "-c", "pgrep weed && netstat -tln | grep :8888"]
  73. interval: 10s
  74. timeout: 10s
  75. retries: 6
  76. start_period: 45s
  77. # RDMA Engine (Rust)
  78. rdma-engine:
  79. build:
  80. context: .
  81. dockerfile: Dockerfile.rdma-engine
  82. container_name: rdma-engine
  83. volumes:
  84. - rdma_socket:/tmp/rdma
  85. networks:
  86. - seaweedfs-rdma
  87. environment:
  88. - RUST_LOG=debug
  89. - RDMA_SOCKET_PATH=/tmp/rdma/rdma-engine.sock
  90. - RDMA_DEVICE=auto
  91. - RDMA_PORT=18515
  92. - RDMA_GID_INDEX=0
  93. - DEBUG=true
  94. command: >
  95. ./rdma-engine-server
  96. --ipc-socket ${RDMA_SOCKET_PATH}
  97. --device ${RDMA_DEVICE}
  98. --port ${RDMA_PORT}
  99. --debug
  100. healthcheck:
  101. test: ["CMD", "sh", "-c", "pgrep rdma-engine-server >/dev/null && test -S /tmp/rdma/rdma-engine.sock"]
  102. interval: 5s
  103. timeout: 3s
  104. retries: 5
  105. start_period: 10s
  106. # RDMA Sidecar (Go)
  107. rdma-sidecar:
  108. build:
  109. context: .
  110. dockerfile: Dockerfile.sidecar
  111. container_name: rdma-sidecar
  112. ports:
  113. - "8081:8081"
  114. volumes:
  115. - rdma_socket:/tmp/rdma
  116. networks:
  117. - seaweedfs-rdma
  118. environment:
  119. - RDMA_SOCKET_PATH=/tmp/rdma/rdma-engine.sock
  120. - VOLUME_SERVER_URL=http://seaweedfs-volume:8080
  121. - SIDECAR_PORT=8081
  122. - ENABLE_RDMA=true
  123. - ENABLE_ZEROCOPY=true
  124. - ENABLE_POOLING=true
  125. - MAX_CONNECTIONS=10
  126. - MAX_IDLE_TIME=5m
  127. - DEBUG=true
  128. command: >
  129. ./demo-server
  130. --port ${SIDECAR_PORT}
  131. --rdma-socket ${RDMA_SOCKET_PATH}
  132. --volume-server ${VOLUME_SERVER_URL}
  133. --enable-rdma
  134. --enable-zerocopy
  135. --enable-pooling
  136. --max-connections ${MAX_CONNECTIONS}
  137. --max-idle-time ${MAX_IDLE_TIME}
  138. --debug
  139. depends_on:
  140. rdma-engine:
  141. condition: service_healthy
  142. seaweedfs-volume:
  143. condition: service_healthy
  144. healthcheck:
  145. test: ["CMD", "curl", "-f", "http://localhost:8081/health"]
  146. interval: 10s
  147. timeout: 5s
  148. retries: 3
  149. start_period: 15s
  150. # SeaweedFS Mount with RDMA
  151. seaweedfs-mount:
  152. build:
  153. context: .
  154. dockerfile: Dockerfile.mount-rdma
  155. platform: linux/amd64
  156. container_name: seaweedfs-mount
  157. privileged: true # Required for FUSE
  158. devices:
  159. - /dev/fuse:/dev/fuse
  160. cap_add:
  161. - SYS_ADMIN
  162. volumes:
  163. - seaweedfs_mount:/mnt/seaweedfs
  164. - /tmp/seaweedfs-mount-logs:/var/log/seaweedfs
  165. networks:
  166. - seaweedfs-rdma
  167. environment:
  168. - FILER_ADDR=seaweedfs-filer:8888
  169. - RDMA_SIDECAR_ADDR=rdma-sidecar:8081
  170. - MOUNT_POINT=/mnt/seaweedfs
  171. - RDMA_ENABLED=true
  172. - RDMA_FALLBACK=true
  173. - RDMA_MAX_CONCURRENT=64
  174. - RDMA_TIMEOUT_MS=5000
  175. - DEBUG=true
  176. command: /usr/local/bin/mount-helper.sh
  177. depends_on:
  178. seaweedfs-filer:
  179. condition: service_healthy
  180. rdma-sidecar:
  181. condition: service_healthy
  182. healthcheck:
  183. test: ["CMD", "mountpoint", "-q", "/mnt/seaweedfs"]
  184. interval: 15s
  185. timeout: 10s
  186. retries: 3
  187. start_period: 45s
  188. # Integration Test Runner
  189. integration-test:
  190. build:
  191. context: .
  192. dockerfile: Dockerfile.integration-test
  193. container_name: integration-test
  194. volumes:
  195. - seaweedfs_mount:/mnt/seaweedfs
  196. - ./test-results:/test-results
  197. networks:
  198. - seaweedfs-rdma
  199. environment:
  200. - MOUNT_POINT=/mnt/seaweedfs
  201. - FILER_ADDR=seaweedfs-filer:8888
  202. - RDMA_SIDECAR_ADDR=rdma-sidecar:8081
  203. - TEST_RESULTS_DIR=/test-results
  204. depends_on:
  205. seaweedfs-mount:
  206. condition: service_healthy
  207. command: >
  208. sh -c "
  209. echo 'Starting RDMA Mount Integration Tests...' &&
  210. sleep 10 &&
  211. /usr/local/bin/run-integration-tests.sh
  212. "
  213. profiles:
  214. - test
  215. # Performance Test Runner
  216. performance-test:
  217. build:
  218. context: .
  219. dockerfile: Dockerfile.performance-test
  220. container_name: performance-test
  221. volumes:
  222. - seaweedfs_mount:/mnt/seaweedfs
  223. - ./performance-results:/performance-results
  224. networks:
  225. - seaweedfs-rdma
  226. environment:
  227. - MOUNT_POINT=/mnt/seaweedfs
  228. - RDMA_SIDECAR_ADDR=rdma-sidecar:8081
  229. - PERFORMANCE_RESULTS_DIR=/performance-results
  230. depends_on:
  231. seaweedfs-mount:
  232. condition: service_healthy
  233. command: >
  234. sh -c "
  235. echo 'Starting RDMA Mount Performance Tests...' &&
  236. sleep 10 &&
  237. /usr/local/bin/run-performance-tests.sh
  238. "
  239. profiles:
  240. - performance
  241. volumes:
  242. seaweedfs_master_data:
  243. driver: local
  244. seaweedfs_volume_data:
  245. driver: local
  246. seaweedfs_mount:
  247. driver: local
  248. driver_opts:
  249. type: tmpfs
  250. device: tmpfs
  251. o: size=1g
  252. rdma_socket:
  253. driver: local
  254. networks:
  255. seaweedfs-rdma:
  256. driver: bridge
  257. ipam:
  258. config:
  259. - subnet: 172.20.0.0/16