RabbitMQ๋ Erlang์ผ๋ก ์์ฑ๋ ๋ฉ์์ง ๋ธ๋ก์ปค๋ก, ๊ฐ ๋
ธ๋๊ฐ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ์ฌ๋ฌ ๋
ธ๋์ ๊ฑธ์ณ ์ ์ฒด ๋ฐ์ดํฐ ๋ณต์ ๋ฅผ ํตํด ์ฅ์ ์กฐ์น ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ํ๋ก๋์
์์
์ ๋ง์ Kubernetes ํด๋ฌ์คํฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ๋ค์์ RabbitMQ ์ค์น๋ฅผ ์ง์ํ๊ณ ๊ฐ๋ ์ค์ง ์๊ฐ ์์ด ํ ํด๋ฌ์คํฐ์์ ๋ค๋ฅธ ํด๋ฌ์คํฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํด์ผ ํ๋ ํ์์ฑ์ ์ง๋ฉดํ์ต๋๋ค.
์ต์ํ ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ์ด ์์ ์ด ํ์ํ์ต๋๋ค.
- Kubernetes์ ์๋ RabbitMQ ํด๋ฌ์คํฐ์์ ์ด๋ฏธ "kubernetized"(์ฆ, K8s ํฌ๋์์ ์๋ ์ค์ธ) ์ ํด๋ฌ์คํฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํฉ๋๋ค.
- Kubernetes ๋ด์ RabbitMQ๋ฅผ ํ ๋ค์์คํ์ด์ค์์ ๋ค๋ฅธ ๋ค์์คํ์ด์ค๋ก ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค(์๋ฅผ ๋ค์ด ํ๋ก๊ฐ ๋ค์์คํ์ด์ค๋ก ๊ตฌ๋ถ๋ ๊ฒฝ์ฐ ํ ํ๋ก์์ ๋ค๋ฅธ ํ๋ก๋ก ์ธํ๋ผ๋ฅผ ์ ์กํ๋ ๊ฒฝ์ฐ).
๊ธฐ์ฌ์์ ์ ์๋ ๋ ์ํผ๋ ์ด๋ฏธ K3s ๋๋ ์ผ๋ถ ์ค๋๋ ์๋ฒ์ ์์นํ ์ค๋๋ RabbitMQ ํด๋ฌ์คํฐ(์: 8๊ฐ ๋ ธ๋)๊ฐ ์๋ ์ํฉ(๊ทธ๋ฌ๋ ์ด์ ๊ตญํ๋์ง๋ ์์)์ ์ด์ ์ ๋ง์ถ๊ณ ์์ต๋๋ค. Kubernetes(์ด๋ฏธ ์กด์ฌํ๊ฑฐ๋ ํฅํ์ ์์)์์ ํธ์คํ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.
...๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ด๋ฅผ Kubernetes์ ์๋ก์ด ํ๋ก๋์
์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ์์
์ ์ง๋ฉดํ์ต๋๋ค.
๋จผ์ , ๋ง์ด๊ทธ๋ ์ด์ ์์ฒด์ ๋ํ ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ค๋ช ํ ๋ค์ ๊ตฌํ์ ๋ํ ๊ธฐ์ ์ ์ธ๋ถ ์ฌํญ์ ์ค๋ช ํฉ๋๋ค.
๋ง์ด๊ทธ๋ ์ด์ ์๊ณ ๋ฆฌ์ฆ
์ด๋ค ์กฐ์น๋ฅผ ์ทจํ๊ธฐ ์ ์ฒซ ๋ฒ์งธ ์๋น ๋จ๊ณ๋ ์ด์ RabbitMQ ์ค์น์์ ๊ณ ๊ฐ์ฉ์ฑ ๋ชจ๋๊ฐ ํ์ฑํ๋์ด ์๋์ง ํ์ธํ๋ ๊ฒ์
๋๋ค(ha-mode: all
:
๋ค์ ๋จ๊ณ๋ Kubernetes ํฌ๋์์ ์ RabbitMQ ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๋ ๊ฒ์
๋๋ค(์๋ฅผ ๋ค์ด, 3๊ฐ์ ๋
ธ๋๋ก ๊ตฌ์ฑ๋์ง๋ง ๊ฐ์๋ ๋ค๋ฅผ ์ ์์).
๊ทธ๋ฐ ๋ค์ ์ด์ RabbitMQ ํด๋ฌ์คํฐ์ ์ RabbitMQ ํด๋ฌ์คํฐ๋ฅผ ๋ณํฉํ์ฌ ๋จ์ผ ํด๋ฌ์คํฐ(6๊ฐ ๋ ธ๋)๋ฅผ ์ป์ต๋๋ค.
์ด์ RabbitMQ ํด๋ฌ์คํฐ์ ์ RabbitMQ ํด๋ฌ์คํฐ ๊ฐ์ ๋ฐ์ดํฐ ๋๊ธฐํ ํ๋ก์ธ์ค๊ฐ ์์๋ฉ๋๋ค. ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋ ๊ฐ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋๊ธฐํ๋๋ฉด ์ ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ๋๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์ ํํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์์
ํ์ RabbitMQ ํด๋ฌ์คํฐ์์ ์ด์ ๋
ธ๋๋ฅผ ์ ๊ฑฐํ๋ฉด ์ถฉ๋ถํ๋ฉฐ ์ด๋์ด ์๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์์ฐ ๊ณผ์ ์์ ์ด ๋ฐฉ์์ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ํธ์๋ฅผ ์ํด ์ฌ๋ฌ Kubernetes ํด๋ฌ์คํฐ์ ํ์ค RMQ ๊ตฌ์ฑ์ ๋ฐฐํฌํ๋ ํน์ ์์คํ
๋ด์์ ์ด๋ฅผ ๊ตฌํํ์ต๋๋ค. (๊ถ๊ธํ์ ๋ถ๋ค์ ์ํด: ์ฐ๋ฆฌ๋
์ค์ ๋ก ํด๋ณด์
์๊ตฌ ์ฌํญ
์ธ๋ถ ์ฌํญ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
- Kubernetes ํด๋ฌ์คํฐ(minikube๋ ์๋ํจ)
- RabbitMQ ํด๋ฌ์คํฐ(๋ฒ ์ด๋ฉํ์ ๋ฐฐํฌํ ์ ์์ผ๋ฉฐ ๊ณต์ Helm ์ฐจํธ์์ Kubernetes์ ์ผ๋ฐ ํด๋ฌ์คํฐ์ฒ๋ผ ๋ง๋ค ์ ์์)
์๋ ์์์๋ RMQ๋ฅผ Kubernetes์ ๋ฐฐํฌํ๊ณ ์ด๋ฅผ ํธ์ถํ์ต๋๋ค. rmq-old
.
์คํ ๋ ์ค๋น
1. Helm ์ฐจํธ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์ฝ๊ฐ ํธ์งํฉ๋๋ค.
helm fetch --untar stable/rabbitmq-ha
ํธ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํด ๋์์ต๋๋ค. ErlangCookie
๊ทธ๋ฆฌ๊ณ ์ ์น๋ฅผ ํด๋ผ ha-all
๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐ์ด์ RMQ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋ ๊ฐ์ ๋๊ธฐํ๋ฉ๋๋ค.
rabbitmqPassword: guest
rabbitmqErlangCookie: mae9joopaol7aiVu3eechei2waiGa2we
definitions:
policies: |-
{
"name": "ha-all",
"pattern": ".*",
"vhost": "/",
"definition": {
"ha-mode": "all",
"ha-sync-mode": "automatic",
"ha-sync-batch-size": 81920
}
}
2. ์ฐจํธ๋ฅผ ์ค์นํฉ๋๋ค.
helm install . --name rmq-old --namespace rmq-old
3. RabbitMQ ๊ด๋ฆฌ ํจ๋๋ก ์ด๋ํ์ฌ ์ ๋๊ธฐ์ด์ ์์ฑํ๊ณ ์ฌ๋ฌ ๋ฉ์์ง๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ํ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ณด์กด๋๊ณ ์๋ฌด๊ฒ๋ ์์ค๋์ง ์์๋์ง ํ์ธํ๋ ๋ฐ ํ์ํฉ๋๋ค.
ํ
์คํธ ๋ฒค์น๊ฐ ์ค๋น๋์์ต๋๋ค. ์ ์กํด์ผ ํ ๋ฐ์ดํฐ๊ฐ ์๋ "์ด์ " RabbitMQ๊ฐ ์์ต๋๋ค.
RabbitMQ ํด๋ฌ์คํฐ ๋ง์ด๊ทธ๋ ์ด์
1. ๋จผ์ ์๋ก์ด RabbitMQ๋ฅผ ๋ฐฐํฌํด ๋ณด๊ฒ ์ต๋๋ค. ะดััะณะพะผ ๋ค์์คํ์ด์ค ๊ฐ์ ErlangCookie
๋ฐ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ. ์ด๋ฅผ ์ํด ์์์ ์ค๋ช
ํ ์์
์ ์ํํ๊ณ RMQ ์ค์น๋ฅผ ์ํ ์ต์ข
๋ช
๋ น์ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํฉ๋๋ค.
helm install . --name rmq-new --namespace rmq-new
2. ์ด์ ์ ํด๋ฌ์คํฐ๋ฅผ ์ด์ ํด๋ฌ์คํฐ์ ๋ณํฉํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ๊ฐ ํฌ๋๋ก ์ด๋ํ์ธ์. ์๋ก์ด RabbitMQ๋ฅผ ์คํํ๊ณ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
export OLD_RMQ=rabbit@rmq-old-rabbitmq-ha-0.rmq-old-rabbitmq-ha-discovery.rmq-old.svc.cluster.local &&
rabbitmqctl stop_app &&
rabbitmqctl join_cluster $OLD_RMQ &&
rabbitmqctl start_app
๋ณ์์์ OLD_RMQ
๋
ธ๋ ์ค ํ๋์ ์ฃผ์๋ฅผ ์ฐพ์์ต๋๋ค. ์ค๋๋ RMQ ํด๋ฌ์คํฐ.
์ด ๋ช ๋ น์ ํ์ฌ ๋ ธ๋๋ฅผ ์ค์งํฉ๋๋ค. ์๋ก์ด RMQ ํด๋ฌ์คํฐ๋ฅผ ์ด์ ํด๋ฌ์คํฐ์ ์ฐ๊ฒฐํ๊ณ ๋ค์ ์์ํฉ๋๋ค.
3. 6๊ฐ ๋ ธ๋์ RMQ ํด๋ฌ์คํฐ๊ฐ ์ค๋น๋์์ต๋๋ค.
๋ชจ๋ ๋
ธ๋ ๊ฐ์ ๋ฉ์์ง๊ฐ ๋๊ธฐํ๋๋ ๋์ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. ๋ฉ์์ง ๋๊ธฐํ ์๊ฐ์ ํด๋ฌ์คํฐ๊ฐ ๋ฐฐํฌ๋ ํ๋์จ์ด์ ์ฉ๋๊ณผ ๋ฉ์์ง ์์ ๋ฐ๋ผ ๋ค๋ฅด๋ค๋ ๊ฒ์ ์ถ์ธกํ๋ ๊ฒ์ ์ด๋ ต์ง ์์ต๋๋ค. ์ค๋ช
๋ ์๋๋ฆฌ์ค์์๋ ๊ทธ ์ค 10๊ฐ๋ง ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ ์ฆ์ ๋๊ธฐํ๋์์ง๋ง ๋ฉ์์ง ์๊ฐ ์ถฉ๋ถํ ๋ง์ผ๋ฉด ๋๊ธฐํ๊ฐ ๋ช ์๊ฐ ๋์ ์ง์๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋๊ธฐํ ์ํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์ +5
๋ฉ์์ง๊ฐ ์ด๋ฏธ ์์์ ์๋ฏธํฉ๋๋ค. ๋ ๋ง์ 5๊ฐ ๋
ธ๋(ํ๋์ ํ์๋ ํญ๋ชฉ ์ ์ธ) Node
). ์ด๋ ๊ฒ ๋๊ธฐํ๊ฐ ์ฑ๊ณตํ์ต๋๋ค.
4. ๋จ์ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ RMQ ์ฃผ์๋ฅผ ์ ํด๋ฌ์คํฐ๋ก ์ ํํ๋ ๊ฒ๋ฟ์ ๋๋ค(์ฌ๊ธฐ์ ๊ตฌ์ฒด์ ์ธ ์์ ์ ์ฌ์ฉ ์ค์ธ ๊ธฐ์ ์คํ ๋ฐ ๊ธฐํ ์ ํ๋ฆฌ์ผ์ด์ ์ธ๋ถ ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฆ). ๊ทธ ํ์๋ ์ด์ ํด๋ฌ์คํฐ์ ์๋ณ ์ธ์ฌ๋ฅผ ํ ์ ์์ต๋๋ค.
๋ง์ง๋ง ์์ ์ ๊ฒฝ์ฐ(์ฆ, ์ด๋ฏธ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํด๋ฌ์คํฐ๋ก ์ ํ) ๊ฐ ๋ ธ๋๋ก ์ด๋ ์ค๋๋ ํด๋ฌ์คํฐ๋งํ๊ณ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
rabbitmqctl stop_app
rabbitmqctl reset
ํด๋ฌ์คํฐ๊ฐ ์ด์ ๋ ธ๋๋ฅผ "์์์ต๋๋ค". ์ด์ RMQ๋ฅผ ์ญ์ ํ๋ฉด ์ด๋์ด ์๋ฃ๋ฉ๋๋ค.
์ฃผ์: ์ธ์ฆ์์ ํจ๊ป RMQ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ทผ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ์ฌํญ์ ์์ต๋๋ค. ์ด๋ ํ๋ก์ธ์ค๋ ์ ํํ ๋์ผํ๊ฒ ์ํ๋ฉ๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
์ค๋ช ๋ ์ฒด๊ณ๋ RabbitMQ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๊ฑฐ๋ ๋จ์ํ ์ ํด๋ฌ์คํฐ๋ก ์ด๋ํด์ผ ํ๋ ๊ฑฐ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ํฉํฉ๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ RMQ๊ฐ ์ฌ๋ฌ ๊ณณ์์ ์ก์ธ์ค๋๋ ๊ฒฝ์ฐ ๋จ ํ ๋ฒ๋ง ์ด๋ ค์์ด ๋ฐ์ํ์ผ๋ฉฐ ๋ชจ๋ ๊ณณ์์ RMQ ์ฃผ์๋ฅผ ์ ์ฃผ์๋ก ๋ณ๊ฒฝํ ๊ธฐํ๊ฐ ์์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ธฐ์กด ์๋น์ค ๋ฐ Ingress์ ์ํ๋๋ก ๋์ผํ ๋ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๋์ผํ ๋ค์์คํ์ด์ค์์ ์ RMQ๋ฅผ ์์ํ์ผ๋ฉฐ, ํฌ๋๋ฅผ ์์ํ ๋ ๋ ์ด๋ธ์ ์๋์ผ๋ก ์กฐ์ํ์ฌ ์์ฒญ์ด ํด๋น ๊ฒฝ๋ก์ ํฌํจ๋์ง ์๋๋ก ์ฒ์์ ๋ ์ด๋ธ์ ์ ๊ฑฐํ์ต๋๋ค. RMQ๋ฅผ ๋น์ฐ๊ณ ๋ฉ์์ง๊ฐ ๋๊ธฐํ๋ ํ ๋ค์ ์ถ๊ฐํฉ๋๋ค.
RabbitMQ๋ฅผ ๊ตฌ์ฑ์ด ๋ณ๊ฒฝ๋ ์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ๋ ๋์ผํ ์ ๋ต์ ์ฌ์ฉํ์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์๊ณ์ฒ๋ผ ์๋ํ์ต๋๋ค.
PS
์ด ์๋ฃ์ ๋ ผ๋ฆฌ์ ์ฐ์์ผ๋ก ์ฐ๋ฆฌ๋ MongoDB(ํ๋์จ์ด ์๋ฒ์์ Kubernetes๋ก ๋ง์ด๊ทธ๋ ์ด์ ) ๋ฐ MySQL(Kubernetes ๋ด๋ถ์์ ์ด DBMS๋ฅผ ์ค๋นํ๋ ๋ฐฉ๋ฒ)์ ๋ํ ๊ธฐ์ฌ๋ฅผ ์ค๋นํ๊ณ ์์ต๋๋ค. ๊ทธ๋ค์ ์์ผ๋ก ๋ช ๋ฌ ์์ ์ถํ๋ ๊ฒ์ ๋๋ค.
PPS
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ Kubernetes(๊ฐ์ ๋ฐ ๋์์ ๋ณด๊ณ ์) "; - ยซ
K8s ํ๊ณผ ์๋ น: ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํธ์คํธ๋ฉ ์๋ ํฅ์ ".
์ถ์ฒ : habr.com