redis数据库,redis部署,redis主从复制,redis高可用,redis集群 目录redis部署进入源码目录编译进入工具目录预处理安装脚本修改配置允许外网访问再次验证监听状态redis主从复制server1 将 Redis 程序、源码目录远程同步到 server3server2server3 部署 Redis 实例server3 修改配置文件配置为从库重启从节点 Redis 使配置生效主从同步功能测试redis高可用复制默认配置文件编辑 sentinel.conf 配置分发配置文件至其余节点三台服务器启动哨兵服务故障模拟测试关闭原始主节点日志事件拆解旧主节点重新上线验证查看集群状态验证redis集群redis cluster创建 Redis 集群分配槽位 主从映射校验集群完整状态连接集群测试必须携带 -c 集群模式故障模拟主节点宕机自动故障转移验证数据持久可用添加集群节点添加30007节点添加30008slave节点迁移哈希槽redis部署解压源码包tar zxf redis-6.2.4.tar.gz进入源码目录编译cd redis-6.2.4/ make make installmake编译源代码 make install将 redis-server、redis-cli 等二进制程序安装到/usr/local/bin进入工具目录预处理安装脚本cd utils/ vim install_server.sh操作注释脚本内指定版本判断相关报错代码适配新版系统防止脚本异常终止执行一键服务安装脚本./install_server.sh交互选项全部回车使用默认配置端口6379配置文件路径/etc/redis/6379.conf日志文件/var/log/redis_6379.log数据持久化目录/var/lib/redis/6379程序路径/usr/local/bin/redis-server确认信息无误回车继续安装。验证监听地址netstat -antlp|grep :6379初始状态127.0.0.1:6379只能本机连接外部无法访问修改配置允许外网访问vim /etc/redis/6379.conf修改 bind 配置bind *作用监听服务器所有网卡地址支持其他主机远程连接 redis重启 Redis 服务生效配置/etc/init.d/redis_6379 restart再次验证监听状态netstat -antlp|grep :6379成功结果0.0.0.0:6379代表所有网段均可访问 6379 端口redis主从复制server1 将 Redis 程序、源码目录远程同步到 server3server2# 进入安装目录同步redis所有二进制命令 cd /usr/local/bin/ rsync -a redis-* server3:/usr/local/bin/ # 同步完整redis源码目录保留utils安装脚本 rsync -a redis-6.2.4 server3:server3 部署 Redis 实例验证同步过来的程序文件cd /usr/local/bin/ ls # 确认存在 redis-server redis-cli redis-benchmark 等程序进入源码工具目录cd redis-6.2.4/utils/执行一键安装脚本./install_server.sh交互选项全部回车使用默认配置端口6379配置文件/etc/redis/6379.conf日志文件/var/log/redis_6379.log数据目录/var/lib/redis/6379程序路径/usr/local/bin/redis-server 确认信息回车自动创建服务、设置开机自启并启动 Redis。server3 修改配置文件配置为从库vim /etc/redis/6379.conf写入两项配置bind * replicaof 192.168.239.132 6379replicaof 参数指定主节点 IP 与端口重启从节点 Redis 使配置生效/etc/init.d/redis_6379 restart主从同步功能测试server1主节点写入测试数据redis-cli 127.0.0.1:6379 set name westosserver3从节点读取数据验证同步redis-cli 127.0.0.1:6379 get name # 返回 westos 代表主从复制正常redis高可用实验拓扑server1初始 Master 192.168.239.132:6379server2、server3Redis 从节点 三台机器同时部署 端口 26379前提已完成 Redis 主从复制部署一主多从复制默认配置文件# server1执行 cd redis-6.2.4 cp sentinel.conf /etc/redis/ cd /etc/redis/编辑 sentinel.conf 配置vim sentinel.conf核心配置内容port 26379 daemonize no pidfile /var/run/redis-sentinel.pid logfile dir /tmp # 监控主节点名称、主IP、端口quorum2至少2个哨兵判定故障才启动转移 sentinel monitor mymaster 192.168.239.132 6379 2 # 10000毫秒10s无响应哨兵主观判定节点下线 sentinel down-after-milliseconds mymaster 10000 acllog-max-len 128 # 故障转移时最多1个从节点同时同步新主 sentinel parallel-syncs mymaster 1 # 故障转移超时时间180秒 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes SENTINEL resolve-hostnames no SENTINEL announce-hostnames no分发配置文件至其余节点# server1执行 scp sentinel.conf server2:/etc/redis/ scp sentinel.conf server3:/etc/redis/配置文件所有节点内容一致无需修改三台服务器启动哨兵服务# server1 redis-sentinel /etc/redis/sentinel.conf # server2 redis-sentinel /etc/redis/sentinel.conf # server3 redis-sentinel /etc/redis/sentinel.conf故障模拟测试关闭原始主节点# server1执行 redis-cli shutdown持续检测主节点状态满足 quorum 条件后触发故障转移哨兵集群投票选出 leader 哨兵自动挑选健康从节点晋升为新 Master剩余从节点重新指向新主进行同步日志事件拆解主观下线 → 客观下线# sdown master mymaster 192.168.239.132 6379 # odown master mymaster 192.168.239.132 #quorum 2/2sdown当前主观判定主节点失联odown超过 quorum 数量均判定失联标记客观下线正式启动故障转移投票选举 Leader故障转移执行者# vote-for-leader 2c892f3d983ae336bb91a10081bd293a9cb97ceb 1 # #elected-leader master mymaster 192.168.239.132 6379集群投票选出一个作为 Leader执行后续切换流程。挑选新主库提升从节点# selected-slave slave 192.168.239.134:6379 # promoted-slave slave 192.168.239.134:6379按照优先级、复制偏移量、ID 规则筛选选择192.168.239.134晋升为新 Master。修改晋升节点配置取消 replicaof执行slaveof no one将 134 脱离原主独立成为主节点。通知其余从节点切换新主# slave-reconf-sent slave 192.168.239.133 # slave-reconf-inprog slave 192.168.239.133 # slave-reconf-done slave 192.168.239.133剩余从节点133断开旧主开始复制新主134。故障转移完成集群拓扑更新# #failover-end master mymaster 192.168.239.132 6379 # #switch-master mymaster 192.168.239.132 6379 192.168.239.134 6379故障转移成功新集群拓扑新 Master192.168.239.134:6379Slave192.168.239.133:6379旧主节点重新上线验证# server1重启redis /etc/init.d/redis_6379 start原 Master 启动后会自动将其调整为新主的从节点加入集群继续同步数据。查看集群状态验证redis-cli info replication旧 master 服务器server1重启Redis 进程启动成功通信恢复清除故障标记此时 132 角色为 slave持续同步新主 134 的数据。master_host:192.168.239.134server1变为从节点server3变为主节点redis集群redis cluster架构组成最小规模●3 个主节点负责 16384 个槽位的完整分配确保数据不遗漏并处理各自槽位的读写请求。●3 个从节点每个主节点对应 1 个从节点用于主节点故障时的自动切换高可用保障。创建 Redis 集群[rootserver1 redis-6.2.4]# cd utils/[rootserver1 utils]# cd create-cluster/[rootserver1 create-cluster]# ./create-cluster start分配槽位 主从映射[rootserver1 create-cluster]# ./create-cluster create3 台主节点 Master127.0.0.1:30001 槽位0 - 5460127.0.0.1:30002 槽位5461 - 10922127.0.0.1:30003 槽位10923 - 163833 台从节点 Slave副本30004 → 跟随主节点 3000230005 → 跟随主节点 3000330006 → 跟随主节点 30001交互提示输入yes确认集群配置执行集群校验输出[OK] All 16384 slots covered.代表集群创建成功校验集群完整状态redis-cli --cluster check 127.0.0.1:30001作用检查节点信息、槽位分配、主从关系、槽是否全覆盖。连接集群测试必须携带 -c 集群模式-c开启集群自动重定向key 不在当前节点时自动跳转对应节点连接 30004从节点执行set name wxh127.0.0.1:30004 set name wxh - Redirected to slot [5798] located at 127.0.0.1:30002 OKRedis 集群规则写入只能在 Master 主节点执行从节点不接受写请求计算 keyname的哈希值 → 归属5798 哈希槽5798 槽分配在主节点30002加上参数-c客户端收到重定向指令自动跳转连接 30002 完成写入数据最终保存在主节点127.0.0.1:30002随后自动同步给它对应的从节点。后续测试分别连接 30003、30006 读取 key127.0.0.1:30003 get name - Redirected to slot [5798] located at 127.0.0.1:30002 wxh客户端当前连接节点30003 / 30006不持有 5798 槽-c参数触发自动重定向客户端自动切换到 30002 获取数据故障模拟主节点宕机自动故障转移关闭主节点 30002redis-cli -c -p 30002 shutdown重启所有 redis 实例./create-cluster start集群检测主节点下线自动提升对应从节点30004升级为新 master。原先下线的 30002 启动后自动变为新主节点 (30004) 的从节点。验证数据持久可用redis-cli -c -p 30001 get name # 返回 wxh宕机重启后数据正常读取验证集群高可用特性。添加集群节点再启动两个redis实例[rootserver1 create-cluster]# vim create-cluster[rootserver1 create-cluster]# ./create-cluster start添加30007节点[rootserver1 create-cluster]# redis-cli --cluster add-node 127.0.0.1:30007 127.0.0.1:30001新添加的节点没有hash槽角色时是master添加30008slave节点[rootserver1 create-cluster]# redis-cli --cluster add-node 127.0.0.1:30008 127.0.0.1:30001 --cluster-slave --cluster-master-id87648d4cf8860dbdf78149b61d937d9c6ebc140aUnrecognized option or bad number of args for: --cluster-master-id87648d4cf8860dbdf78149b61d937d9c6ebc140a30007节点的编码添加成功30007是主master30008是从(salve)迁移哈希槽执行 reshard 分片命令redis-cli --cluster reshard 127.0.0.1:30001参数配置需要迁移槽数量3000接收节点 ID87648d4cf886dbdf78149b61d937d9c6ebc140a30007 新主节点源节点输入 all从全部 3 个旧主节点均匀抽调 3000 个槽How many slots do you want to move (from 1 to 16384)?输入需要迁移的槽总数示例3000What is the receiving node ID?粘贴目标接收槽位的新 Master 节点 IDPlease enter all the source node IDs.输入all→ 从集群所有旧主节点平均分配槽 也可以逐个输入指定源节点 ID只从某一台主节点迁出。查看系统生成迁移计划工具自动计算哪些槽从哪个源节点迁出打印完整 Moving slot 列表。迁移完成后校验集群状态# 检查集群完整性、槽分配情况 redis-cli --cluster check 127.0.0.1:30001校验重点[OK] All 16384 slots covered.确认新主节点已经分配到对应数量哈希槽。迁移分配成功