상황 아래와 같은 구조에서 레디스 Failover 테스트 중에 failover-abort-no-good-slave 오류가 발생했습니다. 원인 레디스 접속을 위해서는 암호를 입력하도록 설정된 상태입니다. 그러나 센티넬에서는 레디스 인증관련 암호설정이 없었습니다. 레디스 conf 파일 requirepass "P@ssword" masterauth "P@ssword" 센티넬 conf 파일 # sentinel auth-pass TEST P@ssword 시나리오 - 해결방법 센티넬 conf 파일에 auth-pass 설정이 안됨 센티넬에서 레디스 TEST 인스턴스의 암호가 없기 때문에 접속하여 replication 정보를 얻어올 수 없었고, failover-abort-no-good-slave 로그가 기록되었습니다. ..
Database
상황 2.8.4 버전에서 2.8.24 버전으로 업그레이드 후 발생하였습니다. 구조는 다음과 같습니다. 테스트 환경에서 재연에 필요한 인스턴스만 구성하였습니다. 업그레이드 작업 방법 단계 작업내용 1 Sentinel 인스턴스 다운 2 Redis Slave 인스턴스 다운 3 Redis Master 인스턴스 다운 4 redis / sentinel 바이너리 2.8.24 버전으로 교체 5 Redis Master 인스턴스 구동 6 Redis Slave 인스턴스 구동 7 Sentinel 인스턴스 구동 8 Sentinel 페일오버 테스트 진행 (오류 발생) 원인 Redis conf 파일에는 rename-command 의 옵션이 있었습니다. 이 옵션이 있는 경우, failover 시 아래와 같은 오류가 발생하는 것으로 ..
Auto Increment 컬럼이란 자동 증가 값을 가지는 컬럼으로 값을 직접 대입할 수 없습니다. 중간에 값을 삭제한다고 해서, 삭제된 값을 재사용 하지 않으며레코드가 적재될 때마다 1씩 증가하게 됩니다. Auto Increment 초기화 방법 1. Truncate Truncate 를 하면 Auto Increment 값이 초기화가 됩니다. 12345678910111213141516171819202122232425262728293031323334CREATE TABLE t1 ( id INT(11) NOT NULL AUTO_INCREMENT, t1_text VARCHAR(50), PRIMARY KEY(id)) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4; INSERT INTO t..
상황 특정 서버에서 DUMP 한 아래 프로시저를 다른 서버에 반영하려고 합니다. 1234567CREATE DEFINER=test@localhost PROCEDURE TEST()BEGIN set @s=CONCAT('truncate table test', DATE_FORMAT(NOW(), '%c') % 3); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;ENDColored by Color Scriptercs 이 때 오류가 발생했습니다. Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version ..
%cpu레디스는 인스턴스별로 하나의 CPU 를 사용하고, 할당된 CPU 사용량을 나타냅니다. aof_rewrite_in_progress현재 AOF 파일을 저장중이면 1, 아니면 0 입니다. aof_rewrite_scheduledAOF 파일을 저장하는 스케줄이 설정되어 있으면 1, 아니면 0 입니다. blocked_clientsBLPOP, BRPOP, BRPOPLPUSH, WAIT 명령으로 대기중인 클라이언트 수를 나타냅니다. client_biggest_input_buf현재 연결된 클라이언트 중 가장 큰 입력 버퍼 값을 나타냅니다. client_longest_outpu_list현재 연결된 클라이언트 중 가장 긴 출력 값을 나타냅니다. commands_processed초당 처리되는 명령어 수를 나타냅니다. ..
SQL Server 버전이 EOS 되면서 버전 업그레이드가 필요한 상황이 되었고,버전 업그레이드 겸 DB Migration (이전작업)을 진행하면서 체크했던 리스트를 정리해 보았습니다. SQL Server 기준으로 작성되어 있고아래에서 작성한 AS-IS 와 TO-BE 는 DB 서버를 의미합니다. 아! 참고로 이전작업을 진행하면서 발생하는 이슈는 연관부서에 바로바로 공유될 수 있도록 해줍시다. 이전 작업 계획 시 예상 일정 수립1. 연관 부서 확인2. 이전할 DB 목록 확인에 필요한 일정 - 하나의 SQL Server 내에 다수의 Database 가 있을 수 있고, 사용하지 않는 DB 는 이전 대상에서 제외할 수 있음3. 호환성 체크 및 수정작업에 필요한 일정4. DB 이관 작업 시 사용할 스크립트 작성에..
로그인 계정이란 외부에서 DBMS 로 접속하기 위한 하나의 인증(?) 과정을 의미합니다. 로그인 계정마다 권한을 다르게 줄 수 있기 때문에,관리자는 여러 계정을 생성하고 알맞은 권한을 부여하여 공격으로부터 방어할 수 있습니다. 문제는 이렇게 생성된 계정도 오랜시간이 지나고 정책이 바뀌면서 사용되지 않을 수 있게 된다는 것입니다. 최고의 방법은 사용하지 않는채로 두는 방법이지만,이런 계정도 너무 오래 방치하면 위험이 따르기 때문에 정리가 필요한 상황이 오게됩니다. 로그인 계정을 삭제할 때 고려할 점 1. 해당 로그인 계정을 사용하는 클라이언트는 없는지?백트레이스로 로그인 계정을 수집하거나, 혹은 현재 접속하는 세션이 없는지 확인해 봅니다. 1SELECT * FROM sys.dm_exec_sessions;c..
마스터와 슬레이브가 구동되어 있을 때 Failover 하는 방법cluster failover 명령어 사용복제노드에서 cluster failover 명령어를 사용하여 Failover 를 진행할 수 있습니다. ( Failback 도 동일한 개념입니다. ) 123456789101112131415161718127.0.0.1:7000> cluster nodesa8248c454007d610685bba8e805c5a6004867d15 127.0.0.1:7001@17001 slave 869859e396c881b3c26f2a386c1495235225b57b 0 1586026738000 9 connected869859e396c881b3c26f2a386c1495235225b57b 127.0.0.1:7000@17000 mys..
슬롯이란클러스터 키를 해시함수로 적용하여 나온 값을 슬롯에 매핑하여 저장할 수 있게 해주는 기능입니다.해시함수로 적용하여 나온 값에 매핑되는 슬롯이 없으면 데이터가 저장될 수 없습니다. 따라서 슬롯이 정상적인지 확인을 할 수 있어야 합니다. 오픈되어 있는 슬롯, 없는 슬롯을 확인하는 방법check 명령어를 통해서 확인할 수 있습니다.클러스터로 묶인 노드 중 한곳에 접속해서 확인할 수 있습니다. 12345678910111213141516171819202122$ redis-cli --cluster check 127.0.0.1:7000127.0.0.1:7000 (869859e3...) -> 2 keys | 16383 slots | 1 slaves.127.0.0.1:8000 (dcae2685...) -> 0 k..
노드 제거 방법Redis 인터렉티브에서 forget 명령어를 수행하거나redis-cli 명령어에서 del-node 옵션을 부여하여 노드를 제거할 수 있습니다. 클러스터 마스터 노드 제거 방법먼저 2가지 조건을 만족해야 합니다. 슬롯이 비워져 있어야 합니다.마스터 노드에 슬롯이 할당되어 있다면, 먼저 슬롯을 비워주어야 합니다.슬롯을 비우는 방법(다른 노드로 변경하는 방법)은 아래 URL 을 참고해 주세요.https://mozi.tistory.com/384 삭제할 마스터 노드의 복제 노드가 없어야 합니다.노드를 삭제할 때는 다른 모든 노드로부터 forget 명령어를 수행하여야 하는데,삭제할 마스터의 복제노드에서 forget 명령어를 수행할 수 없기 때문에 클러스터는 계속 유지되어 있습니다. 8000 마스터 ..