본문 바로가기
기초 튼튼탄탄탄/DevOps

[Ansible-playbook 예제] MariaDB 설치 및 user, schema 생성하기

by 잇서니 2021. 1. 8.
반응형

 

개요

MariaDB 을 구축하고, MariaDB 서비스를 구동하고, 쿼리를 실행하는 playbook을 작성해보겠습니다.

ansible-playbook의 기본 구조는 여기에 정리해놓았습니다.

아래와 같은 구조로 playbooks를 구성하겠습니다.

- sunny-mariadb-playbooks
 - hosts
 - install-mariadb.yml
 - roles
   - mariadb
     - meta
     - tasks
     - templates
        - my.cnf
     - files
   - maria_init
     - tasks
- group_vars

 


 

1. hosts 파일 작성

vim ./sunny-mysql-playbooks/hosts

 

[mariadb-client]
sunny1.test.com
sunny2.test.com
sunny3.test.com

[mariadb-server]
sunny1.test.com

[mariadb-server:vars]
#proxy=

[mariadb:children]
mariadb-client
mariadb-server

 

 

 

2. group_vars에 변수 설정

vim ./sunny-mysql-playbooks/group_vars/mariadb.yml

sunny_core_db:
 host: "{{ hostvars[groups['mariadb-server'][0]].proxy|default(groups['mariadb-server'][0]) }}"
 user: sunny
 password : sunny123

 

3. install-mariadb.yml 작성

role을 실행시키는 yml 파일이다.

vim ./sunny-mysql-playbooks/install-mariadb.yml

---
- hosts: mysql
  user: root
  roles:
   - { role: mariadb }

 

 


이제부터 Ansible Playbooks의 핵심인 role을 만들어보겠습니다.

 

3. role 생성

1) mariadb_init

MariaDB 패키지 설치 및 서비스 설정 작업을 할 것이다.

 

a) tasks 디렉토리 : 각종 tasks를 수행하는 yaml을 작성한다.

vim roles/mysql_init/tasks/main.yml

---
- include: package.yml tags=mariadb-pkg
- include: init.yml tags=mariadb-init

 

vim roles/mariadb_init/tasks/package.yml

---
- name: Install c-Server Packages
  yum: pkg={{ item }} state=latest
  with_itmes:
   - MariaDB-server
  when: ansible_fqdn in groups['mariadb-server']
  
- name: Install MariaDB Client
  yum: pkg={{ item }} state=latest
  with_items:
   - MariaDB-client
  when: ansible_fqdn in groups['mariadb']

 

vim roles/mariadb_init/tasks/init.yml

---
- name: Change MariaDB Service Name
  shell: mv /etc/init.d/mysql /etc/init.d/mysqld
  when: ansible_fqdn in groups['mariadb-server']
  
- name: Start MariaDB Server
  service: name=mysqld state=started
  when: ansible_fqdn in groups['mariadb-server']

 

 

2) mariadb

MariaDB 설정파일 배포 및 DB user 생성, 스키마 생성 등의 작업을 할 것이다.

 

a) meta 디렉토리 : 의존성있는 task 작성한다. 예시에서는 mariadb-init role이 먼저 수행된 이후, mariadb role이 수행됨.

vim roles/mysql/meta/main.yml

---
dependencies:
 - { role: mariadb-init, when: "ansible_fqdn in groups['mariadb-server']" }

 

(2) templates 디렉토리 : 설정파일 템플릿을 저장한다. mariadb설정파일 템플릿을 작성하겠다.

vim roles/mysql/templates/my.cnf

# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d


vim roles/mysql/templates/server.cnf

[client]
default-character-set=utf8

[server]

[mysql]
default-character-set=utf8

[mysqld]
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server=utf8

default-storage-engine = innodb

[galera]

[embedded]

[mariadb]

[mariadb-10.1]

 

(3) files 디렉토리 : 가져다 쓸 파일들을 저장한다. 여기에 간단한 sql 파일을 작성하겠다.

vim roles/mariadb/files/show-db.sql

show databases;

 

(4) tasks 디렉토리 : 각종 task를 수행하는 yaml을 작성한다.

vim roles/mariadb/tasks/main.yml

---
- include: files.yml
- include: user.yml
- include: init.yml

 

vim roles/mariadb/tasks/files.yml

---
- name: Setting MariaDB my.cnf File
  template: src=my.cnf dest=/etc/my.cnf
  when: ansible_fqdn in groups['mariadb']

- name: Setting MariaDB server.cnf File
  template: src=server.cnf dest=/etc/my.cnf.d/server.cnf
  when: ansible_fqdn in groups['mariadb']
  
- name: Copy sample Sql File to /tmp/
  copy: src={{ item }} dest=/tmp/{{ item }}
  with_items:
    - show-db.sql

 

vim roles/mysql/tasks/user.yml

---
- name: Create user with name 'sunny' and password 'sunny123' with all database privileges
  mysql_user:
    name: {{ sunny_core_db.user }}
    password: {{ sunny_core_db.user_password }}
    priv: '*.*:ALL'

 

vim roles/mysql/tasks/init.yml

---
- name: Create schema
  mysql_db: login_user={{ sunny_core_db.user }} login_password={{ sunny_core_db.user_password }} login_host={{ sunny_core_db.host }} name={{item}}
  with_items:
   - hisunny_db
   - byesunny_db

 

 


playbooks 작성이 끝났습니다.

이제 ansible playbooks 실행만 하면 됩니다.

ansible-playbook -i hosts install-mariadb.yml

 

 

 

 

참고링크

 

[Ansible/엔시블/엔서블] Ansible 교육 자료 - 02. Playbooks

2개의 세션으로 나누어져 있습니다. Ansible 교육 자료 - 01. Introduction: http://mcpaint.tistory.com/277 Ansible 교육 자료 - 02. Playbooks: http://mcpaint.tistory.com/278 https://github.com/mcpaint/le..

mcpaint.tistory.com

 

반응형

댓글