• Linux下安装配置redis详细教程,并配置哨兵模式,redis中文详解


    redis版本为redis-3.2.12,使用工具将安装包上传到data目录。

    在data目录下创建文件夹redis,将redis安装在此目录。

    第一步:解压。

    1. cd data
    2. tar -zxvf redis-3.2.12.tar.gz

    第二步:安装,PREFIX=/data/redis用来设置安装目录。

    1. cd redis-3.2.12/
    2. make
    3. make install PREFIX=/data/redis

    到此,redis已经安装完成,剩下就是配置和启动服务。

    进入redis目录,创建配置文件conf、日志logs、数据库dump、进程号pid四个目录,用来存放对应的文件,这四个目录也可以存放在其他文件夹,只要与配置文件中的配置一致即可,否则在启动服务是会报错。其中bin目录就是redis安装成功后的一些命令文件。

    1. cd redis
    2. mkdir conf
    3. mkdir logs
    4. mkdir dump
    5. mkdir pid

    redis服务配置一主二从,哨兵模式。注意:如果在实际开发中用不到哨兵模式,redis服务配置一主一从即可。

    主Redis配置:redis_6379.conf

    1. # Redis配置文件
    2. # 请注意,为了读取配置文件,Redis必须以文件路径作为第一个参数启动:
    3. # ./redis-server /data/redis/conf/redis_6379.conf
    4. # 加载更多配置文件
    5. # include /path/to/local.conf
    6. # include /path/to/other.conf
    7. # 默认Redis不以守护进程的方式运行。如果需要开启修改为"yes"。
    8. # 在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中
    9. # 此时redis将一直运行,除非手动kill该进程。
    10. daemonize yes
    11. # 以守护进程运行时,Redis默认会将pid存入/var/run/redis.pid文件中。
    12. # 指定pid存放位置和文件名
    13. pidfile /data/redis/pid/redis_6379.pid
    14. # 接收指定端口的连接,默认是6379。
    15. port 6379
    16. # 在每秒高请求的环境中,您需要提高backlog的配置,来避免客户端连接速度慢的问题。
    17. # 注意,Linux内核会截断这个值,因此同时修改/proc/sys/net/core/somaxconn和tcp_max_syn_backlog的值,来获得期待的效果。
    18. tcp-backlog 6000
    19. # 默认Redis监听所有能够链接服务器的网络链接。
    20. # 可以使用"bind"配置指令只监听一个或多个接口,后面可以跟一个或多个ip地址。
    21. # bind 192.168.1.100 10.0.0.1
    22. # bind 127.0.0.1
    23. bind 0.0.0.0
    24. # 客户端空闲N秒后连接关闭(0表示永不超时)
    25. timeout 0
    26. # TCP保活机制,就是为了保证连接的有效性,探测连接的对端是否存活的作用,在间隔一定的时间发探测包,根据回复来确认该连接是否有效。
    27. # Redis3.2.1版本之后默认值为300秒
    28. tcp-keepalive 300
    29. # 指定日志级别
    30. # debug(大量新秀,针对开发/测试)
    31. # verbose(大量的有用信息,但不像debug级别那样混乱)
    32. # notice(一般的信息,可以在生产中使用)
    33. # warning(只记录非常重要和关键的消息)
    34. loglevel notice
    35. # 指定日志存放位置和日志文件名称
    36. logfile "/data/redis/logs/redis_6379.log"
    37. # 设置数据库编号
    38. databases 16
    39. # 将数据库数据保存到磁盘策略:
    40. # save <seconds> <changes>
    41. # 如果给定的秒数和对数据库的修改操作数两个条件同时满足,则都会触发保存。
    42. # 下面的示例中会触发保存:
    43. # 900秒(15分钟)后,如果有1个key被修改
    44. # 300秒(5分钟)后,如果有10个key被修改
    45. # 60秒后,如果有10000个key被修改
    46. save 900 1
    47. save 300 10
    48. save 60 10000
    49. # 最近一次保存失败,Redis将停止接受写入。
    50. # 如果保存过程中Redis再次运行,RDB将会允许再次写入。
    51. stop-writes-on-bgsave-error yes
    52. # 开启RDB文件压缩,Redis会采用LZF算法进行压缩。
    53. # 如果不想消耗CPU性能来进行文件压缩的话,可以设置为关闭此功能,这样的缺点是需要更多的磁盘空间来保存文件。
    54. rdbcompression yes
    55. # 自从RDB 5版本之后CRC64校验被放置在文件末尾。
    56. # 开启RDB文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。
    57. rdbchecksum yes
    58. # 转储数据库的文件名
    59. dbfilename dump_6379.rdb
    60. # 指定转储数据库存放目录,必须指定
    61. dir /data/redis/dump
    62. # 主从复制关系,主redis不需要配置,从redis需要配置
    63. # slaveof <masterip> <masterport>
    64. # 如果主redis设置了密码,则从redis必须设置masterauth,否则主从数据同步会被拒绝。
    65. # masterauth nxredis@YH
    66. # 当从redis与主redis失去连接时,或者正在同步数据时,从机有两种工作方式:
    67. # 1.如果slave serve stale data设置为“yes”(默认值),则slave仍会回复客户端请求,可能会包含过期数据,或者如果这是第一次同步,则数据集可能为空。
    68. # 2.如果slave serve stale data设置为“no”,则slave将对除INFO和SLAVEOF之外的所有类型的命令回复错误“正在与主机同步”。
    69. slave-serve-stale-data yes
    70. # Redis2.6版本之后默认情况下从机为只读。
    71. slave-read-only yes
    72. # 主从同步策略: 是否开启无磁盘交互模式.
    73. # 1) 磁盘备份: 主Redis创建一个新进程,将RDB文件写入磁盘。然后该文件由父进程以增量方式同步到从Redis内存。
    74. # 2) 无磁盘交互模式: 主Redis创建一个新进程直接将RDB文件同步到从Redis内存。
    75. repl-diskless-sync no
    76. # 在进行无磁盘交互模式下Redis从库的延迟时间
    77. repl-diskless-sync-delay 5
    78. # 从Redis以设定的间隔时间向主Redis发送ping,默认为10秒。
    79. # repl-ping-slave-period 10
    80. # 主从同步超时时间,该值必须大于ping的时间间隔。
    81. # repl-timeout 60
    82. # 第一次数据同步后是否采用延迟策略。
    83. # 设置成yes,则redis会合并小的TCP包从而节省带宽,但会增加同步延迟(40ms),造成master与slave数据不一致。
    84. # 设置成no,则redis master会立即发送同步数据,没有延迟
    85. repl-disable-tcp-nodelay no
    86. # 缓冲复制队列大小
    87. # repl-backlog-size 1mb
    88. # 缓冲复制队列存活时长,0表示永远有效
    89. # repl-backlog-ttl 3600
    90. # 主Redis宕机后,选取从Redis时根据该设置的优先级选取,该值越小优先级越大。
    91. # 如果多个从Redis优先级相同,则选取复制内容越完整的当选。
    92. # 如果优先级和内容复制都相同,则选取runid最小的。
    93. # 设置为0表示永不能当选为主Redis。
    94. # 默认值为100
    95. slave-priority 100
    96. # 设置访问密码,密码尽可能复杂,以免被攻击破解。
    97. # 注意,主redis设置了密码,则从redis必须设置masterauth,否则主从数据同步会被拒绝。
    98. requirepass nxredis@YH
    99. #设置客户端同时最大连接数,默认情况下10000。
    100. maxclients 1024
    101. # 内存大小配置
    102. # 1k => 1000 bytes
    103. # 1kb => 1024 bytes
    104. # 1m => 1000000 bytes
    105. # 1mb => 1024*1024 bytes
    106. # 1g => 1000000000 bytes
    107. # 1gb => 1024*1024*1024 bytes
    108. # 单位不区分大小写,所以1GB 1Gb 1gB时相同的含义
    109. maxmemory 1073741824
    110. # 内存回收策略
    111. # 1.volatile-lru:从设置了过期时间的数据集中,选择最近最久未使用的数据释放。
    112. # 2.allkeys-lru:从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最久未使用的数据释放。
    113. # 3.volatile-random:从设置了过期时间的数据集中,随机选择一个数据进行释放。
    114. # 4.allkeys-random:从数据集中(包括了设置过期时间以及未设置过期时间)随机选择一个数据进行入释放。
    115. # 5.volatile-ttl:从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作。
    116. # 6.noeviction:不删除任意数据(但redis还会根据引用计数器进行释放呦~),这时如果内存不够时,会直接返回错误。
    117. # 默认回收策略为:noeviction
    118. # maxmemory-policy noeviction
    119. # LRU和TTL不是精确算法,而是近似算法。
    120. # Redis默认将检查5个key并选择释放最近使用最少的key,因此可以通过调整该值来提高速度或精度。
    121. # 该配置只对1-5的回收策略有效。
    122. # 10非常接近真实的LRU,但需要更多的CPU。
    123. # 3很快,但不是很准确。
    124. # maxmemory-samples 5
    125. # Redis默认采用异步的方式将数据存放到磁盘上,这个模式对大部份应用来说是足够好的。
    126. # AOF与RDB模式可以同时启用,默认AOF模式不启用,所以以下众多AOF配置不起作用。
    127. appendonly no
    128. appendfilename "appendonly_6379.aof"
    129. # no: 不即时同步,由操作系统控制何时刷写到磁盘上,这种模式速度最快。
    130. # always: 每次只写日志,速度较慢,但最安全。
    131. # everysec: 每秒钟同步一次,折中的方案。
    132. appendfsync everysec
    133. no-appendfsync-on-rewrite no
    134. auto-aof-rewrite-percentage 100
    135. auto-aof-rewrite-min-size 64mb
    136. aof-load-truncated yes
    137. # lua脚本的最大运行时间,单位是毫秒。
    138. lua-time-limit 5000
    139. # slog log是用来记录redis运行中执行比较慢的命令耗时。slog log保存在内存中。
    140. # 执行时间比slowlog-log-slower-than大的请求命令记录到slowlog里面,单位是微秒,所以1000000就是1秒。
    141. slowlog-log-slower-than 10000
    142. # 最大保存命令条数
    143. slowlog-max-len 128
    144. # 延迟监控,默认关闭。
    145. latency-monitor-threshold 0
    146. # 使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了 Redis 数据集的事件。
    147. # 因为开启键空间通知功能需要消耗一些 CPU ,所以在默认配置下,该功能处于关闭状态。
    148. # 该配置可以是以下字符的任意组合
    149. # K Keyspace events, published with __keyspace@<db>__ prefix.
    150. # E Keyevent events, published with __keyevent@<db>__ prefix.
    151. # g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
    152. # $ String commands
    153. # l List commands
    154. # s Set commands
    155. # h Hash commands
    156. # z Sorted set commands
    157. # x Expired events (events generated every time a key expires)
    158. # e Evicted events (events generated when a key is evicted for maxmemory)
    159. # A Alias for g$lshzxe, so that the "AKE" string means all the events.
    160. notify-keyspace-events ""
    161. # ziplist中允许存储的最大条目个数,默认为512,建议为128
    162. hash-max-ziplist-entries 512
    163. # ziplist中允许条目value值最大字节数,默认为64,建议为1024
    164. hash-max-ziplist-value 64
    165. # -5: 每个quicklist节点上的ziplist大小不能超过64 Kb。
    166. # -4: 每个quicklist节点上的ziplist大小不能超过32 Kb。
    167. # -3: 每个quicklist节点上的ziplist大小不能超过16 Kb。
    168. # -2: 每个quicklist节点上的ziplist大小不能超过8 Kb。(-2是Redis给出的默认值)
    169. # -1: 每个quicklist节点上的ziplist大小不能超过4 Kb。
    170. list-max-ziplist-size -2
    171. # quicklist两端不被压缩的节点个数。
    172. list-compress-depth 0
    173. set-max-intset-entries 512
    174. zset-max-ziplist-entries 128
    175. zset-max-ziplist-value 64
    176. hll-sparse-max-bytes 3000
    177. # Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。
    178. # 当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。
    179. # 如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存。
    180. activerehashing yes
    181. # normal -> normal clients including MONITOR clients
    182. # slave -> slave clients
    183. # pubsub -> clients subscribed to at least one pubsub channel or pattern
    184. client-output-buffer-limit normal 0 0 0
    185. client-output-buffer-limit slave 256mb 64mb 60
    186. client-output-buffer-limit pubsub 32mb 8mb 60
    187. # 默认值为10。
    188. # Redis会调用一个内部函数来执行许多后台任务,例如在超时时关闭客户端的连接,清除从未请求的过期密钥等等。
    189. # 该值越大,后台任务执行的越及时,但是会消耗更多的CPU。
    190. hz 10
    191. # 在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。
    192. # 这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值
    193. aof-rewrite-incremental-fsync yes

    从Redis配置,redis_6380.conf和redis_6381.conf,与主Redis配置基本上一样,不一样的地方在于端口、数据库、日志、pid文件名称,都以6380或6381为标志,最重要的地方是建立主从关系和同步验证。

    1. # 设置主Redis的地址和端口,该Redis为从节点
    2. # 主从复制关系,主redis不需要配置,从redis需要配置
    3. slaveof 127.0.0.1 6379
    4. # 设置访问密码,密码尽可能复杂,以免被攻击破解。
    5. # 注意,主redis设置了密码,则从redis必须设置masterauth,否则主从数据同步会被拒绝。
    6. # requirepass nxredis@YH
    7. # 如果主redis设置了密码,则从redis必须设置masterauth,否则主从数据同步会被拒绝。
    8. masterauth nxredis@YH

    注意:对只使用redis服务,只需要在主Redis里面配置requirepass,在从Redis里面配置masterauth,密码保持一致,密码尽可能复杂,以免被攻击破解。

    注意:对只使用redis服务,如果从Redis也有必要加入访问验证,也可以设置requirepass,而且密码可以与主Redis密码不同。

    将配置文件放置到/data/redis/conf目录下,然后就可以启动服务了。

    启动服务要按照主从顺序依次启动。

    1. cd /data/redis/bin
    2. ./redis-server /data/redis/conf/redis_6379.conf
    3. ./redis-server /data/redis/conf/redis_6380.conf
    4. ./redis-server /data/redis/conf/redis_6381.conf

    查看服务启动情况:

    ps -ef|grep redis

    也可以通过查看日志文件来确认服务是否正常启动。

    通过客户端登录Redis验证数据同步情况:

    主Redis登录验证,设置数据:

    1. cd /data/redis/bin
    2. ./redis-cli
    3. auth nxredis@YH
    4. set name zqz

    从Redis登录,获取数据:从Redis并没有设置密码,所以无需验证就可以操作。

    1. ./redis-cli -p 6380
    2. get name

    配置哨兵模式:

    Redis Sentinel集群通常由3到5个节点组成,如果个别节点挂了,集群还可以正常运作。Sentinel负责监控Redis集群的健康情况。

    如果主Redis挂掉,Sentinel集群会通过投票选择一个新的主Redis。当原来的主Redis恢复时,它会被当做新的主Redis的从Redis重新加入Redis集群。

    设置连接master和slave的密码,需要注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码必须设置相同。也就是说主Redis和从Redis都必须设置requirepass和masterauth,而且密码必须相同。

    sentinel.conf配置信息:

    1. protected-mode no
    2. port 26379
    3. sentinel myid a2b0854207a29e03e256b9628a18538c9a16a38b
    4. # 监控的主节点的名字、IP 和端口,最后一个1表示有1台 Sentinel 发现有问题,就会发生故障转移
    5. sentinel monitor redisYH 127.0.0.1 6379 1
    6. # sentinel日志
    7. logfile "/data/redis/logs/sentinel.log"
    8. # Generated by CONFIG REWRITE
    9. dir "/data/redis/"
    10. # 密码验证,通过添加主节点的密码,对主Redis的运行状态做监控
    11. sentinel auth-pass redisYH nxredis@YH
    12. sentinel config-epoch redisYH 0
    13. sentinel leader-epoch redisYH 115744
    14. sentinel current-epoch 115744

    将该配置文件放置到/data/redis/conf目录下,启动sentinel服务:

    ./server-sentinel /data/redis/conf/sentinel.conf

    验证sentinel是否起作用,可以手工shutdown掉主Redis。

    1. ./redis-cli
    2. auth nxredis@YH
    3. shutdown

    这时从Redis想要访问主Redis同步数据就会提示错误信息:

    1. Connecting to MASTER 127.0.0.1:6379
    2. MASTER <-> SLAVE sync started
    3. Error condition on socket for SYNC: Connection refused

    sentinel在监测到主Redis宕机之后,通过选举,将一个从Redis选定为新的主Redis。通过查看sentinel日志可以发现,选定6380为新的主Redis,同时将另外两个Redis作为从Redis。

    1. switch-master redisYH 127.0.0.1 6379 127.0.0.1 6380
    2. slave slave 127.0.0.1:6381 127.0.0.1 6381 @ redisYH 127.0.0.1 6380
    3. slave slave 127.0.0.1:6379 127.0.0.1 6379 @ redisYH 127.0.0.1 6380

    注意:选定6380为主Redis后,所有的配置文件都会被修改,主要是重新建立主从关系。

    6379会新增:slaveof 127.0.0.1 6380

    6380会删掉:slaveof 127.0.0.1 6379

    6381会修改:slaveof 127.0.0.1 6380

    由于6379服务已经关掉,所以虽然sentinel将6379作为6380的从服务,但是没有真正的建立。

    重新启动6379服务,这时sentinel会重建建立一次主从关系:

    convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ redisYH 127.0.0.1 6380

  • 相关阅读:
    Neo4j _sparql语言
    使用xlwings优化Python中操作Excel数据的处理效率
    var、let和const的区别和用法
    艾美捷ProSci丨ProSci ST2 抗体说明书
    从「博客园」的困境,到「用爱发电」~
    php如何解决高并发的问题?
    【数据结构与算法】链表
    TensorFlow 的基本概念和使用场景
    Redis_Hash(Map)数据类型基本命令
    国产数据库兼容性认证再下两城,极狐GitLab 国产适配更进一步
  • 原文地址:https://blog.csdn.net/kzhzhang/article/details/125571394