2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
이 기사는 k8s 환경에서 [의사] 독립형 모드 Redis 인스턴스 구축을 기반으로 합니다. 공유 스토리지의 IO 성능이 상대적으로 낮기 때문에 공유 스토리지는 데이터 백업에 사용되며, Redis 데이터는 호스트 경로 형태로 저장됩니다. 이는 Redis의 IO 성능을 향상시키는 데 도움이 됩니다. 독립형 및 고가용성 Redis를 구현하기 위한 마스터-슬레이브 형태의 Redis입니다.
K8s 버전 k8s-1.29.4 환경은 총 6개의 노드로 구성된 통신 컴퓨터실에 구축됩니다. 각 노드에는 /data/ 경로에 마운트된 비시스템 디스크 SSD 디스크가 있습니다. Alibaba Cloud NAS를 사용하고 전용선 대역폭이 500Mb인 전용선을 사용하는 NAS 공유 스토리지가 있습니다.
1. 마스터-슬레이브 모드에서 Redis를 설정합니다. 마스터 Redis의 데이터 읽기 및 쓰기는 로컬 SSD 디스크에 속하고 슬레이브 Redis의 데이터는 외부 공유 NAS 스토리지에 속합니다.
2. 그런 다음 Statefulset 구성을 생성하고 두 개의 컨테이너(한 개의 컨테이너는 기본 Redis로 배치)를 배치하고 이를 호스트 경로에 마운트한 다음 호스트 이름으로 디렉터리를 생성하고 rdb 파일을 저장합니다. 또 다른 컨테이너는 슬레이브 redis 역할을 하며 nas 경로를 마운트하여 호스트 이름으로 디렉터리를 생성하고 rdb 파일을 저장합니다.
3. Redis에서 저장되는 데이터 지속성 매개변수를 조정하고 데이터 다운로드 시간을 더 작은 매개변수로 조정하여 업데이트된 데이터가 가능한 한 빨리 rdb 파일에 저장되도록 합니다.
4. Pod가 예약되거나 다시 시작될 때마다 nas에 저장된 rdb 파일을 호스트 경로에 복사하고 redis를 시작합니다.
참고: 이는 마스터 Redis가 비즈니스 데이터의 고성능 처리를 달성할 수 있도록 수행되며 슬레이브 Redis는 데이터 지속성을 담당할 수 있습니다. 1. 마스터의 읽기 및 쓰기 데이터 IO가 너무 높은 경우. , 슬레이브 redis가 nas를 마운트하면 데이터 다운로드 시간이 길어집니다.
구성에는 마스터 Redis 구성 파일, 슬레이브 Redis 구성 파일, 실행 역할에 따라 다양한 작업을 수행하는 간단한 스크립트 등 세 가지 파일이 포함되어 있습니다.
redis-master:conf는 주요 Redis 구성 파일입니다. 메모리는 256M으로 구성되어 있으며 구성 포트는 6379, 구성 비밀번호는 redis#123, 저장 경로는 /data/redis입니다.
redis.conf: redis 구성 파일에서 메모리를 256M으로 구성하고, 포트를 6380으로 구성하고, 비밀번호를 redis#123으로 구성하고, 저장 경로는 /data/redis-2이며, 다음에서 동기화할 데이터를 구성합니다. 포트 6379로 설정하고 저장 시간을 60초 이내에 10개의 데이터 변경이 있을 경우 저장을 수행합니다.
run.sh: 주요 기능은 역할을 결정하고 호스트 이름을 기반으로 디렉터리를 생성한 다음 스토리지 디렉터리에 소프트 연결하는 것입니다. 이 단계는 주로 각 서비스의 Redis 데이터를 자체 디렉터리에 저장하는 것입니다. 새 Redis를 생성할 때 노드에서 디렉터리 충돌이 발생하지 않습니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: defaultapp-redis-standalone-config
namespace: default
labels:
appname: default-app
app: defaultapp-redis-standalone-config
data:
redis-master.conf: |
port 6379
maxmemory 256mb
requirepass redis#123
dir /data/redis
redis.conf: |
port 6380
maxmemory 256mb
requirepass redis#123
save 3600 1 300 5 60 10
dir /data/redis-2
replicaof 127.0.0.1 6379
masterauth redis#123
run.sh: |
#!/bin/sh
role=$1
hname=$(hostname)
if [ $role == "master" ];then
echo "run redis master"
ls /etc/redis/ -l
[ -d /home/redis/$hname ] || mkdir -p /home/redis/$hname
[ -d /data ] || mkdir /data
ln -s /home/redis/$hname /data/redis
if [ -f /home/redis-2/$hname/dump.rdb ];then
cp -vf /home/redis-2/$hname/dump.rdb /data/redis/
else
echo "[info] no bak dump.rdb"
fi
redis-server /etc/redis/redis-master.conf
else
echo "run redis slave"
ls /etc/redis/ -l
[ -d /home/redis-2/$hname ] || mkdir -p /home/redis-2/$hname
[ -d /data ] || mkdir /data
ln -s /home/redis-2/$hname /data/redis-2
redis-server /etc/redis/redis.conf
fi