닷넷코어 어플리케이션을 리눅스 도커환경으로 클러스터화 하는 실험이며 최종목표는 단일지점 병목이 없는 분산처리 어플리케이션 작성입니다. 클러스터 시스템을 로컬에 구동하고 디버깅하는것은 귀찮고 어려운 일이지만 비주얼 스튜디오 도커툴의 도움을 받아보겠습니다. |
로컬에서는 다음과같은 구성으로 NetCoreCluser-StandAlone 으로 모든 롤이 실행이 가능하며, SeedNode없이 Seed기능이 작동됩니다. ( 누구나, 클러스터의 Seed가 될수 있습니다. )
{ "$schema": "http://json.schemastore.org/launchsettings.json", "profiles": { "Local-Development": { "commandName": "Project", "launchBrowser": false, "launchUrl": "help/", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "CLUSTER_PORT": "7100", "CLUSTER_IP": "127.0.0.1", "CLUSTER_SEEDS": "akka.tcp://NetCoreCluster@127.0.0.1:7100", "CLUSTER_ROLES": "WorkNode,AdminNode", "ACTORSYSTEM": "NetCoreCluster" }, "applicationUrl": "http://localhost:7000" } } } |
VisualStudio에서 도커툴을 지원함에 따라, 도커화된 프로젝트를 빌드및 디버깅가능합니다.
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="15.0" Sdk="Microsoft.Docker.Sdk"> <PropertyGroup Label="Globals"> <ProjectVersion>2.1</ProjectVersion> <DockerTargetOS>Linux</DockerTargetOS> <ProjectGuid>a325c35e-28e0-43ce-b28f-516dc1568e18</ProjectGuid> <DockerLaunchAction>None</DockerLaunchAction> <DockerServiceUrl>{Scheme}://localhost:{ServicePort}/swagger</DockerServiceUrl> <DockerServiceName>akka-infra</DockerServiceName> </PropertyGroup> <ItemGroup> <None Include="docker-compose.yml" /> <None Include=".dockerignore" /> </ItemGroup> </Project> |
참고 : https://docs.microsoft.com/ko-kr/visualstudio/containers/overview?view=vs-2019
클러스터화된 시스템을 DockerCompose를 통해 구성할수 있습니다.
version: '3.4' services: lighthouse: image: ${DOCKER_REGISTRY-}lighthouse build: context: . dockerfile: ../LightHouse/Dockerfile environment: ACTORSYSTEM: NetCoreCluster CLUSTER_IP: lighthouse CLUSTER_PORT: 4053 CLUSTER_SEEDS: akka.tcp://NetCoreCluster@lighthouse:4053 ports: - 4053 netcoreapp1: image: ${DOCKER_REGISTRY-}netcoreapp build: context: . dockerfile: ../NetCoreCluster/Dockerfile environment: ASPNETCORE_ENVIRONMENT: Development ACTORSYSTEM: NetCoreCluster CLUSTER_IP: netcoreapp1 CLUSTER_PORT: 7000 CLUSTER_SEEDS: akka.tcp://NetCoreCluster@lighthouse:4053 CLUSTER_ROLES: "WorkNode" depends_on: - "lighthouse" netcoreapp2: image: ${DOCKER_REGISTRY-}netcoreapp build: context: . dockerfile: ../NetCoreCluster/Dockerfile environment: ASPNETCORE_ENVIRONMENT: Development ACTORSYSTEM: NetCoreCluster CLUSTER_IP: netcoreapp2 CLUSTER_PORT: 7000 CLUSTER_SEEDS: akka.tcp://NetCoreCluster@lighthouse:4053 CLUSTER_ROLES: "WorkNode" depends_on: - "netcoreapp1" netcoreapp3: image: ${DOCKER_REGISTRY-}netcoreapp build: context: . dockerfile: ../NetCoreCluster/Dockerfile environment: ASPNETCORE_ENVIRONMENT: Development ACTORSYSTEM: NetCoreCluster CLUSTER_IP: netcoreapp3 CLUSTER_PORT: 7000 CLUSTER_SEEDS: akka.tcp://NetCoreCluster@lighthouse:4053 CLUSTER_ROLES: "AdminNode" depends_on: - "netcoreapp2" |
visual studio 가 아닌곳에서도, 도커컴포저내 클러스터화된 어플리케이션 제어가 가능하며
노드를 중단시키고 새롭게 조인시키는 다양한 클러스터 테스트를 도커를 통해 수행가능합니다.
클러스터화가된 N개의 App이 동시에 구동되어도 브레이크포인트 판정이되며 작동중인 도커 인스턴스를 일시중지하고 디버깅이 가능합니다.
도커화및 클러스터화 구동을 수행해볼수 있으며 , 커스텀화된 분산처리 로직을 직접설계및 추가 가능합니다.
닷넷코어 서비스와 도커를 활용하여 클러스터시스템을 직접 구현하고 배치를 해보았으며
Akka 클러스터의 자세한 설명은 생략하였으며 다음을 참고합니다.
참고 자료: