En un artÃculo anterior ya explicamos como montar un Master-Slave de Redis bajo Linux, en esta ocasión lo haremos bajo FreeBSD, conceptualmente los pasos son los mismos tan solo cambian algunos detalles en cuanto a la instalación y la localización del fichero de configuración.
A modo de prueba montaré dos Jails sobre Iocage donde instalaré todo lo necesario, digo a modo de prueba porque deberÃamos de montar el Master y el Slave en servidores fÃsicos distintos e incluso si fuese posible en redes o data centers distintos para incrementar asà la robustez del sistema en caso de problemas.
+-----+---------+-------+--------------+---------------+
| JID | Â NAME Â | STATE | Â RELEASE Â Â | Â Â Â IP4 Â Â Â |
+=====+=========+=======+==============+===============+
| 14  | redis00 | up   | 12.2-RELEASE | 192.168.69.55 |
+-----+---------+-------+--------------+---------------+
| 12  | redis01 | up   | 12.2-RELEASE | 192.168.69.56 |
+-----+---------+-------+--------------+---------------+
Instalamos Redis en los dos servidores:
Bindeamos el servicio a todas las ips:
Habilitamos la autenticación:
Habilitamos el servicio:
Arrancamos el servicio:
Comprobamos que podamos acceder mediante redis-cli:
# Server
redis_version:5.0.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:521d1e24a8a777ac
redis_mode:standalone
os:FreeBSD 12.2-RELEASE-p4 amd64
arch_bits:64
multiplexing_api:kqueue
atomicvar_api:atomic-builtin
gcc_version:4.2.1
process_id:87069
run_id:b05eb0f543a393289abd0a5f166a2863c2620a2a
tcp_port:6379
uptime_in_seconds:45
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:6584244
executable:/usr/local/bin/redis-server
config_file:/usr/local/etc/redis.conf
# Clients
connected_clients:1
client_recent_max_input_buffer:4
client_recent_max_output_buffer:0
blocked_clients:0
# Memory
used_memory:1436628
used_memory_human:1.37M
used_memory_rss:1402800
used_memory_rss_human:1.34M
used_memory_peak:1436628
used_memory_peak_human:1.37M
used_memory_peak_perc:100.00%
used_memory_overhead:1435094
used_memory_startup:1385400
used_memory_dataset:1534
used_memory_dataset_perc:2.99%
allocator_allocated:1402800
allocator_active:1364912
allocator_resident:1364912
total_system_memory:0
total_system_memory_human:0B
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:0.97
allocator_frag_bytes:18446744073709513728
allocator_rss_ratio:1.00
allocator_rss_bytes:0
rss_overhead_ratio:1.03
rss_overhead_bytes:37888
mem_fragmentation_ratio:1.00
mem_fragmentation_bytes:0
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:libc
active_defrag_running:0
lazyfree_pending_objects:0
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1617196935
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:0
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
# Stats
total_connections_received:3
total_commands_processed:4
instantaneous_ops_per_sec:0
total_net_input_bytes:132
total_net_output_bytes:14794
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
# Replication
role:master
connected_slaves:0
master_replid:3b9f3843dde887b4a3c88897e8702698232075a5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
# CPU
used_cpu_sys:0.007278
used_cpu_user:0.011265
used_cpu_sys_children:0.000000
used_cpu_user_children:0.000000
# Cluster
cluster_enabled:0
# Keyspace
Ahora vamos a enganchar redis01 como slave de redis00.
Ejecutamos en redis01:
echo “masterauth PASSWORD” » /usr/local/etc/redis.conf
Reiniciamos en servicio:
Comprobamos en cada servidor que la topologÃa sea la correcta.
En redis00 veremos:
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.69.56,port=6379,state=online,offset=79226,lag=0
En redis01 veremos:
# Replication
role:slave
master_host:192.168.69.55
master_port:6379
master_link_status:up
Asignamos en cada servidor reglas de firewall para restringir el acceso a los redis:
$cmd 01114 allow all from CLIENT_IP to REDIS_SERVER_IP any in via $wanif
$cmd 01114 allow all from REDIS_SERVER_IP any to CLIENT_IP out via $wanif
$cmd 60000 deny log all from any to any
NOTA: Esto es solo un ejemplo con las reglas especÃficas de Redis, podemos consultar este artÃculo anterior donde se explica detalladamente como montar un firewall sobre IPFW.