[IaC] Ansible - Redis(cluster)

이정훈·2023년 3월 29일
0

IaC

목록 보기
6/8
post-thumbnail

ansible 200.200.200.201

  • hosts 구성
all:
  children:
    master:
      hosts:
        200.200.200.21:
        200.200.200.22:
        200.200.200.23:
    slave:
      hosts:
        200.200.200.24:
        200.200.200.25:
        200.200.200.26:
  • 역할은 common, master, slave 만 구성하였다.

common

---
# tasks file for firewall
- name: Stop SELinux
  command: setenforce 0
  become: yes

- name: Stop Firewalld
  systemd:
    name: firewalld
    state: stopped
  become: yes

- name: Install the latest version of Redis
  yum:
    name: redis
    state: latest

- name: Copy redis.conf file
  template:
    src: redis.conf.j2
    dest: /etc/redis.conf
    remote_src: no
  become: yes

- name: Start Redis Server
  systemd:
    name: redis
    state: restarted
  become: yes
  • template는 마스터와 슬레이브 모두 동일하여 common template에 하나로 만들어 주었다.
bind {{ ansible_facts.default_ipv4.address }}
daemonize yes
cluster-enabled yes 
cluster-config-file nodes.conf
cluster-node-timeout 3000

master

---
allips: |
          {% set ips = '' %}
          {% for host in groups['master'] -%}
            {% set ips = ips ~ host ~ ','  %}
            {{ ips }}
          {%- endfor -%}

  • 변수만 만들어 줬다. 이걸 만들어줘야 마스터노드가 클러스터를 구성할 수 있다!
    (따로 변수파일을 만들어서 절대경로로 지정해주면 되는데 역할을 만들어 보기 위해 만들었다.)

slave

---

- 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

  • 현재 자기 자신의 아이피와 마스터의 아이피가 연결이 되어야 마스터-슬레이브 관계가 형성된다.
  • 한 노드에서 모든 아이피를 작성해서 만들어도 되지만 역할을 만들어 하나의 노드 자기자신 아이피와 마스터 노드 index 순차적으로 하나씩 연결되도록 설정을 하였다.

playbook

- hosts: ["all"]
  roles:
    - role: common

- hosts: ["200.200.200.21"]
  tasks:
  - name: vars
    include_vars: "/root/redis-cluster/master/vars/main.yml"
  - name: Execute redis-cli Command
    shell: |
      printf yes | redis-cli --cluster create {{ allips.replace(',', ':6379 ') }}
    become: yes

- hosts: ["slave"]
  roles:
    - role: slave
ansible-playbook -i hosts playbook
  • 모든 친구들이 common 역할을 수행하도록
  • 마스터에서는 하나의 노드에서만 작동하면되고 그때 사용되는 변수는 master역할에 만들어놨던 변수를 사용할 것이다.
  • 마스터 노드들이 클러스터를 연동하기위해서는 200.200.200.21:6379 200.200.200.22:6379 200.200.200.23:6379 뛰어쓰기만으로 이루어지고 뒤에 포트번호가 입력이 되어야해서 replace로 변경 해줬다.
  • 그리고 명령어가 입력이 되면 yes가 되어야해서 printf를 입력해줬다.


profile
싱숭생숭늉

0개의 댓글