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.target
shutdown脚本
# 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
# chmod +x /usr/libexec/redis-shutdown# useradd -s /sbin/nologin redis# chown -R redis:redis /usr/local/redis# chown -R reids:redis /data/redis# yum install -y bash-completion--tt-darkmode-color: #999999;">192.168.30.128
# mkdir -p /data/redis # vim /usr/local/redis/redis.conf bind 192.168.30.128 #监听ip , 多个ip用空格分隔 daemonize yes #允许后台启动 logfile "/usr/local/redis/redis.log"#日志路径 dir /data/redis #数据库备份文件存放目录 masterauth 123456 #slave连接master密码 , master可省略 requirepass 123456 #设置master连接密码 , slave可省略 appendonly yes #在/data/redis/目录生成appendonly.aof文件 , 将每一次写操作请求都追加到appendonly.aof 文件中# echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf # sysctl -p
192.168.30.129
# mkdir -p /data/redis # vim /usr/local/redis/redis.conf bind 192.168.30.129 daemonize yes logfile "/usr/local/redis/redis.log" dir /data/redis replicaof 192.168.30.128 6379 masterauth 123456 requirepass 123456 appendonly yes # echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf# sysctl -p
192.168.30.130
# mkdir -p /data/redis# vim /usr/local/redis/redis.conf bind 192.168.30.130 daemonize yes logfile "/usr/local/redis/redis.log" dir /data/redis replicaof 192.168.30.128 6379 masterauth 123456 requirepass 123456 appendonly yes # echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf # sysctl -p
- 济南|"十四五"济南工业强市主攻这个方向!两大产业集群规模皆达7000亿级
- 3天时间,我是如何解决redis bigkey 删除问题的?
- Django实战016:django中使用redis详解
- 快速安装一个OpenShift 4 准生产集群
- 你不知道的Redis:入门?数据结构?常用指令?
- Python操作Redis大全
- 为什么 Redis 单线程能支撑高并发?
- Martian框架发布 3.0.3 版本,Redis分布式锁
- redis 数据类型详解 以及 redis适用场景场合
- 第23问:3节点MGR集群,能不能将一个节点放在地球另一端?