본문 바로가기

DevOps/Ansible

[Ansible] 5. mariadb 바이너리 설치

 

 

 

앤서블로 mariadb를 설치하는 경우 보통 구글링에 나오는 자료들은 repository를 이용하여 

패키지 설치하는 경우만 나오기 때문에, 해당 포스팅은 mariadb를 바이너리 설치하는 내용에 대해서 ansible의 

모듈도 조금 익힐수 있게 설명과 소스를 포스팅 하겠습니다.

 

 

우선 전체적인 흐름을 먼저 잡아보자면 

mariadb는 tarball을 가지고 설치를 합니다. 물론 yum ,apt , zhipper 등을 사용하면 이러한 설치 과정이 

없이 바로 서비스를 등록할수 있지만, 인터넷 환경이 아닌 경우가 종종 있어서 알고 있으시면, 좋습니다.

 

1. tarball을 unarchive 합니다. 즉 압축을 푸는거죠.

 

2. 압축을 풀게되면 mariadb-linux-system-10.3.20 등 이렇게 디렉토리가 생깁니다.

 

3. 그안에 알아두어야 할 부분은 이정도가 됩니다.

 

  • scripts : 설치파일도 있고,
  • bin : 실행파일도 있고,
  • support-files, bin : 서비스를 실행시키는 스크립트도 있고,
  • support-files: 설정 config파일도 있고, 

 

4. /etc/my.cnf를 작성합니다

 

이안에 내용이 있어야 되는 부분은

  • datadir (socket이 위치하는 디렉토리입니다.)
  • socket ( 소켓의 경로입니다.)
  • user ( mysql로 유저와 그룹을 만들었습니다.)
  • port (포트번호)
  • log-error (마리아디비 로그 파일)
  • pid-file ( pid 파일이란? Pid-File은 파일 시스템의 잘 정의 된 위치에 저장된 프로세스 식별 번호 (pid)를 포함하는 파일이므로 다른 프로그램이 실행중인 스크립트의 pid를 찾을 수 있습니다.)

 

5. basedir에 설치된 디렉토리 안의 모든파일과 datadir에 설치된 모든 파일, mysqld.log, mysqld.pid 등 모든 Permission과 소유주에 대한 검증, 해결을 해줍니다.

 

 

6. 이후에 mysql_install 스크립트를 돌립니다.

/usr/local/mysql에 basedir로 두었을 경우 그 최상위 폴더에서

 

./scripts/mysql_install_db --user=mysql --defaults-file=/etc/my.cnf

다음 명령어를 통해 설치합니다.

그후에는 datadir ( /var/lib/mysql/ ) 안에 data들이 생성됩니다. 이때 아직 socket은 생성되지 않았습니다.

 

pid 파일 같은 경우는 /var/log/mysqld.pid 경로에 생성 하였을 경우 서비스를 종료할때마다 

사라지는 현상이 있어서 /var/lib/mysqld.pid 이 위치에 놓기로 했다.

 

mysql.sock 같은 경우는 서비스 종료 시 없어지게 되면 mysqld_safe 를 다시 돌려주면 

생성된다. 생성 된 후에는 다시 Permission을 작업해준다.

 

 

7. 이후에 mysqld_safe 실행파일을 돌려준다.

 

/usr/local/mysql/ 최상위 폴더에서

./bin/mysqld_safe --user=mysql &

다음 명령어를 통해 실행하여 주며 mysql 서비스가 실행된다

접속하는 명령어는 ./bin/mysql -u root -S /var/lib/mysql/mysql.sock 으로 접속한다.

 

 

8. 환경변수를 통해 어디에서도 mysql에 접속할수 있게 해주고 

 

9. 서비스 /etc/init.d/ 아래에 mariadb service를 복사해서 가져와서 서비스를 데몬형태로 관리할수 있도록 한다.

 

10. /var/lib/mysql/mysql.sock의 경로가 default로 들어갈 수 있게 서비스 script를 관리해준다.

 

 

 

자 여기까지가 mariadb 바이너리 설치에 대한 우리가 알고 있는 배경지식인데

이를 앤서블 코드로 옮기려면 어떻게 해야할까? 

 

우선 playbook을 만든다 site.yml이란 파일로 만들건데, 이름은 뭐로 해도 상관없지만 나는 관습을 따른다 항상.

---
- name: Install Mariadb
  hosts: all
  remote_user: root
  # remote_user: user
  # become: yes
  # become_method: sudo

  roles:
    - common
    - mariadb

이 playbook은 mariadb를 설치할때 그 순서와 roles들의 집합체를 불러내는 코드인데 playbook을 실행함으로써 ansible이 

동작한다고 생각하면 된다.

 

YAML 포맷으로 표현되며 프로그래밍 언어나 스크립트가 아닌 설정이나 프로세스에 대한 모델에 대한 정의를 표현한 최소한의 문법으로 구성 되어 있다. 각각의 플레이북은 리스트안의 한개 이상의 “플레이”로 구성되고 그 플레이들은 여러개의 tasks로 구성된다.  이 모든 tasks와 플레이들은 마리아디비 설치라는 한가지 목적을 가지고 실행된다.

 

그렇다면 common과 mariadb라는 디렉토리와 그 안의 파일을 roles라는 폴더를 만들고 그안에 만들것이다.

사실 roles-mariadb-tasks에서 변수까지 다 처리할수 있는데 그렇게 하면 유지보수성과 변수에 대한 변경이 있을때마다 

static으로 처리되어있는 모든 변수를 바꿔줘야하기 때문에, 변수는 따로 vars 폴더에 빼서 관리한다.

 

모든 소스들을 설명하기 힘들기 때문에 소스는 내 깃허브에 올려놨으니 참고하시길 바람

https://github.com/themapisto/ansible-test

 

task가 어떤 순서대로 도는지 간단히 설명하자면,

1.  playbook(=site.yml) 에서

2. tasks / main.yml 을 실행시킨다.

3.  # include : "define-home.yml"을 먼저 실행시키고

4.  # include : "install -{{ ansbile_os_family }}.yml" 을 실행시키는 순서다.

5. 각 yaml은 플레이로써 순서대로 실행될때 {{ }} 안에 변수처리를 할수 있다. 그 변수들은 vars안에 있다.