Ansible과 Terraform은 모두 **인프라 자동화** 및 **관리 도구**이지만, 목적과 사용 방식에 있어 차이점이 있습니다. 두 도구 모두 서버 설정을 자동화하거나 클라우드 인프라를 관리하는 데 사용되지만, 사용되는 패러다임, 특징, 그리고 주된 목적에서 차이가 있습니다.

### 1. **Ansible (앤서블)**

Ansible은 주로 **프로비저닝, 구성 관리** 및 **애플리케이션 배포**에 사용되는 도구입니다.

#### 주요 특징:
- **구성 관리(Configuration Management)**: Ansible은 서버 및 애플리케이션의 상태를 정의하고, 해당 상태에 도달하도록 서버를 관리합니다. 소프트웨어 설치, 설정 변경, 서비스 시작/중지 등의 작업을 자동화합니다.
- **에이전트리스(Agentless)**: Ansible은 관리 대상 시스템에 에이전트를 설치할 필요가 없습니다. SSH를 통해 시스템에 접속하여 작업을 수행합니다.
- **절차적(Procedural)**: Ansible은 단계별로 작업을 수행하는 절차적 접근 방식을 사용합니다. 즉, 사용자가 특정 순서에 따라 어떤 작업이 어떻게 수행되어야 하는지 자세히 설명합니다.
- **Playbook**: Ansible은 `YAML`로 작성된 Playbook을 사용하여 여러 서버에 걸쳐 다양한 작업을 정의합니다.
- **멀티클라우드 지원**: Ansible은 여러 클라우드 공급자나 온프레미스 환경에서 소프트웨어와 시스템 구성 관리에 중점을 둡니다.

#### 사용 예:
- 서버의 소프트웨어 업데이트 및 구성 관리.
- 애플리케이션 배포 자동화.
- 데이터베이스 백업 또는 스크립트 실행 등의 운영 작업 자동화.

#### 장점:
- 에이전트리스 방식으로 SSH만 있으면 손쉽게 설정 가능.
- 설정과 배포가 간단하며, 다양한 시스템 환경에서 운영 가능.
- 작은 규모부터 대규모 환경까지 적용 가능.

### 2. **Terraform (테라폼)**

Terraform은 주로 **인프라 프로비저닝(Infrastructure Provisioning)**에 사용되는 도구입니다.

#### 주요 특징:
- **인프라 구축(Infrastructure as Code, IaC)**: Terraform은 클라우드 인프라 자원(서버, 네트워크, 로드 밸런서 등)을 코드로 정의하고 자동으로 프로비저닝하는 데 중점을 둡니다.
- **선언적(Declarative)**: Terraform은 최종 상태를 정의하는 선언적 접근 방식을 사용합니다. 사용자는 자원이 어떤 상태에 있어야 하는지 정의하고, Terraform이 그 상태로 만드는 작업을 자동으로 처리합니다.
- **상태 관리(State Management)**: Terraform은 인프라 상태를 저장하고 추적하여 상태 변화를 효율적으로 관리합니다. 예를 들어, 이미 생성된 자원은 다시 만들지 않으며, 변경 사항만 적용합니다.
- **멀티클라우드 지원**: AWS, Azure, GCP와 같은 다양한 클라우드 제공자를 지원하며, 여러 클라우드에서 일관된 인프라 관리가 가능합니다.
- **프로바이더(Provider)**: Terraform은 클라우드 제공자 또는 기타 API에 대한 플러그인 역할을 하는 프로바이더 개념을 사용합니다.

#### 사용 예:
- AWS, Azure, GCP 등의 클라우드 인프라 자원(서버, 네트워크 등) 생성 및 관리.
- 인프라의 상태를 코드로 정의하고 배포 자동화.
- 복잡한 클라우드 인프라를 자동화하고 버전 관리.

#### 장점:
- 인프라 자원을 코드로 관리하여 일관성 있는 환경 제공.
- 선언적 접근 방식으로 코드의 가독성 및 유지보수성 향상.
- 멀티클라우드 환경에서 일관된 인프라 관리.

### 주요 차이점

| 특성                    | Ansible                          | Terraform                        |
|-------------------------|-----------------------------------|-----------------------------------|
| **목적**                 | 구성 관리 및 애플리케이션 배포    | 인프라 구축 및 프로비저닝         |
| **패러다임**             | 절차적(Procedural)                | 선언적(Declarative)               |
| **상태 관리**            | 상태를 추적하지 않음              | 상태 관리 파일을 통해 상태 추적   |
| **사용 방법**            | SSH를 통한 에이전트리스 방식      | 프로바이더를 통한 클라우드 API 제어 |
| **사용 대상**            | 서버 설정, 소프트웨어 설치        | 클라우드 인프라 자원 생성         |
| **멀티 클라우드 지원**   | 지원(구성 관리 중심)              | 지원(인프라 구축 중심)            |
| **학습 난이도**          | 상대적으로 쉽고 직관적           | 더 복잡할 수 있지만 강력한 기능 제공 |

### 결론

- **Ansible**은 서버 구성 및 애플리케이션 배포와 같은 작업을 자동화하는 데 적합하며, **설정 관리(Configuration Management)**에 중점을 둡니다.
- **Terraform**은 인프라 자원을 코드로 관리하고, 클라우드 인프라를 자동으로 프로비저닝하는 **인프라 구축(Infrastructure as Code)**에 중점을 둡니다.

둘 다 인프라 관리에 중요한 도구이지만, **Ansible**은 서버의 **구성**을, **Terraform**은 인프라 자원의 **생성 및 관리**를 목적으로 사용하는 것이 더 적합합니다.

'IAC' 카테고리의 다른 글

DB 설치 & 운영 자동화  (0) 2024.10.16
  • Jmeter로 성능테스트해보자
  • Jmeter 장점 : sysbench와 다르게 쿼리를 설정할수있음

 

2. JMeter 설치하기

1) java 설치 : jmeter를 사용하려면 자바 8 버전이상이 필요하다. 아래 링크에서 OS맞는 버전을 다운로드 받아 설치한다. (있는 경우 설치할 필요X)

https://www.oracle.com/java/technologies/javase-downloads.html

 

2) jmeter 설치 : 아래 링크에서 jmeter툴을 설치할 수 있다. 바이너리 파일 중 zip파일을 다운로드 받는다. 

https://jmeter.apache.org/download_jmeter.cgi

3) JMeter툴 실행 : 압축을 풀고 bin 폴더 안에 있는 jmeter.bat 열어 JMeter을 실행시킨다. cmd창으로 로그 등을 확인할 수 있으므로 툴이 뜨고난 후에도 cmd창은 닫지 않는다.

 

3. JMeter - DB관련 도구 설치

1) 접속드라이버 설치 : Jmeter가 DB에 접속하기 위해서는 접속드라이버가 필요하다. 아래 링크에 들어가 platform independent 메뉴에서 zip파일을 다운로드 받으면 된다. 

https://dev.mysql.com/downloads/connector/j/

다운로드 받은 파일 압축을 푼다. .jar로 끝나는 JDBC 드라이버 파일을 복사해 jmeter폴더의 lib폴더에 넣어준다.

 

4. JMeter 사용하기 (미리 구성된 템플릿 이용)

Jmeter는 시작할 때 lib폴더를 참조하므로, Jmeter를 닫고 재실행한다.

 

1) 템플릿 생성 : [ File > Templates ]를 클릭하고 상단 셀렉트박스에서 JDBC Load Test를 클릭한다. create 버튼을 눌러 생성한다.

 

2) Connector 설정 : 테스트 서버에 접속정보를 입력

각 옵션에 대한 설명 확인 ▷ [ https://jmeter.apache.org/usermanual/component_reference.html ]

따로 완료 버튼은 없다. 

 

3) Thread Group 설정 : 쓰레드 그룹은 부하를 줄 양과 빈도를 설정

위와 같이 설정하면 10유저가 30초 안에 모두 실행해야 되므로, (30/10)초에 한 번씩 10개가 DB에 연결된다. 그리고 이 작업을 2번 반복한다. 

 

4) JDBC Request 설정 : 실제 테스트할 로직을 작성

 

5) Summary Report 추가 : summary report는 요청성공여부 통계를 내준다. DB에 부하가 많이 걸려서 요청에 실패하게 될 경우, 대략 몇 건까지 요청이 성공했는지 파악할 수 있다.

 

6) 결과 확인 : [ 파일 > 저장 ]을 눌러 파일을 저장하고 JDBC Request화면을 띄우고 상단에 초록색으로 된 시작버튼을 눌러 시작한다.

좋아요3
공유하기
게시글 관리
구독하기

'MySQL (Aurora) > TECH' 카테고리의 다른 글

Mysql Gap Lock  (1) 2024.10.16
mysql 8.0 error_log filter  (0) 2024.10.04
Aurora(Mysql) Version 별 Connector / Driver 설정  (1) 2024.09.13

1. Mysql Gap Lock 이란?

인덱스 레코드 사이에 잠금

Isolation_level이 Repeatable Read일떄만 발생

 

단점 : 인덱스 사이에 Gap Lock이 발생해서 데드락 유발

 

 

Gap Lock : https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html#innodb-gap-locks

 

cf)

https://medium.com/daangn/mysql-gap-lock-%EB%8B%A4%EC%8B%9C%EB%B3%B4%EA%B8%B0-7f47ea3f68bc

'MySQL (Aurora) > TECH' 카테고리의 다른 글

Mysql 성능테스트(jmeter)  (0) 2024.10.16
mysql 8.0 error_log filter  (0) 2024.10.04
Aurora(Mysql) Version 별 Connector / Driver 설정  (1) 2024.09.13

DB 배포 자동화 도구를 도입해보자

bytebase 도입

https://www.linkedin.com/pulse/how-manage-database-access-control-bytebase-wf3bc/

  • 목표 
    • AWS 와 IDC 간의 dependency 없게 설치 자동화 ( OS 호환성 가능하게)
    • 단일 서버가 아닌 MHA 구성도 자동화 할수있게 
    • 설치 이후 후속작업 모니터링,알람, CM DB 연동 도 자동화 할수있는지
    • Mysql Orchestrator 도입을 하여 자동복구 가능할수 있게
      • Mysql Orchestrator : 

                             MySQL Orchestrator는 MySQL 복제 환경에서 데이터베이스 클러스터의 복제 토폴로지를 자동으로 감지, 시각화하고, 마스터 장애 복구를 수행할 수 있는 도구

                             복제 토폴로지 자동 감지 및 시각화: Orchestrator는 클러스터의 모든 복제 인스턴스를 자동으로 감지하고 시각화하여 보여줍니다.
                             장애 복구: Orchestrator는 복제된 마스터가 장애가 발생했을 때 자동으로 장애 조치를 수행하고 복제 토폴로지를 복구합니다.

 

 

             

 

  • 논의

             1) 어떻게하면 빠르고 신속하게 설치 자동화를 할수있을까? 

      • OS 요청 후 Mysql 설치 하지말고 OS에 미리 Mysql Package Image  하여 제공받자
      • Image 에 모니터링,알람, CM DB 연동 , Mysql Orchestrator 도 이식 필요

             2) AWS 와 IDC 간의 dependency 없게 

      • AWS(Amazon Linux) / IDC(Rocky 8) OS 종류가 많지 않아 Package Image 충분히 가능
      • Docker 도입시 DB 운영 안정성 보장못함

             3) Docker vs VM Golden Image

      • 자동화 Image 산정 도구

DockerVM Golden Image

가상화 방식 OS 수준 가상화 (컨테이너) 하드웨어 가상화 (하이퍼바이저)
커널 및 OS 호스트 OS 커널 공유 독립된 커널과 OS 포함
이미지 크기 및 성능 가벼움, 빠른 시작 (초 단위) 무거움, 부팅 시간 필요 (분 단위)
리소스 관리 및 격리 경량화된 격리, 커널 공유 완전한 격리, 독립된 커널 및 자원
배포 및 관리 레이어 기반 이미지, 빠르고 간편한 배포 크고 무거운 이미지, 배포 복잡
사용사례 경량화된 애플리케이션을 배포할떄
CI/CD 파이프라인에서 애플리케이션을 빠르개 배포하고 실행할때
완전한 OS 환경이 필요한 서비스
높은 보안 격리가 필요할 경우

 

    • Ansible 및 Terraform R&D 필요 여부
      •  자동화 배포 도구

'IAC' 카테고리의 다른 글

Ansible vs Terraform  (0) 2024.10.18

컨테이너로 실행될 뿐 EC2+EBS 리소스를 사용필요(당근 mongodb 운영참고)

장점
1. 생성,설치 빨리
2. 스케일 아웃 자동구성
3. 자동복구

단점
pod 재시작 
 -> router 형태
 -> operator 있어야함
 

  • 목적 : DB 모니터링 디테일 하게 ( 현재는 Grafana만)
  • 순서 :
    1. VM 발급
    2. Agent 설정
      • KEY 필요
    3. 타겟 DB 설정
-- datadog 계정 생성
CREATE USER datadog@'%' IDENTIFIED BY 'password';
ALTER USER datadog@'%' WITH MAX_USER_CONNECTIONS 5;
GRANT REPLICATION CLIENT ON *.* TO datadog@'%';
GRANT PROCESS ON *.* TO datadog@'%';
GRANT SELECT ON performance_schema.* TO datadog@'%';
 
-- db생성
CREATE SCHEMA IF NOT EXISTS datadog;
GRANT EXECUTE ON datadog.* TO datadog@'%';
GRANT CREATE TEMPORARY TABLES ON datadog.* TO datadog@'%';
 
-- 쿼리 수행 수집
DELIMITER $$
CREATE PROCEDURE datadog.enable_events_statements_consumers()
    SQL SECURITY DEFINER
BEGIN
    UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE NAME LIKE 'events_statements_%';
    UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE NAME = 'events_waits_current';
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE datadog.enable_events_statements_consumers TO datadog@'%';
 
 
-- 쿼리 실행계획 수집 프로시저 생성
DELIMITER $$
CREATE PROCEDURE datadog.explain_statement(IN QUERY TEXT)
    SQL SECURITY DEFINER
BEGIN
    SET @explain := CONCAT('EXPLAIN FORMAT=json ', QUERY);
    PREPARE stmt FROM @explain;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
 
-- 쿼리 실행계획 수집 프로시저 생성 (추적 DB)
DELIMITER $$
CREATE PROCEDURE xxx.explain_statement(IN QUERY TEXT)
    SQL SECURITY DEFINER
BEGIN
    SET @explain := CONCAT('EXPLAIN FORMAT=json ', QUERY);
    PREPARE stmt FROM @explain;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE books_cp.explain_statement TO datadog@'%';
 
FLUSH PRIVILEGES;

 

4. 연동 설정

init_config:
 
instances:
  - dbm: true
    host: IP
    port: 3306
    username: datadog
    password: 'passsword'
    tags :
      - 'service:xx'
      - 'evn:live'
      - 'team:DB'
      - 'type:ec2-mysql'
- dbm: true
    host: IP
    port: 3306
    username: datadog
    password: 'passsword'
    tags :
      - 'service:yyy'
      - 'evn:dev'
      - 'team:DB'
      - 'type:ec2-mysql'

 

5. Agent 재시작 & 오류 확인

-- 설정 후 재시작
systemctl restart datadog-agent
 
 
-- 오류 확인
datadog-agent status
  • 원인

      분포도에 따라 실행계획이 변하는 현상 발생

     user 의 개수가 단일이 아닌 복수개의 경우 reg_date 기준으로 실행계획 생성

  • 쿼리
select
        ifnull(acb.score, 0)
from
        tb_abc_log abc
where
        abc.user = #user
        and user.reg_date > DATE_SUB(NOW(), INTERVAL 1 DAY)
order by
        user.reg_date desc
 limit 1
  • 해결방법
    • 인덱스 힌트로 실행계획 고정

                    USE_INDEX(ix_abc_log_user)

select
        ifnull(acb.score, 0)
from
        tb_abc_log abc USE_INDEX(ix_abc_log_user)
where
        abc.user = #user
        and user.reg_date > DATE_SUB(NOW(), INTERVAL 1 DAY)
order by
        user.reg_date desc
 limit 1

'MySQL (Aurora) > DB Tuning' 카테고리의 다른 글

mysql 실행계획 시 유의점  (0) 2024.12.03
형 변환 튜닝  (2) 2024.10.02
  • 기능
    • mysql 8.0 이상 error_log filter 기능 추가 (문자열)

  https://dev.mysql.com/doc/refman/8.4/en/error-log-priority-based-filtering.html

  • log_error_suppression_list
    • error log 수집 시 해당 문자열 제외 수집 
[Warning] [MY-013360] [Server] Plugin sha256_password reported: ''sha256_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'
[Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead' (sql_authentication.cc:4314)

 

원인

mysql 8.0의 기본 인증 플러그인은 예전의 mysql_native_password가 아니라 caching_sha2_password이므로 해당 에레머세지가 발생
방법: 보안연결이나 RSA 연결로 인증 필요 다만 클라이언트 에서 컨트롤 필요하므로 에러 수정불가

 

  • 설정방법
    • 설치형 mysql
1) 파라미터
[mysqld]
log_error_verbosity=2     # error and warning messages only
log_error_suppression_list='ER_PARSER_TRACE,MY-010001,10002'
mysql> select @@log_error_suppression_list;
+------------------------------+
| @@log_error_suppression_list |
+------------------------------+
|                              |
+------------------------------+
1 row in set (0.00 sec)

2) 동적
mysql> set global log_error_suppression_list='MY-013360';
Query OK, 0 rows affected (0.01 sec)
mysql> select @@log_error_suppression_list;
+------------------------------+
| @@log_error_suppression_list |
+------------------------------+
| MY-013360                 |
+------------------------------+
  • Aurora

파라미터 변경

 

'MySQL (Aurora) > TECH' 카테고리의 다른 글

Mysql 성능테스트(jmeter)  (0) 2024.10.16
Mysql Gap Lock  (1) 2024.10.16
Aurora(Mysql) Version 별 Connector / Driver 설정  (1) 2024.09.13
  • 원인
    • mysql varchar와 int 조인시 형이 안맞아서 인덱스를 안타는 현상
  • 해결

1) 근본적인 해결

  표준화를 통한 테이블의 형 맞춤

2) 단기적인 해결

 인덱스를 타기위한 형변환을 통한 튜닝

 

  • 현상

  tb_apple 의 order_id(VARCHAR) 와 tb_pay 의 id(INT) 칼럼이 형이 틀려서 인덱스를 안타는 현상

  • 해결

SELECT * FROM 

FROM tb_voice voice
INNER JOIN tb_pay result ON voice.tid = result .id

LEFT JOIN adb.tb_apple apple ON apple.order_id = result.id

 

-> 

SELECT * FROM 

FROM tb_voice voice
INNER JOIN tb_pay result ON voice.tid = result .id

LEFT JOIN adb.tb_abc apple ON apple.order_id = CONVERT(result_info.id, CHAR)

'MySQL (Aurora) > DB Tuning' 카테고리의 다른 글

mysql 실행계획 시 유의점  (0) 2024.12.03
인덱스 힌트  (0) 2024.10.07

+ Recent posts