♥ 미리보기 ♥
1. ssh-copy-id root@[managed node ip]
2. /etc/ansible/hosts
3. vi hosts
4. ansible-galaxy init [role]
5. role: master&slave : tasks - main.yml / vars - main.yml / templates
6. playbook
7. ansible-playbook -i hosts playbook
안뇽하세요 오늘은
ansible로 redis 서버의 master - slave clustering 구성을 해 볼게용
필요한 건..
일단 코드를 짤 control node 가 필요하겠죠?
managed node 역할을 할 가상머신 6대도 필요해용
3대는 master 역할!
나머지 3대는 slave 역할!
Control Node : 200.200.200.157
Managed Node:
> Master : 200.200.200.163 / 200.200.200.164 / 200.200.200.165
> Slave : 200.200.200.166 / 200.200.200.167 / 200.200.200.168
1.
Control Node 에 새로운 Managed Node 를 추가할 때에는 키를 복사해 주어야 해요
앗.. 키가 없다구요?
2023.03.28 - [분류 전체보기] - [Ansible] Control node & Managed node
여기를 보고 오시면 키를 만드실 수 있답니당
사실..
ssh-keygen
명령어 한 번에 엔터 3번이면 금방 뚝딱이에요
이렇게 만든 키를 Managed Node에 복사해주시면 돼요~
ssh-copy-id root@[managed ip]
가상머신이 6대니까 6번 해주셔야 겠죠? 대신 키는 한 번만 만드시면 됩니당~
2.
두 번째로는 /etc/ansible/hosts 에 managed node 들의 ip 를 추가해주셔야 해요
# vi /etc/ansible/hosts
server:
200.200.200.163
200.200.200.164
200.200.200.165
200.200.200.166
200.200.200.167
200.200.200.168
저는 이렇게 파일 맨 마지막에 managed node 6대의 ip를 적어주었어요~
3.
다음으로는 hosts 파일을 만들어 주세용
# vi hosts
all:
children:
master:
hosts:
200.200.200.163:
200.200.200.164:
200.200.200.165:
slave:
hosts:
200.200.200.166:
200.200.200.167:
200.200.200.168:
4.
이번에는 role 을 만들어줄거에요
playbook 에 몽땅 쓰는 것보다 role 을 만들어주면 더 보기 깔끔하답니다
ansible-galaxy init [role name]
# ansible-galaxy init master
# ansible-galaxy init slave
role 의 구성요소에용
앗.. 지금 막 만든 척했는데 제가 이미 다 해보고 적는 거라 redis.conf.j2 파일이 다 보이네요ㅎ)ㅎ
원래 playbook 에 작성해주었던 module들의 정보들은 tasks - main.yml 에 적어줄거에요
일부 변경될 필요가 있는 파일들은 templates 에,
그 외의 파일들은 files 에 넣어준답니다
변수를 따로 설정해준다면 vars - main.yml 에 작성해줄 수 있어요
5.
혀가 길었네용 (메롱)
master 의 task - main.yml 을 적으러 가보자구요
# role: master - tasks - main.yml
- name: Install Redis # redis 설치
yum:
name: redis
state: latest
- name: File Copy # redis 파일 설정 변경
template:
src: redis.conf.j2
dest: /etc/redis.conf
remote_src: no
become: yes
- name: Start Redis # redis 시작하기
systemd:
name: redis
state: restarted
become: yes
- name: Stop Firewalld # 방화벽 해제
systemd:
name: firewalld
state: stopped
become: yes
- name: Load Vars # 변수 폴더 불러오기
include_vars: "/root/ansible_redis/master/tasks/main.yml"
- name: Clustering # master node 들 clustering
shell: |
echo yes | redis-cli --cluster create "{{ allips[0:15] }}":6379 "{{ allips[16:31] }}":6379 "{{ allips[32:47] }}":6379
become: yes
네? redis 파일 설정을 뭘 어떻게 변경해서 복사해준거냐구요??
2023.03.24 - [분류 전체보기] - [Redis] Master Clustering(3) - Slave Clustering(3)
이 글을 참고해주셔용
아차차 vars - main.yml 이 궁금하시겠네~~
# role: master - vars - main.yml
allips: |
{% set comma = joiner(",") %}
{% for host in groups['master'] -%}
{{ comma() }}{{ host }}
{%- endfor -%}
허걱 이게 머냐고요??
진자2 문법이요!!
이 변수를 출력하면 "200.200.200.163,200.200.200.164,200.200.200.165"
이렇게 master ip 들이 문자열처럼 출력돼용
그래서 위에 tasks - main.yml 에서 문자열 슬라이싱으로 뽑아준거랍니닷
( 하드 코딩 맛있다^^ (
아.. 하드 코딩 싫으시다구요? 클러스터링 구성하는 게 몇 갠데 저렇게 못하시겠다구요?>!
그렇다면..
# vars - main.yml
allips: |
{% set ips = '' %}
{% for host in groups['master'] -%}
{% set ips = ips ~ host ~ ',' %}
{{ ips }}
{%- endfor -%}
# tasks - main.yml
- name: Execute redis-cli Command
shell: |
echo yes | redis-cli --cluster create {{ allips.replace(',', ':6379 ') }}
become: yes
6.
이제 해당 role 을 실행할 playbook 에 적어줘볼까용?
# playbook
- hosts: [ "master" ]
roles:
- role: master
- hosts: [ "slave" ]
roles:
- role: slave
곧 slave role 도 만들거니까~ 미리 만들어줬습니다
자 Redis Server 의 Master Node 준비 끝~
Slave 레츠고
마스터랑 똑같지 머!!
# role: slave - tasks - main.yml
- name: Install Redis
yum:
name: redis
state: latest
- name: File Copy
template:
src: redis.conf.j2
dest: /etc/redis.conf
remote_src: no
become: yes
- name: Start Redis
systemd:
name: redis
state: restarted
become: yes
- name: Stop Firewalld
systemd:
name: firewalld
state: stopped
become: yes
- name: Execute redis-cli Command
shell: |
redis-cli -h {{ ansible_facts.default_ipv4.address }} --cluster add-node {{ slave_ip }}:6379 {{ groups['master'][master_idx | int] }}:6379 --cluster-slave
become: yes
# role: slave - vars - main.yml
slave_ip: "{{ ansible_facts.default_ipv4.address }}"
master_idx: "{{ groups['slave'].index(inventory_hostname) }}"
다른 게 있다면..
Master - Slave 연결해주는 것~?
실행해봅시당
ansible-playbook -i hosts playbook
??? : 에러는 안났는데 된지 안된건지 어케 알아요?
아하~
그렇다면 아무 가상머신에 지금 바로
접속하세요!
연
결
성
공
축하드립니다~^^
'CLOUD > IaC' 카테고리의 다른 글
[Terraform/AWS] AWS EC2 생성하기 (0) | 2023.03.30 |
---|---|
[Terraform] 시작하기 (0) | 2023.03.30 |
[Ansible] Playbook - Module 연습 (0) | 2023.03.29 |
[Ansible] Control node & Managed node (2) | 2023.03.28 |
[Redis/Shell Programming] 쉘 스크립트로 Redis Master - Slave - Sentinel 구성하기 (0) | 2023.03.28 |