docker 기반 Redis 집단의 주종 복제
3939 단어 중간부품
준비
docker 환경 (centos7 + docker 1.12.1)
redis 3.2.4 wget http://download.redis.io/releases/redis-3.2.4.tar.gz
172.17.0.2:6379 기본 172.17.0.3:6379 - 172.17.0.4:6379
문제점:
1 주종을 실현한 후 읽기와 쓰기를 분리하고 클라이언트 연결 코드는 어떻게 씁니까?
2 주종 전환 후 클라이언트 코드를 조정해야 합니까?
2 미러링
Dockerfile의 내용은 다음과 같습니다.
FROM centos:6.7
MAINTAINER loomz [email protected]
ENV REFRESHED_AT 2017-03-08
ENV REDIS_HOME /opt/redis/redis_default
ADD redis-3.2.4.tar.gz /opt/redis/
RUN ln -s /opt/redis/redis-3.2.4 $REDIS_HOME
RUN yum -y install gcc
WORKDIR $REDIS_HOME
RUN make && make install
EXPOSE 6379
ENTRYPOINT [ "/usr/local/bin/redis-server", "/etc/redis/redis.conf" ]
관련 명령:docker 명령 요약
세 용기 시동
세 개의 시작 스크립트와 구성 파일의 내용은 다음과 같습니다.
마스터 마스터
start.-6379.sh
#!/bin/bash
docker run -d -p 6379:6379 --restart always -h redis-6379 --name redis-6379 -v /home/loomz/dockerfiles/redis_3.2_cluster/redis_cluster/6379:/etc/redis/:ro redis:v3.2.4
redis.conf
port 6379
bind 172.17.0.2
daemonize no
pidfile /var/run/redis.pid
appendonly yes
slave에서
start-6380.sh
#!/bin/bash
docker run -d -p 6380:6379 --restart always -h redis-6380 --name redis-6380 -v /home/loomz/dockerfiles/redis_3.2_cluster/redis_cluster/6380:/etc/redis/:ro redis:v3.2.4
redis.conf
port 6379
bind 172.17.0.3
daemonize no
pidfile /var/run/redis.pid
appendonly yes
slaveof 172.17.0.2 6379
slave에서
start-6381.sh
#!/bin/bash
docker run -d -p 6381:6379 --restart always -h redis-6381 --name redis-6381 -v /home/loomz/dockerfiles/redis_3.2_cluster/redis_cluster/6381:/etc/redis/:ro redis:v3.2.4
redis.conf
port 6379
bind 172.17.0.4
daemonize no
pidfile /var/run/redis.pid
appendonly yes
slaveof 172.17.0.2 6379
클라이언트 명령으로 노드 보기
redis-cli > info replication
# Replication
role:slave
master_host:172.17.0.4
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1489327889
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
상기 방식은 주종을 실현하지만 주종이 끊기면 데이터베이스에서 주 데이터로 업그레이드하려면 수동으로 처리해야 하며 명령slaveofnoone를 사용하면 주 데이터베이스로 승급할 수 있다.
보초 사용 방법:
임의의 노드에서 추가 프로필sentinel을 사용합니다.conf, 내용은 다음과 같습니다.
sentinel monitor mymaster_loomz 172.17.0.2 6379 1
매개변수 설명:
mymaster_loomz 메인 데이터베이스 이름, 사용자 정의
172.17.0.2 기본 데이터베이스 주소
6379 기본 데이터베이스 포트
1초병 최저 통과표
sentinel 프로세스를 시작하려면 다음과 같이 하십시오.
/usr/local/bin/sentinel /etc/redis/sentinel.conf
물론 생산 환경 보초병도 집단을 이루어 단일 고장을 피하고 위의 방식에 따라 여러 개의 보초병을 가동하면 된다. 또는 각 노드마다 한 개의 보초병을 가동하면 된다.센티나 조심해.conf 마지막 매개 변수 "초병 최저 통과 표수"를 초병 총수의 반수를 초과하는 것으로 설정하면 됩니다. 예를 들어 N/2+1
4 클라이언트 연결 코드
public static void main(String[] args) {
JedisPoolConfig poolconfig = new JedisPoolConfig();
poolconfig.setMaxIdle(30);
poolconfig.setMaxTotal(1000);
Set sentinels = new HashSet();
sentinels.add("172.17.0.1:26379");
JedisSentinelPool jedisSentinelPool = new JedisSentinelPool("master_loomz",
sentinels, poolconfig, 3000, "redispass");
HostAndPort currentHostMaster = jedisSentinelPool.getCurrentHostMaster();
System.out.println("currentHostMaster : " + currentHostMaster.getHost() + " port: "
+ currentHostMaster.getPort());
Jedis resource = jedisSentinelPool.getResource();
resource.setDataSource(jedisSentinelPool);
String value = resource.get("aa");
System.out.println(value);
resource.close();
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
koa2 데이터api 중간부품 디자인 모델의 실현 방법모든 데이터베이스 읽기를 가정하면 httpapi 인터페이스 요청은 하나의 중간부품으로 중간부품을 플러그인으로 삼아 데이터를 얻을 위치를 삽입합니다. api.js db.js 직렬 연결 app.js 보기에는 매우 조화롭...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.