개요
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
참고링크
'기초 튼튼탄탄탄 > DevOps' 카테고리의 다른 글
[AWS-EMR] bootstrap 작업 (5) | 2021.09.05 |
---|---|
[Git] 원격저장소에 push 하기 (2) | 2021.07.20 |
[Azure] VM 자동중지 및 자동시작 (21) | 2020.12.26 |
[docker] 도커 컨테이너 <-> 호스트 간 파일 복사 (2) | 2020.06.22 |
[docker] 도커 네트워크 - link 옵션 (4) | 2020.04.20 |
댓글