Redis集群做法的难点,百万并发客户端「实战」

Redis集群详解Redis有三种集群模式 , 分别是:
* 主从模式 * Sentinel模式 * Cluster模式三种集群模式各有特点 , 关于Redis介绍可以参考这里:NoSQL(二)——Redis
Redis官网:, 最新版本5.0.4
主从模式主从模式介绍主从模式是三种模式中最简单的 , 在主从复制中 , 数据库分为两类:主数据库(master)和从数据库(slave) 。
其中主从复制有如下特点:
* 主数据库可以进行读写操作 , 当读写操作导致数据变化时会自动将数据同步给从数据库* 从数据库一般都是只读的 , 并且接收主数据库同步过来的数据* 一个master可以拥有多个slave , 但是一个slave只能对应一个master* slave挂了不影响其他slave的读和master的读和写 , 重新启动后会将数据从master同步过来* master挂了以后 , 不影响slave的读 , 但redis不再提供写服务 , master重启后redis将重新对外提供写服务* master挂了以后 , 不会在slave节点中重新选一个master工作机制:
当slave启动后 , 主动向master发送SYNC命令 。 master接收到SYNC命令后在后台保存快照(RDB持久化)和缓存保存快照这段时间的命令 , 然后将保存的快照文件和缓存的命令发送给slave 。 slave接收到快照文件和命令后加载快照文件和缓存的执行命令 。
复制初始化后 , master每次接收到的写命令都会同步发送给slave , 保证主从数据一致性 。
安全设置:
当master节点设置密码后 ,
客户端访问master需要密码 启动slave需要密码 , 在配置文件中配置即可 客户端访问slave不需要密码缺点:
从上面可以看出 , master节点在主从模式中唯一 , 若master挂掉 , 则redis无法对外提供写服务 。
主从模式搭建

  • 环境准备
master节点 192.168.30.128 slave节点 192.168.30.129 slave节点 192.168.30.130
  • 全部下载安装:
# cd /software# wget # tar zxf redis-5.0.4.tar.gz--tt-darkmode-color: #999999;">服务文件
# vim /usr/lib/systemd/system/redis.service[Unit]Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target[Service]ExecStart=/usr/local/bin/redis-server /usr/local/redis/redis.conf --supervised systemd ExecStop=/usr/libexec/redis-shutdown Type=notify User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755[Install]WantedBy=multi-user.targetshutdown脚本
# vim /usr/libexec/redis-shutdown#!/bin/bash## Wrapper to close properly redis and sentineltest x"$REDIS_DEBUG" != xthenSERVICE_NAME=redisfi# Get the proper config file based on service nameCONFIG_FILE="/usr/local/redis/$SERVICE_NAME.conf"# Use awk to retrieve host, port from config fileHOST=`awk '/^[[:blank:]]*bind/ { print $2 }' $CONFIG_FILE | tail -n1`PORT=`awk '/^[[:blank:]]*port/ { print $2 }' $CONFIG_FILE | tail -n1`PASS=`awk '/^[[:blank:]]*requirepass/ { print $2 }' $CONFIG_FILE | tail -n1`SOCK=`awk '/^[[:blank:]]*unixsocket\s/ { print $2 }' $CONFIG_FILE | tail -n1`# Just in case, use default host, portHOST=${HOST:-127.0.0.1}if [ "$SERVICE_NAME" = redis ]; thenPORT=${PORT:-6379}elsePORT=${PORT:-26739}fi# Setup additional parameters# e.g password-protected redis instances[ -z "$PASS"] || ADDITIONAL_PARAMS="-a $PASS"# shutdown the service properlyif [ -e "$SOCK" ] ; then$REDIS_CLI -s $SOCK $ADDITIONAL_PARAMS shutdownelse$REDIS_CLI -h $HOST -p $PORT $ADDITIONAL_PARAMS shutdownfi123456789101112131415161718192021222324252627282930313233343536373839404142