文章目录
linux单机安装Redis
下载安装包
下载地址:
https://redis.io/download/#redis-downloads
安装gcc
yum -y install gcc
yum -y install gcc-c++
//验证
gcc --version
安装redis
//解压
tar -zvxf redis-6.0.16.tar.gz
//编译
cd redis-6.0.16
make MALLOC=libc
//启动服务端
cd src
./redis-server
//启动客户端
./redis-cli
修改redis.conf配置
vim redis.conf
daemonize no //更改为后台启动(yes),
protected-mode no //允许外部网络直接访问
port 6380 //端口号
测试启动
启动服务端,在src目录下,
./redis-server ../redis.conf
启动客户端
./redis-cli -h 指定ip -p 指定端口 -a 指定密码
./redis-cli -p 6380
redis.conf的部分配置项
配置项 | 配置项值范围 | 说明 |
---|---|---|
daemonize | yes、no | yes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行 |
port | 指定 Redis 监听端口,默认端口为 6379 | |
bind | 绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问 。 | |
protected-mode | yes、no | 保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no。 |
timeout | 300 | 当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能 |
loglevel | debug、verbose、notice、warning | 日志级别,默认为 notice |
databases | 16 | 设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到 |
rdbcompression | yes、no | 指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大。 |
dbfilename | dump.rdb | 指定本地数据库文件名,默认值为 dump.rdb |
dir | 指定本地数据库存放目录 | |
requirepass | 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH 命令提供密码,默认关闭 | |
maxclients | 0 | 设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息。 |
maxmemory | 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先执行过期策略,当此方法处理后,仍然到达最大内存设置,将执行淘汰策略。 |
Redis主从安装
在同一台机器上,用不同端口表示不同的redis
主节点端口:6410
从节点端口:6450
修改redis.conf配置
- 主
daemonize yes //更改为后台启动(yes),
protected-mode no //允许外部网络直接访问
port 6410 //端口号
- 从
daemonize yes //更改为后台启动(yes),
protected-mode no //允许外部网络直接访问
port 6450 //端口号
replicaof 127.0.0.1 6410 //添加的是主节点的ip和port
测试启动
//启动服务端,在src目录下,
./redis-server ../redis.conf
//启动客户端
./redis-cli -h 指定ip -p 指定端口 -a 指定密码
./redis-cli -p 6410
//启动服务端,在src目录下,
./redis-server ../redis.conf
//启动客户端
./redis-cli -h 指定ip -p 指定端口 -a 指定密码
./redis-cli -p 6450
从节点
- 查看是否配置了主节点配置
127.0.0.1:6450> config get replicaof
1) "replicaof"
2) "127.0.0.1 6410"
- 查看从节点信息
127.0.0.1:6450> info replication
# Replication
role:slave //角色
master_host:127.0.0.1 //主节点IP
master_port:6410 //主节点端口
master_link_status:up //连接状态 up是正常同步连接状态 down表示复制端口
master_last_io_seconds_ago:5 //主库多少秒没有发送数据到从库,范围:0-10
master_sync_in_progress:0 //是否正在跟主服务同步
slave_repl_offset:3129 //从节点偏移量
slave_priority:100 //选举时成为主节点的优先级,越大优先级越高,0不会成为主节点
slave_read_only:1 //是否为只读从库
connected_slaves:0 //连接的从库实例
master_replid:34424120b12431075c11d4d7971f3dafc5326db0 //master启动时生成的40位16进制的随机字符串,用来标识master节点
master_replid2:0000000000000000000000000000000000000000 //当前slave变成master之后,会生成了自己的master标识,之前的master节点的标识存到了master_replid2的位置
master_repl_offset:3129 //已写入偏移量
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576 //复制积压的缓存区大小
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3129
主节点
- 查看主节点信息
127.0.0.1:6410> info replication
# Replication
role:master //角色
connected_slaves:1 //从节点数量
slave0:ip=127.0.0.1,port=6450,state=online,offset=3535,lag=1 //从节点的信息:IP,状态,偏移量
master_replid:34424120b12431075c11d4d7971f3dafc5326db0 //# master启动时生成的40位16进制的随机字符串,用来标识master节点
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3535 //mater已写入的偏移量
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576 //缓冲区大小
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3535 //缓冲区的数据已有大小(是个环形,跟RedoLog一样会覆盖)
Redis哨兵安装
配置3个redis节点
这里在同一台机器上,用不同端口表示不同的redis
主节点端口:6420
从节点端口:6460、6461
- 主
daemonize yes //更改为后台启动(yes),
protected-mode no //允许外部网络直接访问
port 6420 //端口号
- 从
daemonize yes //更改为后台启动(yes),
protected-mode no //允许外部网络直接访问
port 6460 //端口号
replicaof 127.0.0.1 6420 //添加的是主节点的ip和port
- 从
daemonize yes //更改为后台启动(yes),
protected-mode no //允许外部网络直接访问
port 6461 //端口号
replicaof 127.0.0.1 6420 //添加的是主节点的ip和port
配置3个哨兵(sentinel.conf)
配置文件跟redis.conf一个路径。
哨兵端口:26420、26460、26461
port 26420、26460、26461 //sentinel服务端口
daemonize yes //是否后台启动
//sentinel monitor <master-group-name> <ip> <port> <quorum>
sentinel monitor mymaster 127.0.0.1 6420 2
//mymaster:主服务的名称,127.0.0.1 6420:master的ip与端口,quornum:认为master不可用的sentinel数量
sentinel down-after-milliseconds mymaster 30000 //30s后联系不到 认为关闭
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
启动redis
./redis-server ../redis.conf
./redis-cli -p 6420
./redis-cli -p 6460
./redis-cli -p 6461
启动sentinel服务
./redis-sentinel ../sentinel.conf
./redis-cli -p 26420
./redis-cli -p 26460
./redis-cli -p 26461
查看master的信息
127.0.0.1:26420> sentinel master mymaster
1) "name"
2) "mymaster"
3) "ip"
4) "127.0.0.1"
5) "port"
6) "6420"
7) "runid"
8) "62a3b36cbaa3ac63d668b40dd9d3e42276e26b7f"
9) "flags"
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "439"
19) "last-ping-reply"
20) "439"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "2268"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "505638"
29) "config-epoch"
30) "0"
31) "num-slaves" //从节点数量
32) "2"
33) "num-other-sentinels" //其他的哨兵数量
34) "2"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"
查询主库地址
127.0.0.1:26420> sentinel get-master-addr-by-name mymaster
1) "127.0.0.1"
2) "6420"
模拟主服务器挂掉
关闭主节点
127.0.0.1:6420> shutdown
not connected>
等一会儿查看一下其他两个从节点的信息,可以看到端口6460的节点自动升级为主节点。
127.0.0.1:6460> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6461,state=online,offset=172584,lag=0
master_replid:6c6c80426e5e81ad52dbc42d12cc0b555cfb49d9
master_replid2:458283404d9e38c7940f9beeb8af4bf4c3be3909
master_repl_offset:172584
second_repl_offset:68759
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:172584
127.0.0.1:6461> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6460
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:176602
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:6c6c80426e5e81ad52dbc42d12cc0b555cfb49d9
master_replid2:458283404d9e38c7940f9beeb8af4bf4c3be3909
master_repl_offset:176602
second_repl_offset:68759
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:176602
Redis Cluster集群安装
RedisCluster至少得三主三从 6个节点,分别用如下端口表示。
6430、6431、6432、6433、6434、6435
安装
创建数据存储目录
mkdir -p 6430/data 6431/data 6432/data 6433/data 6434/data 6435/data
将redis复制6份并分别修改配置文件
这里可以先修改一份,然后复制到6个节点中,然后替换端口号。
protected-mode no
port 6430
daemonize yes
dir /root/programfiles/redis/cluster/6430/data/ //数据文件存放位置
cluster-enabled yes //开启集群
cluster-config-file nodes-6380.conf //不同的端口实例不同 比如6431就是nodes-6431.conf
pidfile /var/run/redis_6380.pid //不同的端口实例不同 比如6431就是redis_6431.pid
cluster-node-timeout 15000 //超时时间
appendonly yes //每次更新操作后进行日志记录
编写集群启动脚本
这样可以不用一个一个的去启动了
#!/bin/sh
echo "==============================================="
echo "================start redis cluster==================="
echo "==============================================="
/root/programfiles/redis/cluster/node01-6.0.16-6430/src/redis-server /root/programfiles/redis/cluster/node01-6.0.16-6430/redis.conf
/root/programfiles/redis/cluster/node02-6.0.16-6431/src/redis-server /root/programfiles/redis/cluster/node02-6.0.16-6431/redis.conf
/root/programfiles/redis/cluster/node03-6.0.16-6432/src/redis-server /root/programfiles/redis/cluster/node03-6.0.16-6432/redis.conf
/root/programfiles/redis/cluster/node04-6.0.16-6433/src/redis-server /root/programfiles/redis/cluster/node04-6.0.16-6433/redis.conf
/root/programfiles/redis/cluster/node05-6.0.16-6434/src/redis-server /root/programfiles/redis/cluster/node05-6.0.16-6434/redis.conf
/root/programfiles/redis/cluster/node06-6.0.16-6435/src/redis-server /root/programfiles/redis/cluster/node06-6.0.16-6435/redis.conf
echo "==============================================="
echo "================end redis cluster==================="
echo "==============================================="
开启Cluster集群
./redis-cli --cluster create 127.0.0.1:6430 127.0.0.1:6431 127.0.0.1:6432 127.0.0.1:6433 127.0.0.1:6434 127.0.0.1:6435 --cluster-replicas 1
结果如下:
[root@VM-0-9-centos src]# ./redis-cli --cluster create 127.0.0.1:6430 127.0.0.1:6431 127.0.0.1:6432 127.0.0.1:6433 127.0.0.1:6434 127.0.0.1:6435 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:6434 to 127.0.0.1:6430
Adding replica 127.0.0.1:6435 to 127.0.0.1:6431
Adding replica 127.0.0.1:6433 to 127.0.0.1:6432
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: a0bf7101c4d885532fc76946a4e13c0e5c8043d7 127.0.0.1:6430
slots:[0-5460] (5461 slots) master
M: 082f87e4bdebbc424a9a996048e085c4372ab515 127.0.0.1:6431
slots:[5461-10922] (5462 slots) master
M: bc9c6cb3bd9367724977e72727eb67d587905af8 127.0.0.1:6432
slots:[10923-16383] (5461 slots) master
S: 999e5ed482bbfffde7e9508e832da7f51200a583 127.0.0.1:6433
replicates a0bf7101c4d885532fc76946a4e13c0e5c8043d7
S: 63dc100e63a583c8dcb77161c7c4c9ae4f866b7e 127.0.0.1:6434
replicates 082f87e4bdebbc424a9a996048e085c4372ab515
S: 9250d1d78c76e405262e4791936402e3e9d868bc 127.0.0.1:6435
replicates bc9c6cb3bd9367724977e72727eb67d587905af8
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 127.0.0.1:6430)
M: a0bf7101c4d885532fc76946a4e13c0e5c8043d7 127.0.0.1:6430
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 63dc100e63a583c8dcb77161c7c4c9ae4f866b7e 127.0.0.1:6434
slots: (0 slots) slave
replicates 082f87e4bdebbc424a9a996048e085c4372ab515
S: 9250d1d78c76e405262e4791936402e3e9d868bc 127.0.0.1:6435
slots: (0 slots) slave
replicates bc9c6cb3bd9367724977e72727eb67d587905af8
S: 999e5ed482bbfffde7e9508e832da7f51200a583 127.0.0.1:6433
slots: (0 slots) slave
replicates a0bf7101c4d885532fc76946a4e13c0e5c8043d7
M: 082f87e4bdebbc424a9a996048e085c4372ab515 127.0.0.1:6431
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: bc9c6cb3bd9367724977e72727eb67d587905af8 127.0.0.1:6432
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
查看集群信息
[root@VM-0-9-centos src]# ./redis-cli -p 6430
127.0.0.1:6430> cluster nodes
a0bf7101c4d885532fc76946a4e13c0e5c8043d7 127.0.0.1:6430@16430 myself,master - 0 1667055837000 1 connected 0-5460
63dc100e63a583c8dcb77161c7c4c9ae4f866b7e 127.0.0.1:6434@16434 slave 082f87e4bdebbc424a9a996048e085c4372ab515 0 1667055836571 2 connected
9250d1d78c76e405262e4791936402e3e9d868bc 127.0.0.1:6435@16435 slave bc9c6cb3bd9367724977e72727eb67d587905af8 0 1667055838575 3 connected
999e5ed482bbfffde7e9508e832da7f51200a583 127.0.0.1:6433@16433 slave a0bf7101c4d885532fc76946a4e13c0e5c8043d7 0 1667055839576 1 connected
082f87e4bdebbc424a9a996048e085c4372ab515 127.0.0.1:6431@16431 master - 0 1667055838000 2 connected 5461-10922
bc9c6cb3bd9367724977e72727eb67d587905af8 127.0.0.1:6432@16432 master - 0 1667055834567 3 connected 10923-16383
模拟服务器宕机
模拟端口6430的节点宕机,然后我们发现,对应的从节点端口6433节点变成了master节点。所以,cluster可以进行自动故障转移。
127.0.0.1:6430> shutdown
not connected>
[root@VM-0-9-centos src]# ./redis-cli -p 6434
127.0.0.1:6434> cluster nodes
a0bf7101c4d885532fc76946a4e13c0e5c8043d7 127.0.0.1:6430@16430 master,fail - 1667056022003 1667056017000 1 disconnected
999e5ed482bbfffde7e9508e832da7f51200a583 127.0.0.1:6433@16433 master - 0 1667056039046 7 connected 0-5460
082f87e4bdebbc424a9a996048e085c4372ab515 127.0.0.1:6431@16431 master - 0 1667056040048 2 connected 5461-10922
9250d1d78c76e405262e4791936402e3e9d868bc 127.0.0.1:6435@16435 slave bc9c6cb3bd9367724977e72727eb67d587905af8 0 1667056039000 3 connected
63dc100e63a583c8dcb77161c7c4c9ae4f866b7e 127.0.0.1:6434@16434 myself,slave 082f87e4bdebbc424a9a996048e085c4372ab515 0 1667056038000 2 connected
bc9c6cb3bd9367724977e72727eb67d587905af8 127.0.0.1:6432@16432 master - 0 1667056038042 3 connected 10923-16383
参考资料
-
《咕泡云课堂》
-
解决CentOS虚拟机卡死的问题,第3个方法
https://blog.csdn.net/kt1776133839/article/details/105497790
- 搭建
https://blog.csdn.net/Tomwildboar/article/details/116155163?ops_request_misc=%7B%22request%5Fid%22%3A%22166688505716800184183360%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fblog.%22%7D&request_id=166688505716800184183360&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-1-116155163-null-null.nonecase&utm_term=redis&spm=1018.2226.3001.4450
- 安装单机
https://www.xdx97.com/article/651017203176439808
https://www.cnblogs.com/hunanzp/p/12304622.html
- redis cluster安装
https://blog.csdn.net/kaiwen_100/article/details/121619317