서로 다른 RabbitMQ 버전으로 Cluster 구성 테스트.
RabbitMQ 는 인기있는 메시지 브로커 입니다. 비동기 메시지를 다루는데 있어서 RabbitMQ 는 많이 사용되어 집니다. 거기다 RabbitMQ 는 여러 RabbitMQ 를 하나로 묶는 Cluster 기능을 제공합니다. 그런데, 언제나 그렇지만, 서로다른 RabbitMQ 버전끼리 하나로 묶을 수 있을까하는 의문이 들었습니다. 테스트를 해보았습니다.
환경 세팅
master, slave 라 불리는 2개의 서버를 준비했고 각각 3.5.4 버전과 3.1.5 버전을 설치했습니다. 모든 버전은 Epel 저장소에서 RPM으로 설치를 했습니다.
그리고 다음과 같이 RabbitMQ 를 설정했습니다.
- master 의 쿠키 파일를(/var/lib/rabbitmq/.erlang.cookie) slave에 복사했습니다.
- 양쪽모두 호스트네임을 /etc/rabbitmq/rabbitmq-env.conf 에 지정해줬습니다.
1NODENAME=rabbit@master
결과
결과적으로 RabbitMQ 는 서로다른 버전으로 Cluster 를 구성할 수 없습니다.
1 2 3 |
[root@slave rabbitmq]# rabbitmqctl join_cluster rabbit@master Clustering node rabbit@slave with rabbit@master ... Error: {inconsistent_cluster,"Rabbit version mismatch: local node is 3.5.4, remote node 3.1.5"} |
버전이 맞지 않는다고 에러를 냅니다.
혹시나 Master 버전이 Slave 버전보다 낮아서 그런가 싶어서 거꾸로 해봤습니다. (Slave 버전이 Master 버전보다 높습니다.) 즉, 버전이 낮은 RabbitMQ Node 를 높은 버전의 RabbitMQ Node 로 묶어보자는 거였는데 그것도 안됐습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[root@master rabbitmq]# rabbitmqctl join_cluster rabbit@slave Clustering node rabbit@master with rabbit@slave ... Error: {{case_clause, {{error, {aborted, {function_clause, [{mnesia_schema,cs2list, [{cstruct,schema,set,[], [rabbit@minion1], [],0,read_write,false,[],[],false,schema, [table,cstruct], [],[],[], {{1441,272826,996460},rabbit@minion1}, {{2,0},[]}}]}, {mnesia_schema,do_merge_schema,1}, {mnesia_tm,apply_fun,3}, {mnesia_tm,execute_transaction,5}, {mnesia_schema,schema_coordinator,3}]}}}, [rabbit@minion1]}}, [{rabbit_mnesia,change_extra_db_nodes,2}, {rabbit_mnesia,init_db,3}, {rabbit_mnesia,init_db_and_upgrade,3}, {rabbit_mnesia,init_db_with_mnesia,4}, {rabbit_mnesia,join_cluster,2}, {rpc,'-handle_call_call/6-fun-0-',5}]} |
이 메시지는 아마도 데이터베이스 스키마가 달라졌기 때문에 안되다는 오류 메시지로 보입니다.