Redis系列(六)搭建Redis主从、哨兵、cluster集群环境

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的部分配置项

配置项配置项值范围说明
daemonizeyes、noyes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行
port指定 Redis 监听端口,默认端口为 6379
bind绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问 。
protected-modeyes、no保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no。
timeout300当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能
logleveldebug、verbose、notice、warning日志级别,默认为 notice
databases16设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到
rdbcompressionyes、no指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大。
dbfilenamedump.rdb指定本地数据库文件名,默认值为 dump.rdb
dir指定本地数据库存放目录
requirepass设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH 命令提供密码,默认关闭
maxclients0设置同一时间最大客户端连接数,默认无限制,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 264202646026461 //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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值