Redis集群介绍:
Redis集群采用分片(sharding)技术,将数据分散存储在多个节点上,从而提高了集群的性能和可靠性。每个节点都可以独立地响应客户端请求。
Redis也内置了高可用机制,支持N个master节点,每个master节点都可以挂载多个slave节点,当master节点挂掉时,集群会提升它的某个slave节点作为新的master节点。
Redis数据分布算法哈希槽算法
Redis集群默认定义了16384个哈希槽(0~16383),将这些哈希槽均匀地分布在所有节点之间。当一个key经过哈希函数计算出一个哈希值后,再将该哈希值对16384取模,得到对应的哈希槽。这个哈希槽就是该key所归属的槽位。
当一个客户端发送一个命令操作一个key时,Redis集群会根据该key的哈希值和哈希槽映射规则,找到该key所属的节点,然后将该命令发送到该节点上执行。
哈希槽算法的优点是数据分布均匀,每个节点拥有相同数量的哈希槽,从而实现了负载均衡和高可用性。同时,当节点的数量发生变化时,哈希槽算法可以有效地缩放集群。
以下是一个Redis一键部署脚本的示例,可以用于在6台名为node1到node6的机器上部署Redis:
#!/bin/bash
# 定义Redis安装目录
REDIS_HOME=/usr/local/redis
# 定义Redis下载地址和版本号
REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-6.2.1.tar.gz
REDIS_VERSION=redis-6.2.1
# 定义Redis配置文件路径
REDIS_CONF=$REDIS_HOME/bin/redis.conf
# 定义Redis监听的IP地址和端口号
REDIS_BIND_IP=0.0.0.0
REDIS_PORT=6379
# 定义Redis密码(可选)
REDIS_PASSWORD=
# 遍历所有机器
for i in {1..6}
do
# 获取当前机器名
NODE_NAME=node$i
# 获取当前机器IP地址
NODE_IP=$(nslookup $NODE_NAME | awk '/^Address: / { print $2 }')
# 输出当前机器信息
echo "Deploying Redis on $NODE_NAME ($NODE_IP)..."
# SSH到当前机器上执行安装命令
ssh $NODE_IP << EOF
# 创建安装目录
if [ ! -d "$REDIS_HOME" ]; then
mkdir $REDIS_HOME
fi
# 安装依赖包和编译工具
yum install -y gcc make tar wget
# 下载Redis源码包
cd /tmp
wget $REDIS_DOWNLOAD_URL
tar -zxvf ${REDIS_VERSION}.tar.gz
# 编译安装Redis
cd ${REDIS_VERSION}
make
make install PREFIX=$REDIS_HOME
# 创建Redis配置文件
cp $REDIS_HOME/bin/redis.conf $REDIS_CONF
sed -i "s/bind 127.0.0.1/bind $REDIS_BIND_IP/g" $REDIS_CONF
sed -i "s/port 6379/port $REDIS_PORT/g" $REDIS_CONF
if [ ! -z "$REDIS_PASSWORD" ]; then
sed -i "s/# requirepass foobared/requirepass $REDIS_PASSWORD/g" $REDIS_CONF
fi
# 启动Redis服务
$REDIS_HOME/bin/redis-server $REDIS_CONF
EOF
# 输出当前机器部署完成信息
echo "Redis deployment completed on $NODE_NAME ($NODE_IP)!"
done
此脚本的功能是自动下载、编译、安装和启动Redis,并对每台机器的Redis配置文件进行了相应的修改,以保证所有机器上的Redis实例在监听相同的IP地址和端口号,并且可以设置密码进行访问控制。您可以根据自己的需求修改和优化这个脚本。