1. 설치 배포판
- redis 6.2.6 + CentOS7 x86_64
2. 기본 패키지 설치
> yum install gcc gcc-c++ tcl
3. sysctl.conf 수정
3.1 Memory 설정
메모리 사용량이 허용량을 초과할 경우, overcommit을 처리하는 방식 결정하는 값을 "항상"으로 변경한다. 기본 값은 "0"이다.
0 : 커널 기본값, Heuristic 하게 Overcommit을 허용
(Page Cache + Swap Memory + Slab Reclaimable 값이 요청한 메모리 수 보다 클 경우 허용)
1 : 항상 Overcommit을 허용
2 : 제한적 Overcommit 허용
$ sudo sysctl vm.overcommit_memory=1
# or
$ sudo echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
# 확인
$ sudo sysctl -a | grep vm.overcommit
...
vm.overcommit_memory = 1
...
설정하지 않으면 Redis 실행 시 아래와 같은 경고가 표시된다.
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
3.2 TCP Backlog 설정
서버 소켓에 Accept를 대기하는 소켓 개수 파라미터를 변경해 준다. 기본 Accept limit은 128이다. 1024로 변경해 준다. (최대 65535)
$ sudo sysctl -w net.core.somaxconn=1024
# or
$ sudo echo "net.core.somaxconn=1024" >> /etc/sysctl.conf
# 확인
$ sudo sysctl -a | grep somaxconn
net.core.somaxconn = 1024
이 역시 변경하지 않으면 Redis 실행 시 경고가 표시된다.
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
3.3 THP 설정
THP(Transparent Huge Pages) 기능이 Enable 되어 있는 경우 Redis에서는 이를 Disable 시킬 것을 권장한다. 재부팅 시 설정을 변경하기 위해 /etc/rc.local 에도 명령어를 추가해 준다.
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# vi /etc/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled # <- rc.local 파일에 추가
적용 확인은 아래 명령어를 실행해서, AnonHugePages : 0 이면 정상이다.
$ cat /proc/meminfo | grep AnonHugePages
AnonHugePages: 0 kB
이 역시도 Disable 처리하지 않으면 아래와 같은 경고가 발생된다.
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc
4. redis 다운로드
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
5. redis 설치
tar zxvf redis-6.2.6.tar.gz
make
make install
# 바이너리 경로 : /usr/local/bin/
6. redis 초기 구성
- 제공하는 스크립트(utils/install_server.sh )를 실행하여 초기 구성할 수 있다. (추후 변경 가능)
- 바인딩 할 포트, config file, log path 등
$ utils/install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/8301.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
만약 아래와 같은 오류가 발생한다면
[utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
This systems seems to use systemd.
Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!
install_server.sh 파일을 아래와 같이 주석처리 해 준다.
#bail if this system is managed by systemd
#_pid_1_exe="$(readlink -f /proc/1/exe)"
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
# echo "This systems seems to use systemd."
# echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
# exit 1
#fi
7. systemd 등록
파일 복사
cp -arf utils/systemd-redis_server.service /usr/lib/systemd/system/redis-server.service
서비스 파일 수정
[Unit]
Description=Redis data structure server
Documentation=https://redis.io/documentation
Wants=network-online.target
After=network-online.target
[Service]
Environment="CONFFILE=/etc/redis/6379.conf"
EnvironmentFile=-/etc/sysconfig/redis
Type=forking
Restart=on-failure
PIDFile=/var/run/redis_6379.pid
KillMode=control-group
ExecStart=/usr/local/bin/redis-server $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
$ systemctl restart redis-server
$ ps aux | grep redis
root 15189 0.0 0.0 145416 7524 ? Ssl 15:55 0:00 /usr/local/bin/redis-server 127.0.0.1:6379
...
'시스템 > REDIS' 카테고리의 다른 글
[REDIS] Sentinel + Haproxy + Keepalived를 이용한 Redis HA LoadBalance 구축 (1) (0) | 2022.05.11 |
---|---|
[REDIS] 메모리 단편화(memory fragmentation) 해소 (0) | 2022.05.11 |
[REDIS] AOF & RDB (0) | 2022.05.10 |
[REDIS] Config 설정 (0) | 2022.05.10 |
[REDIS] 기본 명령어 (0) | 2022.05.10 |