redis各类部署以及使用介绍

redis各类部署以及使用介绍

环境准备

机器准备

# 各机器配置了hosts
[root@redis01 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

# redis
8.130.25.36  redis01
8.130.48.66	 redis02
8.130.26.68	 redis03
8.130.48.74	 redis04
8.130.29.79	 redis05
8.130.49.100 redis06

官方软件包地址清单

http://download.redis.io/releases/

【注意】:
Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖

yum install -y gcc tcl

redis单实例部署

redis01部署一个redis单点服务 8.130.25.36 redis01

# 下载安装包,根据不同版本下载对应包即可
[root@redis01 ~]# wget http://download.redis.io/releases/redis-6.2.4.tar.gz
# 解压包,-C 加路径可以指定
[root@redis01 ~]# tar -xzf redis-6.2.4.tar.gz
[root@redis01 ~]# ln -s redis-6.2.4 redis
[root@redis01 ~]# cd redis
[root@redis01 redis]# make && make install
[root@redis01 redis]# echo $?
0
[root@redis01 redis]# mkdir data
[root@redis01 redis]# vim redis.conf
#常用需要更改的配置项:
daemonize yes  # 是否以守护进程启动
pidfile /var/run/redis.pid   # 进程号文件的位置
port 6379    # 端口号
dir "/root/redis/data"  # 数据目录
logfile “6379.log”  # 日志位置及日志文件名
bind 0.0.0.0        # 0.0.0.0 可以远程访问
protected-mode no  # 保护模式

# 启动redis-server,后面跟上配置文件
[root@redis01 redis]# /root/redis/src/redis-server /root/redis/redis.conf

# 查看进程信息
[root@redis01 redis]# ps -ef | grep redis
root     24280     1  0 11:49 ?        00:00:00 /root/redis/src/redis-server 0.0.0.0:6379
root     24286 10603  0 11:49 pts/0    00:00:00 grep --color=auto redis
# 查看端口信息
[root@redis01 redis]# netstat -tnlpu|grep 6379
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      24280/redis-server  

# 常用参数  -p 端口 -h 地址  默认为 redis-cli -p 6379 -h 127.0.0.1
[root@redis01 redis]# /root/redis/src/redis-cli 
127.0.0.1:6379> 
# 查看所有的key
127.0.0.1:6379> keys *
(empty array)
# 设置键值对
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
# 获取某个key的值
127.0.0.1:6379> get k2
"v2"
# quit退出
127.0.0.1:6379> quit

redis一主多从部署

redis01[主]、redis02[从]、redis03[从] 三台部署一主多从

8.130.25.36 redis01 master
8.130.48.66 redis02 slave
8.130.26.68 redis03 slave

# 分别在redis02、redis03上安装redis,步骤同redis01;配置文件可以拷贝redis01的文件,否则注意修改常规配置
# 注意,redis02和redis03两个从库上需要加从库的配置项
[root@redis02 redis]# vim redis.conf
# slave从库配置在最后加入两行
slaveof 8.130.25.36 6379
slave-read-only yes

[root@redis02 redis]# /root/redis/src/redis-server /root/redis/redis.conf
[root@redis03 redis]# /root/redis/src/redis-server /root/redis/redis.conf

# 从库登陆,可以看到直接可以获取到redis01上set的键值对
# slave第一次连接上Master,都会发送一个PSYNC命令给master请求复制数据
[root@redis02 redis]# /root/redis/src/redis-cli 
# redis02上登陆直接可以获取到key
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> 

[root@redis03 redis]# /root/redis/src/redis-cli 
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> 

# 可以用info查询相关信息
[root@redis01 ~]# /root/redis/src/redis-cli 
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=8.130.48.66,port=6379,state=online,offset=1092,lag=0
slave1:ip=8.130.26.68,port=6379,state=online,offset=1092,lag=0
master_failover_state:no-failover
master_replid:6c1d687b0d59e236577fdb68817a9e9a4118fefe
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1092
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1092
127.0.0.1:6379> 

redis哨兵模式部署

redis01[主]、redis02[从]、redis03[从],在3台机器上再启动sentinel哨兵

8.130.25.36 redis01 master sentinel01
8.130.48.66 redis02 slave sentinel02
8.130.26.68 redis03 slave sentinel03

一般如果追求更好的环境部署,可以将3台sentinel机器部署在其它机器

# 利用上面redis01、redis02、redis03的一主两从继续搭建哨兵模式
# 修改sentinel.conf配置文件
[root@redis01 redis]# vim sentinel.conf
# 常用配置修改项,每个sentinel都需要改
port 26379
daemonize yes
dir ./data2
protected-mode no
bind 0.0.0.0
logfile "redis_sentinel.log"
sentinel monitor mymaster 8.130.25.36 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
# 创建data2目录存储sentinel相关数据
[root@redis01 redis]# mkdir data2
[root@redis02 redis]# mkdir data2
[root@redis03 redis]# mkdir data2

# 将01上配置文件同步一份,或者直接修改也可
[root@redis02 redis]# rm -f sentinel.conf 
[root@redis02 redis]# scp redis01:/root/redis/sentinel.conf .
[root@redis03 redis]# rm -f sentinel.conf 
[root@redis03 redis]# scp redis01:/root/redis/sentinel.conf .

# 启动sentinel哨兵服务
[root@redis01 redis]# /root/redis/src/redis-sentinel /root/redis/sentinel.conf
[root@redis02 redis]# /root/redis/src/redis-sentinel /root/redis/sentinel.conf
[root@redis03 redis]# /root/redis/src/redis-sentinel /root/redis/sentinel.conf

# 此时每个机器都有redis-server和redis-sentine服务,对应6379和26379
[root@redis01 redis]# netstat -tnlpu|grep 6379
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      24498/redis-sentine 
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      24484/redis-server 

# 在一台节点上查看一下当前信息:master_host:8.130.25.36
# [root@redis03 redis]# /root/redis/src/redis-cli
127.0.0.1:6379> 
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:8.130.25.36
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:2688
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:6c1d687b0d59e236577fdb68817a9e9a4118fefe
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2688
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:113
repl_backlog_histlen:2576
127.0.0.1:6379> 

# 在master上将redis关闭
[root@redis01 redis]# ps -ef | grep redis
root     24484     1  0 14:02 ?        00:00:00 /root/redis/src/redis-server 0.0.0.0:6379
root     24498     1  0 14:09 ?        00:00:00 /root/redis/src/redis-sentinel 0.0.0.0:26379 [sentinel]
root     24513 10603  0 14:11 pts/0    00:00:00 grep --color=auto redis
[root@redis01 redis]# kill -9 24484
[root@redis01 redis]# ps -ef | grep redis
root     24498     1  0 14:09 ?        00:00:00 /root/redis/src/redis-sentinel 0.0.0.0:26379 [sentinel]
root     24515 10603  0 14:12 pts/0    00:00:00 grep --color=auto redis

# 重新登陆一个节点查看,redis03的role变成了master,这就是哨兵sentinel的功能
[root@redis03 redis]# /root/redis/src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=8.130.48.66,port=6379,state=online,offset=48605,lag=1
master_failover_state:no-failover
master_replid:f330b2d7748d6e6b52fb25198f83e07b66b6cfaa
master_replid2:3169ebf9c58f6e6f9ad6d3ff70d003ef7dc98706
master_repl_offset:48605
second_repl_offset:34724
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:48605

# 将redis01上的redis-server重新启动
[root@redis01 redis]# /root/redis/src/redis-server /root/redis/redis.conf
# 连入cli
[root@redis01 redis]# /root/redis/src/redis-cli 
# 此时redis01已经是role:slave角色
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:8.130.26.68
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:62056
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:f330b2d7748d6e6b52fb25198f83e07b66b6cfaa
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:62056
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:58670
repl_backlog_histlen:3387
# redis01因为已经是slave角色,不再可以set键值对
127.0.0.1:6379> set k4 v4
(error) READONLY You can't write against a read only replica.
127.0.0.1:6379> 

redis高可用集群部署

8.130.25.36 redis01
8.130.48.66 redis02

8.130.26.68 redis03
8.130.48.74 redis04

8.130.29.79 redis05
8.130.49.100 redis06

# 删除恢复到干净的环境,重新实验高可用部署,如果直接部署高可用实验则跳过删除操作
[root@redis01 ~]# cd ~
[root@redis01 ~]# rm -rf redis redis-6.2.4
[root@redis02 ~]# cd ~
[root@redis02 ~]# rm -rf redis redis-6.2.4
[root@redis03 ~]# cd ~
[root@redis03 ~]# rm -rf redis redis-6.2.4

[root@redis01 ~]# scp redis-6.2.4.tar.gz redis04:~/
[root@redis01 ~]# scp redis-6.2.4.tar.gz redis05:~/
[root@redis01 ~]# scp redis-6.2.4.tar.gz redis06:~/

# 6台机器都安装redis
[root@redis01 ~]# tar -xzf redis-6.2.4.tar.gz
[root@redis01 ~]# ln -s redis-6.2.4 redis
[root@redis01 ~]# cd redis
[root@redis01 redis]# make && make install
[root@redis01 redis]# echo $?
0
[root@redis01 redis]# mkdir data
[root@redis01 redis]# vim redis.conf
# 常用需要更改的配置项:
daemonize yes  # 是否以守护进程启动
pidfile /var/run/redis.pid   # 进程号文件的位置
port 6379    # 端口号
dir "/root/redis/data"  # 数据目录
logfile “6379.log”  # 日志位置及日志文件名
bind 0.0.0.0        # 0.0.0.0 可以远程访问
protected-mode no  # 保护模式
appendonly yes  # 持久化开启
appendfilename "appendonly.aof"  # 持久化文件名
cluster-enabled yes # 启动集群模式
cluster-config-file nodes-6379.conf  # 集群节点信息文件
cluster-node-timeout 15000  #节点超时时间

# 分发配置文件
[root@redis01 redis]# scp redis.conf redis02:/root/redis/
[root@redis01 redis]# scp redis.conf redis03:/root/redis/
[root@redis01 redis]# scp redis.conf redis04:/root/redis/
[root@redis01 redis]# scp redis.conf redis05:/root/redis/
[root@redis01 redis]# scp redis.conf redis06:/root/redis/

# 各服务器启动redis-server
[root@redis01 redis]# /root/redis/src/redis-server /root/redis/redis.conf
[root@redis02 redis]# /root/redis/src/redis-server /root/redis/redis.conf
[root@redis03 redis]# /root/redis/src/redis-server /root/redis/redis.conf
[root@redis04 redis]# /root/redis/src/redis-server /root/redis/redis.conf
[root@redis05 redis]# /root/redis/src/redis-server /root/redis/redis.conf
[root@redis06 redis]# /root/redis/src/redis-server /root/redis/redis.conf

# 创建集群
[root@redis01 redis]# redis-cli --cluster create --cluster-replicas 1 8.130.25.36:6379 8.130.48.66:6379 8.130.26.68:6379 8.130.48.74:6379 8.130.29.79:6379 8.130.49.100:6379
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 8.130.29.79:6379 to 8.130.25.36:6379
Adding replica 8.130.49.100:6379 to 8.130.48.66:6379
Adding replica 8.130.48.74:6379 to 8.130.26.68:6379
M: bc27207a8c93ec368ced2b4f4470998828a3f4e4 8.130.25.36:6379
   slots:[0-5460] (5461 slots) master
M: c12831ad49a61b7923d35cb93f45ac12cf564032 8.130.48.66:6379
   slots:[5461-10922] (5462 slots) master
M: df26a1d73caddb039f0f15eebeb451ce6b6ad4ec 8.130.26.68:6379
   slots:[10923-16383] (5461 slots) master
S: f4b156f4616864dbcf923d06c800556232fd5632 8.130.48.74:6379
   replicates df26a1d73caddb039f0f15eebeb451ce6b6ad4ec
S: 9d3fe7a0fdede02cfaebf88db4e8dfb04f277366 8.130.29.79:6379
   replicates bc27207a8c93ec368ced2b4f4470998828a3f4e4
S: f26f4c1c7b98149687875dd069737bf067b68a42 8.130.49.100:6379
   replicates c12831ad49a61b7923d35cb93f45ac12cf564032
# 系统会分配master和slave角色,输入yes同意
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 8.130.25.36:6379)
M: bc27207a8c93ec368ced2b4f4470998828a3f4e4 8.130.25.36:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: df26a1d73caddb039f0f15eebeb451ce6b6ad4ec 8.130.26.68:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: f26f4c1c7b98149687875dd069737bf067b68a42 8.130.49.100:6379
   slots: (0 slots) slave
   replicates c12831ad49a61b7923d35cb93f45ac12cf564032
S: f4b156f4616864dbcf923d06c800556232fd5632 8.130.48.74:6379
   slots: (0 slots) slave
   replicates df26a1d73caddb039f0f15eebeb451ce6b6ad4ec
M: c12831ad49a61b7923d35cb93f45ac12cf564032 8.130.48.66:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 9d3fe7a0fdede02cfaebf88db4e8dfb04f277366 8.130.29.79:6379
   slots: (0 slots) slave
   replicates bc27207a8c93ec368ced2b4f4470998828a3f4e4
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@redis01 redis]# 


[root@redis01 redis]# redis-cli
# 查看集群信息
127.0.0.1:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:135
cluster_stats_messages_pong_sent:142
cluster_stats_messages_sent:277
cluster_stats_messages_ping_received:137
cluster_stats_messages_pong_received:135
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:277
127.0.0.1:6379> 

# 查看集群节点列表
127.0.0.1:6379> cluster nodes
df26a1d73caddb039f0f15eebeb451ce6b6ad4ec 8.130.26.68:6379@16379 master - 0 1646121030310 3 connected 10923-16383
f26f4c1c7b98149687875dd069737bf067b68a42 8.130.49.100:6379@16379 slave c12831ad49a61b7923d35cb93f45ac12cf564032 0 1646121030000 2 connected
f4b156f4616864dbcf923d06c800556232fd5632 8.130.48.74:6379@16379 slave df26a1d73caddb039f0f15eebeb451ce6b6ad4ec 0 1646121028000 3 connected
bc27207a8c93ec368ced2b4f4470998828a3f4e4 172.28.54.195:6379@16379 myself,master - 0 1646121030000 1 connected 0-5460
c12831ad49a61b7923d35cb93f45ac12cf564032 8.130.48.66:6379@16379 master - 0 1646121031314 2 connected 5461-10922
9d3fe7a0fdede02cfaebf88db4e8dfb04f277366 8.130.29.79:6379@16379 slave bc27207a8c93ec368ced2b4f4470998828a3f4e4 0 1646121029000 1 connected

# 6台分别登陆查看一下关系

# redis01 -> master  对应从库为 8.130.29.79 redis05 
[root@redis01 redis]# /root/redis/src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=8.130.29.79,port=6379,state=online,offset=504,lag=0
master_failover_state:no-failover
master_replid:a60cb0652c5afea7070a1849493ffa45b4ce368b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:504
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:504
127.0.0.1:6379> 

# redis02 -> master  对应从库为 8.130.49.100 redis06 
[root@redis02 redis]# /root/redis/src/redis-cli 
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=8.130.49.100,port=6379,state=online,offset=560,lag=0
master_failover_state:no-failover
master_replid:c002b4e6979a10fc56c7ee55f81c055ef0403dc0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:560
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:560
127.0.0.1:6379> 

# redis03 -> master  对应从库为 8.130.48.74 redis04 
[root@redis03 redis]# /root/redis/src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=8.130.48.74,port=6379,state=online,offset=560,lag=1
master_failover_state:no-failover
master_replid:19bc896242277f157d6ea4eaba62813520a28d44
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:560
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:560
127.0.0.1:6379> 

# redis04 -> slave  对应主库为 8.130.26.68 redis03 
[root@redis04 redis]# /root/redis/src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:8.130.26.68
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:560
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:19bc896242277f157d6ea4eaba62813520a28d44
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:560
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:560
127.0.0.1:6379> 

# redis05 -> slave  对应主库为 8.130.25.36 redis01 
[root@redis05 redis]# /root/redis/src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:8.130.25.36
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:588
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:a60cb0652c5afea7070a1849493ffa45b4ce368b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:588
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:588
127.0.0.1:6379> 

# redis06 -> slave  对应主库为 8.130.48.66 redis02
[root@redis06 redis]# /root/redis/src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:8.130.48.66
master_port:6379
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_repl_offset:574
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:c002b4e6979a10fc56c7ee55f81c055ef0403dc0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:574
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:574
127.0.0.1:6379> 

redis常用命令

#打印出所有key
keys * 
#打印出所有以k开头的key
keys k*
#打印出所有以k开头,第三个字母是a到e的范围
keys k[a-e]
#两位长度,以k开头,?表示任意一位
keys k?
# 设置键值对
set a b
#查看a是否存在
exists a
(integer) 1
#存在返回1 不存在返回0

expire name 3 #3s 过期
ttl name  #查看name还有多长时间过期
persist name #去掉name的过期时间
type name #查看name类型,返回string

info # 查看状态
client list  # 查看正在连接的会话
client kill  # 关闭某个连接ip:端口 
dbsize  # 统计总共有多少个key
flushall  # 清空所有
flushdb  # 只清空当前库
select 数字  # 选择某个库  总共16个库
monitor  # 记录操作日志,前台挂起开始监控
del k1  # 删除某个键值
incr age  #对age这个key的value值自增1
decr age  #对age这个key的value值自减1
incrby age 10  #对age这个key的value值增加10
decrby age 10  #对age这个key的value值减10
set k1 v1  # 不管key是否存在,都设置 
setnx k1 v1 # key不存在时才设置(新增操作)
set k1 v1 nx # 同上
set k1 v1 xx # key存在,才设置(更新操作)
mget key1 key2 key3     #批量获取key1,key2.。。时间复杂度o(n)
mset key1 value1 key2 value2 key3 value3    #批量设置时间复杂度o(n)

猜你喜欢

转载自blog.csdn.net/wt334502157/article/details/123211953