Redis HA篇 +哨兵搭建
发布日期:2021-06-29 12:02:37 浏览次数:2 分类:技术文章

本文共 8365 字,大约阅读时间需要 27 分钟。

说明:本文为面向Redis哨兵搭建的指导手册

标签:Redis哨兵、Redis高可用、Redis故障转移、Redis 4.0.2
注意:文中删去了不需要的多余部分,让初学者一目了然一学就会
温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留言或私信我进行修改优化


★ 前言

※ 该文档架构采用:单机1主2从3哨兵架构(相当于6个redis)
※ 系统信息:Centos 6.3 x86_64 4GB内存
※ 如果主从有密码,哨兵也需要密码才能去控制他们
※ 为了方便初学者学习了解redis本文简化了所有步骤
※ Redis全称“remote dictionary server”中文远程字典服务
※ Redis属于NoSql数据库中的key-value类型
※ Redis的哨兵机制是redis2.8开始支持,而集群模式是redis3.0开始支持。
※ Redis的sentinel系统用于管理多个redis服务器,该系统主要执行三个任务:监控、提醒、自动故障转移。
※ Redis的主为读写模式,从为只读模式;
※ Redis的更多参数介绍参考本人其他相关文档

★ 相关文章

★ 哨兵工作机制
自动监控并切换主从状态及主从的配置文件

★ 搭建哨兵前提条件
# 提前配置好主从环境,并拉起主从
# 需要开启3个会话,分别执行挂起
/soft/redis-4.0.2/src/redis-server /soft/redis-4.0.2/redis_6380.conf
/soft/redis-4.0.2/src/redis-server /soft/redis-4.0.2/redis_6381.conf
/soft/redis-4.0.2/src/redis-server /soft/redis-4.0.2/redis_6382.conf

★ 配置哨兵
※ 复制配置文件
cp /soft/redis-4.0.2/sentinel.conf    /soft/redis-4.0.2/sentinel_26380.conf
cp /soft/redis-4.0.2/sentinel.conf    /soft/redis-4.0.2/sentinel_26381.conf
cp /soft/redis-4.0.2/sentinel.conf    /soft/redis-4.0.2/sentinel_26382.conf

※ 修改配置文件(主)

# 相关文件位置:
/soft/redis-4.0.2/sentinel_26380.conf
# 修改哨兵端口:port
sed -i 's/^port 26379/port 26380/g' /soft/redis-4.0.2/sentinel_26380.conf
cat /soft/redis-4.0.2/sentinel_26380.conf |grep "^port 263"
# 配置主服务器
sed -i 's/sentinel monitor mymaster 127.0.0.1 6379 2/sentinel monitor mymaster 127.0.0.1 6380 2/g' /soft/redis-4.0.2/sentinel_26380.conf
cat /soft/redis-4.0.2/sentinel_26380.conf |grep "^sentinel monitor"

※ 修改配置文件(从A)

# 相关文件位置:
/soft/redis-4.0.2/sentinel_26381.conf
# 修改哨兵端口:port
sed -i 's/^port 26379/port 26381/g' /soft/redis-4.0.2/sentinel_26381.conf
cat /soft/redis-4.0.2/sentinel_26381.conf |grep "^port 263"
# 配置主服务器
sed -i 's/sentinel monitor mymaster 127.0.0.1 6379 2/sentinel monitor mymaster 127.0.0.1 6380 2/g' /soft/redis-4.0.2/sentinel_26381.conf
cat /soft/redis-4.0.2/sentinel_26381.conf |grep "^sentinel monitor"

※ 修改配置文件(从B)

# 相关文件位置:
/soft/redis-4.0.2/sentinel_26382.conf
# 修改哨兵端口:port
sed -i 's/^port 26379/port 26382/g' /soft/redis-4.0.2/sentinel_26382.conf
cat /soft/redis-4.0.2/sentinel_26382.conf |grep "^port 263"
# 配置主服务器
sed -i 's/sentinel monitor mymaster 127.0.0.1 6379 2/sentinel monitor mymaster 127.0.0.1 6380 2/g' /soft/redis-4.0.2/sentinel_26382.conf
cat /soft/redis-4.0.2/sentinel_26382.conf |grep "^sentinel monitor"

★ 启动所有哨兵
# 需要开启3个会话,分别执行挂起
/soft/redis-4.0.2/src/redis-sentinel /soft/redis-4.0.2/sentinel_26380.conf
/soft/redis-4.0.2/src/redis-sentinel /soft/redis-4.0.2/sentinel_26381.conf
/soft/redis-4.0.2/src/redis-sentinel /soft/redis-4.0.2/sentinel_26382.conf

★ 查看主从状态
echo "info replication" | /soft/redis-4.0.2/src/redis-cli -p 6380 |grep role
echo "info replication" | /soft/redis-4.0.2/src/redis-cli -p 6381 |grep role
echo "info replication" | /soft/redis-4.0.2/src/redis-cli -p 6382 |grep role

★ 查看状态详情
echo "info replication" | /soft/redis-4.0.2/src/redis-cli -p 6380
echo "info replication" | /soft/redis-4.0.2/src/redis-cli -p 6381
echo "info replication" | /soft/redis-4.0.2/src/redis-cli -p 6382
echo "info Sentinel" | /soft/redis-4.0.2/src/redis-cli -p 26380
echo "info Sentinel" | /soft/redis-4.0.2/src/redis-cli -p 26381
echo "info Sentinel" | /soft/redis-4.0.2/src/redis-cli -p 26382

★ 测试数据传输
# 插入/查看数据
echo "set zzt_01 'hello zzt'" | /soft/redis-4.0.2/src/redis-cli -p 6380
echo "get zzt_01" | /soft/redis-4.0.2/src/redis-cli -p 6380
echo "get zzt_01" | /soft/redis-4.0.2/src/redis-cli -p 6381
echo "get zzt_01" | /soft/redis-4.0.2/src/redis-cli -p 6382
# 清理数据
echo "del zzt_01" | /soft/redis-4.0.2/src/redis-cli -p 6380
echo "get zzt_01" | /soft/redis-4.0.2/src/redis-cli -p 6380

★ 测试从节点自动重启
该模式下,从节点重启后会自动加入主从,并且会自动同步主库数据

★ 测试主节点自动重启
哨兵会自动判断主节点状态,并重新选举主节点;
原主节点重启后会自动以从的身份加入主从
该模式的主从切换是自动的,所以一般推荐使用自动管理的哨兵模式

★ 测试某个哨兵实例自动重启
哨兵自动重启并不影响主从的自动选举和切换
哨兵自动重启后可以自动加入哨兵组
 

★ 案例

※ 主从信息[root@main redis-4.0.2]# /soft/redis-4.0.2/src/redis-cli -p 6380127.0.0.1:6380> info # Serverredis_version:4.0.2redis_git_sha1:00000000redis_git_dirty:0redis_build_id:cd424730de8d0575redis_mode:standaloneos:Linux 2.6.32-279.el6.x86_64 x86_64arch_bits:64multiplexing_api:epollatomicvar_api:sync-builtingcc_version:4.4.6process_id:42813run_id:54f9160f14949b6d2fa23b0e5c03db717ac7caa5tcp_port:6380uptime_in_seconds:2248uptime_in_days:0hz:10lru_clock:3696251executable:/soft/redis-4.0.2/src/redis-serverconfig_file:/soft/redis-4.0.2/redis_6380.conf# Clientsconnected_clients:7client_longest_output_list:0client_biggest_input_buf:0blocked_clients:0# Memoryused_memory:2074094used_memory_human:1.98Mused_memory_rss:2732032used_memory_rss_human:2.61Mused_memory_peak:2154072used_memory_peak_human:2.05Mused_memory_peak_perc:96.29%used_memory_overhead:2068937used_memory_startup:835755used_memory_dataset:5157used_memory_dataset_perc:0.42%total_system_memory:4004020224total_system_memory_human:3.73Gused_memory_lua:37888used_memory_lua_human:37.00Kmaxmemory:0maxmemory_human:0Bmaxmemory_policy:noevictionmem_fragmentation_ratio:1.32mem_allocator:libcactive_defrag_running:0lazyfree_pending_objects:0# Persistenceloading:0rdb_changes_since_last_save:0rdb_bgsave_in_progress:0rdb_last_save_time:1614306740rdb_last_bgsave_status:okrdb_last_bgsave_time_sec:0rdb_current_bgsave_time_sec:-1rdb_last_cow_size:204800aof_enabled:0aof_rewrite_in_progress:0aof_rewrite_scheduled:0aof_last_rewrite_time_sec:-1aof_current_rewrite_time_sec:-1aof_last_bgrewrite_status:okaof_last_write_status:okaof_last_cow_size:0# Statstotal_connections_received:13total_commands_processed:6346instantaneous_ops_per_sec:5total_net_input_bytes:260328total_net_output_bytes:805031instantaneous_input_kbps:0.27instantaneous_output_kbps:4.29rejected_connections:0sync_full:2sync_partial_ok:0sync_partial_err:2expired_keys:0evicted_keys:0keyspace_hits:1keyspace_misses:0pubsub_channels:1pubsub_patterns:0latest_fork_usec:183migrate_cached_sockets:0slave_expires_tracked_keys:0active_defrag_hits:0active_defrag_misses:0active_defrag_key_hits:0active_defrag_key_misses:0# Replicationrole:masterconnected_slaves:2slave0:ip=127.0.0.1,port=6381,state=online,offset=80670,lag=0slave1:ip=127.0.0.1,port=6382,state=online,offset=80537,lag=1master_replid:d38df8987f4ebac447df143c0da5bb48db2ace72master_replid2:0000000000000000000000000000000000000000master_repl_offset:80670second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:80670# CPUused_cpu_sys:2.79used_cpu_user:0.97used_cpu_sys_children:0.00used_cpu_user_children:0.00# Clustercluster_enabled:0# Keyspacedb0:keys=1,expires=0,avg_ttl=0※ 哨兵信息[root@main redis-4.0.2]# /soft/redis-4.0.2/src/redis-cli -p 26380127.0.0.1:26380> info# Serverredis_version:4.0.2redis_git_sha1:00000000redis_git_dirty:0redis_build_id:cd424730de8d0575redis_mode:sentinelos:Linux 2.6.32-279.el6.x86_64 x86_64arch_bits:64multiplexing_api:epollatomicvar_api:sync-builtingcc_version:4.4.6process_id:46908run_id:6c4bac04c26736cd49cdcaaa26738629c97f3693tcp_port:26380uptime_in_seconds:296uptime_in_days:0hz:17lru_clock:3696135executable:/soft/redis-4.0.2/src/redis-sentinelconfig_file:/soft/redis-4.0.2/sentinel_26380.conf# Clientsconnected_clients:3client_longest_output_list:0client_biggest_input_buf:0blocked_clients:0# CPUused_cpu_sys:0.72used_cpu_user:0.16used_cpu_sys_children:0.00used_cpu_user_children:0.00# Statstotal_connections_received:5total_commands_processed:818instantaneous_ops_per_sec:2total_net_input_bytes:43915total_net_output_bytes:5224instantaneous_input_kbps:0.12instantaneous_output_kbps:0.01rejected_connections:0sync_full:0sync_partial_ok:0sync_partial_err:0expired_keys:0evicted_keys:0keyspace_hits:0keyspace_misses:0pubsub_channels:0pubsub_patterns:0latest_fork_usec:0migrate_cached_sockets:0slave_expires_tracked_keys:0active_defrag_hits:0active_defrag_misses:0active_defrag_key_hits:0active_defrag_key_misses:0# Sentinelsentinel_masters:1sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0sentinel_simulate_failure_flags:0master0:name=mymaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3127.0.0.1:26380> ※ 插入/查看数据[root@main ~]# echo "set zzt_01 'hello zzt'" | /soft/redis-4.0.2/src/redis-cli -p 6380OK[root@main ~]# echo "get zzt_01" | /soft/redis-4.0.2/src/redis-cli -p 6380"hello zzt"[root@main ~]# echo "get zzt_01" | /soft/redis-4.0.2/src/redis-cli -p 6381"hello zzt"[root@main ~]# echo "get zzt_01" | /soft/redis-4.0.2/src/redis-cli -p 6382"hello zzt"

※ 如果您觉得文章写的还不错, 别忘了在文末给作者点个赞哦 ~

over

 

转载地址:https://blog.csdn.net/zzt_2009/article/details/114395391 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Redis HA篇 +集群搭建
下一篇:Redis HA篇 +主从搭建

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月21日 16时47分34秒