当前位置:首页 > 单片机 > 架构师社区
[导读]本篇文章讲述了Redis单机环境、主备、哨兵Sentinel模式以及RedisCluster集群模式下的操作步骤,关于这些操作我们没必要死记硬背,只需要总结下来,下次使用直接拿出来就好。建议当作操作手册收藏。安装单实例Redis编译Redis1.下载Redis源码包wgethtt...

本篇文章讲述了 Redis 单机环境、主备、哨兵 Sentinel 模式以及 Redis Cluster 集群模式下的操作步骤,关于这些操作我们没必要死记硬背,只需要总结下来,下次使用直接拿出来就好。

建议当作操作手册收藏。

安装单实例 Redis

编译Redis

1.下载Redis源码包wget https://download.redis.io/releases/redis-5.0.13.tar.gz2.解压文件tar -zxvf redis-5.0.13.tar.gz3.cd redis-5.0.134.make 编译

1.如果遇到以下报错,需要安装依赖 yum install gcc

必会Redis单节点、Sentinel和Cluster操作实战

2.如果遇到以下报错

必会Redis单节点、Sentinel和Cluster操作实战

分配器allocator, 如果有MALLOC 这个 环境变量, 会有用这个环境变量的 去建立Redis。

而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。

但是如果你又没有jemalloc 而只有 libc 当然 make 出错。所以加这么一个参数,运行如下命令:

make MALLOC=libc

此时编译完成,文件目录下已经生成可执行文件。


必会Redis单节点、Sentinel和Cluster操作实战


安装Redis服务

1.安装编译后的文件make install PREFIX=/usr/local/redis52.编辑环境变量vi /etc/profile3.追加如下信息

export REDIS_HOME=/usr/local/redis5export PATH=$PATH:$REDIS_HOME/bin4.更新配置source /etc/profile

echo $PATH检查环境变量是否正确必会Redis单节点、Sentinel和Cluster操作实战

5.cd utils/6.安装服务./install_server.sh然后出现如下输出

[root@node1 utils]# ./install_server.sh Welcome to the redis service installerThis script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] 选择启动端口Selecting default: 6379Please select the redis config file name [/etc/redis/6379.conf] 设置配置文件目录Selected default - /etc/redis/6379.confPlease select the redis log file name [/var/log/redis_6379.log] 设置日志目录Selected default - /var/log/redis_6379.logPlease select the data directory for this instance [/var/lib/redis/6379] 设置数据库目录Selected default - /var/lib/redis/6379Please select the redis executable path [/usr/local/redis5/bin/redis-server] 设置可执行文件目录Selected config:Port : 6379Config file : /etc/redis/6379.confLog file : /var/log/redis_6379.logData dir : /var/lib/redis/6379Executable : /usr/local/redis5/bin/redis-serverCli Executable : /usr/local/redis5/bin/redis-cliIs this ok? Then press ENTER to go on or Ctrl-C to abort.Copied /tmp/6379.conf => /etc/init.d/redis_6379 复制配置文件Installing service... 安装服务Successfully added to chkconfig! 设置开机启动Successfully added to runlevels 345!Starting Redis server... 启动服务Installation successful!
7.service redis_6379 status 检查是否安装成功ps -ef|grep redis 检查正在运行的服务

必会Redis单节点、Sentinel和Cluster操作实战

配置修改

1.修改 配置信息vi /etc/redis/6379.conf (这一步可选)

daemonize no # 前台方式运行 为了方便观察#logfile /var/log/redis_6379.log #注释掉,前台输出 为了方便观察appendonly yes # aof同步开启
2.启动 redis-server /etc/redis/6379.conf3.启动客户端 redis-cli -p 6379

主备安装

1.使用install_server.sh再安装两个Redis实例,使用端口号在同一机器区分 这里分别使用6379,6380,6381,并且分别启动2.登陆客户端 redis-cli -p 63813.输入命令 help SLAVEOF,6380端口实例操作同理。

redis-cli -p 6381 127.0.0.1:6381>help SLAVEOFSLAVEOF host port summary: Make the server a replica of another instance, or promote it as master. Deprecated starting with Redis 5. Use REPLICAOF instead. since: 1.0.0 group: server
127.0.0.1:6381> REPLICAOF 127.0.0.1 6379 OK 127.0.0.1:6381>
4.设置追随6379为主 REPLICAOF 127.0.0.1 6379

必会Redis单节点、Sentinel和Cluster操作实战

6381变化:

必会Redis单节点、Sentinel和Cluster操作实战

6379变化:

必会Redis单节点、Sentinel和Cluster操作实战

25692:S 03 Sep 2021 20:19:53.182 * REPLICAOF 127.0.0.1:6379 enabled (user request from 'id=3 addr=127.0.0.1:42336 fd=7 name= age=113 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=44 qbuf-free=32724 obl=0 oll=0 omem=0 events=r cmd=replicaof')25692:S 03 Sep 2021 20:19:54.146 * Connecting to MASTER 127.0.0.1:637925692:S 03 Sep 2021 20:19:54.146 * MASTER <-> REPLICA sync started25692:S 03 Sep 2021 20:19:54.146 * Non blocking connect for SYNC fired the event.25692:S 03 Sep 2021 20:19:54.147 * Master replied to PING, replication can continue...25692:S 03 Sep 2021 20:19:54.147 * Trying a partial resynchronization (request 839fc4e0817f7c98e9fa8204c53aedf661c71bf1:1).25692:S 03 Sep 2021 20:19:54.148 * Full resync from master: 4cff4bffe3e33adcca1864de53064480eb00c200:025692:S 03 Sep 2021 20:19:54.148 * Discarding previously cached master state.25692:S 03 Sep 2021 20:19:54.251 * MASTER <-> REPLICA sync: receiving 176 bytes from master25692:S 03 Sep 2021 20:19:54.254 * MASTER <-> REPLICA sync: Flushing old data # 会先删除本节点老数据25692:S 03 Sep 2021 20:19:54.254 * MASTER <-> REPLICA sync: Loading DB in memory25692:S 03 Sep 2021 20:19:54.254 * MASTER <-> REPLICA sync: Finished with success
效果如下图:

必会Redis单节点、Sentinel和Cluster操作实战

如果一个节点首次追随主节点,会执行RDB同步 如果从节点挂掉,启动直接追随先前的主节点,只做增量同步 但是如果节点挂掉,启动直接追随先前的主节点,同步方式为AOF,则会做RDB全量同步。。可能是因为AOF没有记录之前追随过谁

取消追随主节点:REPLICAOF no one

哨兵模式 Sentinel

配置 sentinel

1.从redis源码目录复制官网提供的配置文件cp /root/soft/redis-5.0.13/sentinel.conf /etc/redis/sentinel_26379.conf2.修改配置文件

port 26379sentinel monitor mymaster 127.0.0.1 6379 23.启动sentinel实例redis-server /etc/redis/sentinel_26379.conf --sentinel 以此为例启动三台

必会Redis单节点、Sentinel和Cluster操作实战

 

必会Redis单节点、Sentinel和Cluster操作实战

4.设置 sentinel 成功

验证

1.此时杀死master 6379实例

必会Redis单节点、Sentinel和Cluster操作实战

2.选举6380为新的主节点

必会Redis单节点、Sentinel和Cluster操作实战

3.此时重启6379节点 

redis-server /etc/redis/6379.conf必会Redis单节点、Sentinel和Cluster操作实战

其中一个sentinel输出如下

11035:X 04 Sep 2021 01:41:29.685 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 638011035:X 04 Sep 2021 01:41:39.675 * convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380原有的主节点已经切换为备用节点

Redis Cluster

配置集群

1.查看Redis cluster相关命令 redis-cli --cluster help

[root@node1 ~]# redis-cli --cluster helpCluster Manager Commands: create host1:port1 ... hostN:portN --cluster-replicas check host:port --cluster-search-multiple-owners info host:port fix host:port --cluster-search-multiple-owners reshard host:port --cluster-from --cluster-to --cluster-slots --cluster-yes --cluster-timeout --cluster-pipeline --cluster-replace rebalance host:port --cluster-weight <node1=w1...nodeN=wN> --cluster-use-empty-masters --cluster-timeout --cluster-simulate --cluster-pipeline --cluster-threshold --cluster-replace add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id del-node host:port node_id call host:port command arg arg .. arg set-timeout host:port milliseconds import host:port --cluster-from --cluster-copy --cluster-replace2.分别启动每个Redis实例

Redis 本身在Utils目录下提供了单机部署 cluster demo 的util脚本,可以快速一键部署。

cd /root/soft/redis-5.0.13/utils/create-cluster

vi create-cluster

# SettingsPORT=30000TIMEOUT=2000NODES=6 # 节点数REPLICAS=1 # 备用节点数 此配置为3主3从./create-cluster start 启动实例

./create-cluster create

3.redis-cli --cluster create 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006 --cluster-replicas 1

必会Redis单节点、Sentinel和Cluster操作实战


4.创建集群完成,客户端链接校验redis-cli -c -p 30001

必会Redis单节点、Sentinel和Cluster操作实战

 如果发生了自动重定向,则表示RedisCluster使用正常


检查Redis cluster状态

1.redis-cli --cluster check 127.0.0.1:30001

必会Redis单节点、Sentinel和Cluster操作实战

reshrad Redis槽位

1.redis-cli --cluster reshard 127.0.0.1:300012.然后按照提示操作,首先选择要移动的槽位数量,然后选择接受节点

必会Redis单节点、Sentinel和Cluster操作实战


3.再选择需要从哪些节点移出槽位

必会Redis单节点、Sentinel和Cluster操作实战

4.最后输入done,然后yes确定5.检查移动后的结果 redis-cli --cluster info 127.0.0.1:30001

必会Redis单节点、Sentinel和Cluster操作实战


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭