>_Cluster CentOS 7.2 – Redis – Sentinel – 1.3

cluster-redis

Neste terceiro tutorial veremos a instalação do Redis e do Sentinel.

O que é Redis?

Redis (REmote DIctionary Server).Redis é um banco de dados NoSQL que trabalha da seguinte maneira:
chave -> valor
Seu código é escrito em C sob a licença BSD e funciona em praticamente todos sistemas POSIX, como Linux ou Mac OS X.
A chave, assim como seu valor podem ser quase qualquer coisa, como um Hash no Ruby ou um Map no Java. Sendo um jeito muito fácil de guardar dados como o cache do usuário, ou filas de tarefas.

Vantagens:

• Suporta dados em String e Intergers, Lists, Sets e Ordered Sets além de Hash Tables (que suportam apenas Strings e Intergers). Usa operações atômicas (uma alteração por vez), e suporta get/set, push/pop, add/remove, union, intersect, diffs e muito mais, incluindo opções de ordenação.

• O Redis é extremamente rápido, tanto para escrita como para leitura dos dados, graças ao fato de armazenar seus dados em memória. Apesar disso, o Redis permite que os dados sejam persistidos fisicamente caso desejado.

• O Redis é um servidor TCP, e seu funcionamento baseado em um modelo cliente-servidor é bastante simples, dessa forma, quando uma requisição é feita para o Redis, um comando é enviado ao servidor (Redis) pelo cliente, e este fica aguardando uma resposta do servidor através de uma conexão estabelecida via socket. Quando o servidor processa o comando, ele envia a resposta de volta ao cliente.

Desvantagens:

• Ele não é e não substitui um banco de dados relacional como o MySQL, Oracle, SQL Server, FireBird, PostgreSQL;
• Não é um banco de dados orientado a documentos como o MongoDB;
• Não é um banco de dados que você deveria usar para armazenar todos os seus dados;
• Não utiliza o protocolo HTTP.

Redis para Redis:

Redis-servidor: É o próprio Redis Server.
Redis-sentinel: É o executável do Redis Sentinel (monitoramento e failover).
Redis-cli: É o utilitário de interface da linha de comando.
Redis-benchmarke: Responsável pela verificação da performance do Redis.
Redis-check-aof e redis-check-dump: Ferramentas para verificar dados corrompidos.

Instalação do Redis e do Sentinel.

Obs: Para quem está acompanhando a configuração do ambiente Cluster para Docker, basta seguir os passos abaixo. Já para quem caiu de primeira neste tutorial, não há nenhum problema em executar em um ambiente novo ou diferente do que estou montando aqui no meu Lab.

Obs: Lembrando que toda configuração está sendo realizada no CentOS 7.2.

A instalação do Redis deve ser feita nos dois nós (ba-vm-www-01 e ba-vm-www-02).

Instalação:

Passo 1 – Instalação dos pacotes gcc e make.

# yum install wget gcc make -y

Passo 2 – Download do Redis 3.0.

# wget http://download.redis.io/releases/redis-3.0.7.tar.gz -P /opt
# cd /opt
# tar -xvf redis-3.0.7.tar.gz
# cd redis-3.0.7

Passo 3 – Compilando o Redis.

# make 
# make install

Ajustes necessários para o perfeito funcionamento do Redis e do Sentinel.

Overcommit_memory.

Define as condições que determinam se uma requisição de memória grande será aceita ou negada.

Existem três valores possíveis para este parâmetro:

0 — A configuração padrão. O kernel realiza o overcommit heurístico do kernel, manuseando isto através da estimativa da quantia de memória disponível e queda de requisições que sejam totalmente inválidas. Infelizmente, como a memória é alocada utilizando um heurístico ao invés de um algorítimo preciso, esta configuração pode as vezes permitir que a memória disponível no sistema seja sobrecarregada.

1 — O kernel não faz manuseio de overcommit de memória. Sob esta configuração, o potencial para sobrecarga de memória aumenta, como também o desempenho para tarefas intensivas de memória.

2 — O kernel nega requisições para memórias iguais ou maiores do que a quantia definida na Swap. O total disponível e a porcentagem da RAM física é especificada em overcommit_ratio. Esta configuração é a melhor se você quiser diminuir o risco de overcommit de memória.

Passo 4 – Ajustando o vm.overcommit_memory.

# vim /etc/sysctl.d/99-sysctl.conf
vm.overcommit_memory=1

Hugepage.

* Transparent Hugepage Support – Melhora o desempenho em tarefas que fazem uso intensivo de memória ( somente kernel 2.6.38 com o patch Andrea Arcangeli aplicado ).

NOTA: quando se habilita esta secção, vão aparecer duas sub-secções que têm obrigatoriamente de serem habilitadas Page migration e Transparent Hugepage Support sysfs defaults.

NOTA2: dentro de Transparent Hugepage Support é necessário também marcar madvise.

* madvise, é menos agressivo oferecendo por isso mesmo e desde logo mais garantias.
* always, é bastante agressivo e oferece por isso menos garantias.

Somaxconn.

A variável sysctl kern.ipc.somaxconn limita o tamanho da fila de escuta para aceitação de novas conexões TCP. O valor padrão de 128 que é tipicamente baixo para uma manipulação robusta de novas conexões em um ambiente de servidor web com alta carga.

Para tais ambientes o aumento deste valor para 1024 ou mais é recomendado. O serviço de daemon pode por si só limitar o tamanho da fila (por exemplo, sendmail(8), ou Apache) mas na maioria das vezes existirá uma diretiva em seus arquivos de configuração para ajustar o tamanho da fila. Filas de escuta grandes também podem fazer um bom trabalho evitando ataques de Negação de Serviço (DoS).

Passo 5 – Ajustando o hugepage e o somaxconn.

# vim /etc/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo 511 > /proc/sys/net/core/somaxconn

Passo 6 – Habilitando o arquivo /etc/rc.local para carregar as alterações no momento do boot.

# chmod +x /etc/rc.local

Passo 7 – Instalando o Redis.

# cd /opt/redis-3.0.7/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] 
Selecting default: 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] 
Selected default - /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       : /var/lib/redis/6379
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/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

Passo 8 – Aplicando o reboot em ambos os nós.

# reboot

Passo 9 – Testando o Redis em ambos os nós.

#  redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set nome evandro
OK
127.0.0.1:6379> get nome
"evandro"
127.0.0.1:6379>

Passo 10 – Criando a chamada de inicialização para o Sentinel.

# vim /usr/lib/systemd/system/redis-sentinel.service
[Unit]
Description=Redis Server

[Service]
Type=oneshot
ExecStart=/bin/bash /opt/redis-3.0.7/utils/redis-sentinel start
ExecStop=/bin/bash /opt/redis-3.0.7/utils/redis-sentinel stop
RemainAfterExit=yes


[Install]
WantedBy=multi-user.target

Passo 11 – Criando o script de inicialização do Sentinel.

# vim /opt/redis-3.0.7/utils/redis-sentinel
#!/bin/sh
# http://tutoriaisgnulinux.com

SENTINELPORT=26379
EXEC=/usr/local/bin/redis-sentinel
CLIEXEC=/usr/local/bin/redis-cli
LOG=/var/log/redis-sentinel.log
PIDFILE=/var/run/redis_${SENTINELPORT}.pid
CONF="/etc/redis/sentinel.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "exists, process is already running or crashed"
        else
                echo "Starting Sentinel server..."
                $EXEC $CONF > $LOG &
                pid=$(ps aux | grep -i redis-sentinel | grep -v grep | awk '{print $2}')
                echo $pid > $PIDFILE
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                rm -rf $PIDFILE  >> /dev/null 2>&1
                echo "does not exist, process is not running" 
        else
                echo "Stopping ..."
                pid=$(ps aux | grep -i redis-sentinel | grep -v grep | awk '{print $2}')
                rm -rf $PIDFILE  >> /dev/null 2>&1
                for i in $pid ; do kill -s SIGTERM $i ; exit 0 ; done
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac

Passo 12 – Aplicando a permissão de execução no script redis-sentinel.

# chmod +x /opt/redis-3.0.7/utils/redis-sentinel

Passo 13 – Copiando o arquivo sentinel.conf para o /etc/redis/.

# cp /opt/redis-3.0.7/sentinel.conf /etc/redis/

Passo 14 – Habilitando o redis-sentinel para iniciar no boot do Sistema Operacional.

# systemctl enable redis-sentinel
Created symlink from /etc/systemd/system/multi-user.target.wants/redis-sentinel.service to /usr/lib/systemd/system/redis-sentinel.service.

Passo 15 – Ajustando o script de inicialização do Redis.

Obs: Este ajuste se deve para quem pretende trabalhar com senha no Redis. Por padrão não vem configurado os parâmetros de senha no script default.

# vim /etc/init.d/redis_6379
PASS="senha-redis"
$CLIEXEC -a $PASS -p $REDISPORT shutdown

Passo 16 – Validando o restart, stop e start dos script de inicialização do Redis e Sentinel.

# systemctl restart redis_6379
# systemctl stop redis_6379
# systemctl start redis_6379
# systemctl restart redis-sentinel
# systemctl stop redis-sentinel
# systemctl start redis-sentinel

Passo 17 – Segundo Reboot em ambos os Nós (ba-vm-www-01 e ba-vm-www-02).

# reboot

Passo 18 – Acessando o Redis.

# redis-cli 
127.0.0.1:6379> ping
PONG

Passo 19 – Acessando o Sentinel e verificando as informações com o comando info.

# redis-cli  -p 26379
127.0.0.1:26379> ping
PONG
127.0.0.1:26379> info
# Server
redis_version:3.0.7
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:65b774fa17082cfd
redis_mode:sentinel
os:Linux 3.10.0-327.4.5.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:621
run_id:43545577552776c31d7c5206f7a89062bb91b767
tcp_port:26379
uptime_in_seconds:110
uptime_in_days:0
hz:11
lru_clock:12896264
config_file:/etc/redis/sentinel.conf

# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=0,sentinels=1

Um pouco dos parâmetros do Redis.

MaxMemory – Neste parametro é configurado o valor da memoria que será utilizada pelo Redis.

Políticas para o parâmetro MaxMemory.

noeviction: Quando o limite da memória for atingido, e o cliente executar um comando, poderá resultar/utilizar mais memória além do já definido.
allkeys-lru: Remove as chaves menos utilizada recentemente (LRU) em primeiro lugar, a fim de abrir espaço para os novos dados adicionados.
volatile-lru: Remove as chaves menos utilizadas recentemente (LRU) em primeiro, mas apenas chaves que já está em fase de expiração.
allkeys-random: Remove chaves aleatórias, a fim de abrir mais espaço para os novos dados.
volatile-random: Remove chaves aleatórias, a fim de abrir espaço para os novos dados adicionados, mas apenas chaves que já possui uma expiração definida.
volatile-ttl: A fim de criar espaço para os novos dados, remove apenas as chaves que já possuem expiração já definida, tentando então remover as chaves mais curtas.

Bind – Neste parametro é definido qual ou quais interfaces poderão atender o redis-server.

bind 192.168.1.100 10.0.0.1
bind 127.0.0.1

dir – Neste parâmetro é definido o local dos dumps/databases.

dir /var/lib/redis/6379

slaveof – Neste parâmetro é definido o servidor Master, caso trabalhe com Master/Slave.

slaveof  

requirepass – Neste parâmetro é definido a senha do servidor redis.

requirepass foobared

masterauth – Neste parâmetro é definido a senha do Master, caso trabalhe com Master/Slave.

Masterauth 

Pronto instalado com sucesso!

A Configuração do Redis Master/Slave e do Sentinel ficará para o próximo tutorial parte 1.4.

Fontes:
https://www.casadocodigo.com.br/pages/sumario-redis

Como baixar e instalar o banco de dados Redis


http://blog.concretesolutions.com.br/2013/01/redis-parte-1/

Redis – o que é e para que serve?


http://redis.io/topics/quickstart
http://redis.io/download

>_Cluster CentOS 7.2 – Redis – Sentinel – 1.3
Tagged on:     

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

%d blogueiros gostam disto: