일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 금융공학
- spring security
- 펜실베이니아
- flex하는게 아니었는데..
- ue5
- AT&T
- paper2d
- 최근증시
- spring message converters
- java
- @JsonView
- jdk17
- HRD
- JPA
- 증시
- mastering unreal engine
- 유학
- 어학연수
- UE4
- weblogic
- 필라델피아
- mysql
- kospi
- 월화수목금토익
- 학생비자
- spring
- 인물
- rollbackOnly
- 삼성 플렉스북
- 주식
- Today
- Total
HeBhy, since 1983.
Spring Session using Redis 5.0.10 in Spring Boot 2.x (with cluster) 본문
Spring Session using Redis 5.0.10 in Spring Boot 2.x (with cluster)
HeBhy 2018. 9. 18. 01:381. redis 설치 (CentOS 7)
(참조: https://redis.io/download)
$ cd /usr/local/src
$ wget https://download.redis.io/releases/redis-5.0.10.tar.gz
$ tar xvzf redis-5.0.10.tar.gz
$ cd redis-5.0.10
$ make && make install
$ cd utils
$ ./install_server.sh
* 버전업으로 인해 빌드에러가 나는경우.. 다음을 실행후 다시 install_server.sh 실행.
yum install centos-release-scl
yum install devtoolset-7-gcc*
scl enable devtoolset-7 bash
yum install tcl tk
make distclean && make install
-install_server.sh 실행 후 엔터... 계속 입력후 마지막 경로는 /usr/local/bin/redis-server 처럼 풀 경로+파일명을 적어준다.
-설정파일 수정: /etc/redis/6379.conf
> 보안상 protected-mode 가 기본인데 bind 주소'로'만 접속 허용된다. 서버(redis) 내부ip나 외부ip주소가 1.2.3.4 이면 conf 파일에서 'bind 1.2.3.4 127.0.0.1 ::1' 이런식으로 적어준다. 이 모드에서 패스워드는 필요없다.
*클러스터 오류때문에 반드시 127.0.0.1과 ::1이 마지막이어야 합니다~ local ip(v4 & v6)를 적지 않으면 무한 waiting이 생길 수 있습니다.
-수정 후 'systemctl redis_xxxx enable && systemctl redis_xxxx start' 해서 서비스 등록
-'./redis-cli -h 127.0.0.1 -p 포트번호' 입력해서 접속에러 안뜨면 성공. selinux 포트도 막혀있다면 open해줘야 함..(semanage port -l | grep redis 하면 기본 포트가 있을것이다.. 만약 7000포트를 쓴다면 17000,27000포트도 selinux에 추가해주자. 노드간 통신에 쓰인다. 마스터노드만 열어주면됨..)
-bind에서 ip 1.2.3.4로 추가해준경우, './redis-cli -h 1.2.3.4 -p 포트번호' 로도 해서 외부에서 접속되는지 확인.
-외부 접속 아이피 방화벽 설정: firewalld 필요.
$ firewall-cmd --zone=public --add-service=redis --permanent
$ vi /usr/lib/firewalld/services/redis.xml
> 포트번호가 변경되었다면 기존 포트번호(6379)를 변경된 포트번호로 수정
$ firewall-cmd --reload
2. Spring 설정 (Spring boot 2.x + maven)
(참조: https://docs.spring.io/spring-session/docs/current/reference/html5/#httpsession-redis)
-Spring maven 'pom.xml' 에 추가 (무난한 lettuce connection을 사용하기로 한다. 다른거 비추.)
1
2
3
4
5
6
7
8
9
|
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</dependency>
|
cs |
-application.properties에 추가
1
2
3
|
spring.session.store-type=REDIS
spring.redis.host=192.168.0.123
spring.redis.port=6379
|
cs |
-혹시 클러스터를 쓰게된다면.. 다음을 추가. IP:port는 마스터노드가 있는 host목록임..
spring.redis.cluster.nodes=127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381, ...
3. 클러스터 (센티넬 아님. 센티넬은 별도 설치)
일단, 3개 장비를 사용한다고 하면 각각 위와 같이 구성한다. 그리고 각 서버를 마스터로 한다고 하면, 레플리카(슬레이브)가 각 1개이상 있어야 하므로. 여기선 마스터2,마스터3(각 다른 서버)랑 슬레이브2,슬레이브3으로 서비스를 가동한다. spring boot에서 처리할때는 마스터노드만 입력하면 된다.. 마스터랑 슬레이브는 3개이상 필요하니 총 6개 이상 노드가 필요함.. 그 이하는 생성이 안됨..
예로, 서버1에서 6379 port로 했다면 위 참고해서 6479포트도 서비스를 설치해준다. 서버2, 3도 마찬가지다.
그리고 4개의 서비스에 대해 /etc/redis/포트번호.conf 에서 다음을 주석 해제하거나 수정해준다
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
appendonly yes
설정 후 반드시 서비스를 다시 시작해준다. (systemctl restart redis_xxxx)
그 전에, 방화벽에서 마스터노드 포트를 다 열어준다.(노드당 2개포트=> 즉, 6379이면 16379까지.) 이왕이면 redis자체 bind 기능도 있지만 trusted-zone에 서로 ip 추가해서 등록되지 않은 ip 접근 자체를 차단하자.
그리고 클러스터 생성하기.. 뒤에 레플리카는 기존 slave다.. 마스터1당 레플리카1로 설정하면 자동 master-slave로 구성됨..
$ redis-cli --cluster create 127.0.0.1:6379 192.168.0.2:6379 192.168.0.3:6379 127.0.0.1:6479 192.168.0.2:6479 192.168.0.3:6479 --cluster-replicas 1
이러면 포트번호,ip등으로 알아서 마스터/레플리카를 나눠준다. 그대로 진행할거면 yes. 만일, 마스터랑 레플리카랑 같은 ip로 묶이면 경고를 띄운다. 즉, 기본적으로 마스터/레플리카가 같은서버에 있다가 host가 죽어버리면 redis가 무응답상태가 되기때문에 다른 호스트로 분리하는듯 하니 자동으로 해준대로 진행하시길..
"yes"를 치면 클러스터 조인을 기다린다. 혹시라도 실패하면 각 서버에서 아래를 한번씩 실행해주면 됨.. flushall은 혹시 모르니 해주는것임.. 멈춰있으면 위에 bind 설정을 다시 참고.(127.0.0.1이 젤 마지막에)
$ redis-cli --cluster call 127.0.0.1:포트번호 flushall
$ redis-cli --cluster call 127.0.0.1:포트번호 cluster reset
설정 완료 후 상태 체크는 다음 명령으로.
$ redis-cli --cluster check 127.0.0.1:포트번호
끝..
'Dev > Web' 카테고리의 다른 글
JPA entity mapping (@OneToOne Lazy Loading) (0) | 2018.10.11 |
---|---|
Spring JDBC (jpa & mybatis) setup in Spring Boot 2.x (with lombok, mariaDB, maven) (0) | 2018.09.18 |
CSS한줄로 a태그의 링크 포커스를 없애봅시다! (onfocus=blur 대신) (1) | 2010.12.17 |
Caching Solution for JAVA (WAS) (0) | 2010.05.25 |
Resin 4.0.6 is released. (0) | 2010.05.21 |