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();
		
		
	}

좋은 웹페이지 즐겨찾기