Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 해외주식 양도세 신고
- CSTS 폭포수 모델
- java.sql.SQLSyntaxErrorException
- 한국투자증권 해외주식 양도세
- Katalon Recorder 사용법
- katalon 사용법
- recursion example
- 톰캣 실시간 로그
- 재귀 예제
- katalon 자동화
- 홈택스 해외주식 양도세
- bfs 미로탐색 java
- katalon
- tomcat log
- 해외증권 양도세 한국투자증권
- 피보나치 예제
- 주식 양도세 신고방법
- 피보나치함수
- 피보나치함수 예제
- 테스트 자동화
- oracle group by
- js 자동완성
- 국세청 해외주식 양도세 신고방식
- 최대공약수 예제
- 재귀함수 예제
- git 연동
- javascript 자동완성
- katalon 비교
- 한국투자증권 양도세 신고
- katalon xpath
Archives
- Today
- Total
엄지월드
Redis 클러스터링 구성 sh 본문
총 3개의 Master와 3개의 Slave가 구성된다.
Redis의 conf 파일 내용이 같은데 각각의 폴더 마다 직접 들어가서 conf 파일을 만들기 번거로워서
sh 파일로 만들었다.
1. vi create_redis_cluster.sh 입력해서 아래 내용 입력
#!/bin/bash
# 스크립트가 실행되는 디렉터리를 가져옵니다.
# 이 스크립트가 /home/ec2-user/redis 에 있다고 가정합니다.
SCRIPT_DIR="$(dirname "$0")"
# --- 변수 설정 ---
# 클러스터를 구성할 포트 목록
PORTS="6380 6381 6382 6383 6384 6385"
# 설정 파일 템플릿 경로 (스크립트 디렉터리 내)
TEMPLATE_FILE="$SCRIPT_DIR/redis.conf.template"
#경로는 절대경로로 지정
CONFIG_BASE_DIR="/home/ec2-user/redis"
# Redis 접속 비밀번호 (템플릿에도 {REDIS_PASSWORD}로 동일하게 설정)
REDIS_PASSWORD="1234" # 설정 파일에 설정한 비밀번호와 동일해야 함
# Redis 서버 실행 파일 경로 (환경에 따라 다를 수 있음)
REDIS_SERVER_BIN="redis-server"
# Redis CLI 실행 파일 경로 (환경에 따라 다를 수 있음)
REDIS_CLI_BIN="redis-cli"
# 인스턴스 시작 시 대기 시간 (각 인스턴스 시작 후 짧은 대기)
STARTUP_DELAY=1
# 모든 인스턴스 시작 후 클러스터 생성 전 대기 시간
WAIT_BEFORE_CLUSTER_CREATE=30
# --- Step 0: Cleanup - 기존 인스턴스 종료 및 파일 삭제 ---
echo "--- Starting Cleanup Process ---"
for PORT in $PORTS; do
echo "Attempting to shut down potential Redis instance on port $PORT..."
# 해당 포트의 Redis에 연결하여 SHUTDOWN 명령 시도
# 연결 실패 시 (인스턴스가 실행 중이 아니면) 오류는 무시
$REDIS_CLI_BIN -p $PORT -a $REDIS_PASSWORD shutdown 2>/dev/null
# 백그라운드 실행으로 인한 완전 종료까지 잠시 대기
sleep 1
done
echo "--- Removing old cluster config and data files ---"
for PORT in $PORTS; do
#INSTANCE_DIR="$CONFIG_BASE_DIR/$PORT"
INSTANCE_DIR="/home/ec2-user/redis/$PORT"
echo "Cleaning directory: $INSTANCE_DIR"
# nodes-*.conf, dump.rdb, appendonly-*.aof 파일 삭제
# -f 옵션으로 파일이 없어도 에러 없이 진행
rm -f $INSTANCE_DIR/nodes-$PORT.conf
rm -f $INSTANCE_DIR/dump.rdb
rm -f $INSTANCE_DIR/appendonly-$PORT.aof
# rm -f $INSTANCE_DIR/*.rdb $INSTANCE_DIR/*.aof # 혹시 다른 이름의 RDB/AOF 파일이 있다면 이 줄 주석 해제
done
echo "--- Cleanup Process Finished ---"
# --- Step 1: 설정 파일 생성 및 개별 Redis 인스턴스 시작 ---
echo "--- Generating config files and starting Redis instances ---"
NODE_ADDRESSES="" # 클러스터 생성 명령어에 사용할 노드 주소 목록
for PORT in $PORTS; do
# 각 포트별 인스턴스 디렉터리 (CONFIG_BASE_DIR 아래에 생성)
INSTANCE_DIR="$CONFIG_BASE_DIR/$PORT"
mkdir -p $INSTANCE_DIR # 디렉터리가 없으면 생성
# 인스턴스별 고유 경로 및 파일명 설정
PID_FILE="$INSTANCE_DIR/redis_$PORT.pid"
LOG_FILE="$INSTANCE_DIR/redis_$PORT.log"
BIND_IP="0.0.0.0" # 스크립트 변수로 사용
AOF_FILENAME="appendonly-$PORT.aof" # appendfilename은 파일 이름만
CLUSTER_CONFIG_FILENAME="nodes-$PORT.conf"
WORKING_DIR="$INSTANCE_DIR" # dir 옵션 경로
# sed 명령어를 사용하여 템플릿 파일의 변수들을 치환
# -e 옵션으로 여러 치환 규칙 적용, 구분자를 | 로 사용하여 경로의 / 와 충돌 방지
sed -e "s|{PORT}|$PORT|g" \
-e "s|{PID_FILE}|$PID_FILE|g" \
-e "s|{LOG_FILE}|$LOG_FILE|g" \
-e "s|{BIND_IP}|$BIND_IP|g" \
-e "s|{CLUSTER_CONFIG_FILE}|$CLUSTER_CONFIG_FILENAME|g" \
-e "s|{AOF_FILE}|$AOF_FILENAME|g" \
-e "s|{WORKING_DIR}|$WORKING_DIR|g" \
-e "s|{REDIS_PASSWORD}|$REDIS_PASSWORD|g" \
$TEMPLATE_FILE > $INSTANCE_DIR/redis_$PORT.conf
echo "Starting Redis instance on port $PORT using config: $INSTANCE_DIR/redis_$PORT.conf"
# 생성된 설정 파일을 사용하여 Redis 서버 백그라운드 실행
$REDIS_SERVER_BIN $INSTANCE_DIR/redis_$PORT.conf &
# 백그라운드 실행을 위해 & 추가. 스크립트가 다음 인스턴스로 넘어갈 수 있게 함.
# 클러스터 생성 명령어에 사용할 노드 주소 추가
NODE_ADDRESSES="$NODE_ADDRESSES $BIND_IP:$PORT"
# 다음 인스턴스 시작 전 잠시 대기
sleep $STARTUP_DELAY
done
echo "--- All Redis instances started in background. Waiting for them to initialize... ---"
# 모든 인스턴스가 클러스터 버스를 통해 서로를 발견할 시간을 충분히 줌
sleep $WAIT_BEFORE_CLUSTER_CREATE
# --- Step 2: Redis 클러스터 생성 ---
echo "--- Creating the Redis Cluster ---"
# 클러스터 생성 명령어에 -a 옵션을 사용하여 비밀번호 명시
# --cluster-password 옵션 대신 -a 옵션을 --cluster 앞에 사용합니다.
CLUSTER_CREATE_CMD="$REDIS_CLI_BIN -a $REDIS_PASSWORD --cluster create $NODE_ADDRESSES --cluster-replicas 1"
echo "Executing: echo yes | $CLUSTER_CREATE_CMD"
# 클러스터 생성 명령어 실행 및 자동 승인
# echo yes | 를 사용하여 확인 프롬프트에 자동으로 'yes' 입력 (일부 버전 필요)
echo yes | $CLUSTER_CREATE_CMD
# 클러스터 생성 명령어 실행 결과 확인
if [ $? -ne 0 ]; then
echo "ERROR: Redis cluster creation failed. Check logs for details."
echo "Please check the logs of individual instances ($CONFIG_BASE_DIR/*/redis_*.log) for details."
exit 1
fi
echo "--- Redis Cluster creation initiated. ---"
# --- Step 3: 클러스터 상태 확인 ---
echo "--- Verifying Cluster Status (connecting to the first node) ---"
# 클러스터 모드로 접속하여 상태 확인 (-c 옵션 사용)
# -a 옵션으로 비밀번호 제공
FIRST_NODE_PORT=$(echo $PORTS | cut -d' ' -f1)
# 상태 확인 명령어도 비밀번호가 필요하므로 -a 옵션을 사용합니다.
echo "Verifying cluster info..."
$REDIS_CLI_BIN -c -p $FIRST_NODE_PORT -a $REDIS_PASSWORD cluster info
# 결과 확인 (선택 사항, 에러 시 메시지 출력)
if [ $? -ne 0 ]; then
echo "WARNING: Failed to connect to the cluster node $FIRST_NODE_PORT to get cluster info. Check password or network."
fi
echo "Verifying cluster nodes..."
$REDIS_CLI_BIN -c -p $FIRST_NODE_PORT -a $REDIS_PASSWORD cluster nodes
# 결과 확인 (선택 사항, 에러 시 메시지 출력)
if [ $? -ne 0 ]; then
echo "WARNING: Failed to connect to the cluster node $FIRST_NODE_PORT to get cluster nodes. Check password or network."
fi
echo "--- Script Finished ---"
echo "You can connect to the cluster using: $REDIS_CLI_BIN -c -p $FIRST_NODE_PORT -a $REDIS_PASSWORD"
2. 권한 부여
chmod +x create_redis_cluster.sh
3. 실행
./create_redis_cluster.sh
4. 결과



'Server&DevOps' 카테고리의 다른 글
| ubuntu 절전 모드 처리 (0) | 2025.09.14 |
|---|---|
| 웹서버 및 WAS 튜닝 예시 (1) | 2025.05.30 |
| Kafka 통신 순서 (0) | 2025.05.10 |
| Kafka 생성 환경설정 (0) | 2025.05.10 |
| NGINX HTTP/2 적용 (0) | 2025.03.18 |
Comments