Redis重制(十八)redis集群(基于主从复制)

27 阅读7分钟

搭建redis集群,我们先要了解redis的主从复制概念。

 

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。 Master以写为主,Slave以读为主。

默认情况下,每台Rdis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

 

主从复制的作用主要包括:

1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Rdis数据时应用连接

主节点,读Rdis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大

大提高Redis服务器的并发量。

4、高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Rdis高可用的基础。

 

一般来说,要将Redis:运用于工程项目中,只使用一台Redis,是万万不能的,原因如下:

1、从结构上,单个Rdis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;

2、从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G,也不能将所有内存用作Redis存储内存,一般来说,单台Redisi最大使用内存不应该超过20G。

 

电商网站上的商品,一般都是一次上传,无数次浏览的,说专业点也就是"多读少写”。

对于这种场景,我们可以使如下这种架构:

1.jpg

主从复制,读写分离!80%的情况下都是在进行读操作!减缓服务器的压力!架构中经常使用!一主二从!

 

一:环境配置

1:只需要配置从库,不需要配置主库

127.0.0.1:6379> info replication         # 查看当前库信息
# Replication
role:master                                       # 角色
connected_slaves:0                            # 没有从机
master_failover_state:no-failover
master_replid:3cbed6e6f0629848071e0929f6d3f561d7498360
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:54
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

 

2:配置redis.conf

我没有多台服务器,因此我在一台服务器上边搭建redis集群,一主二从。三个redis。

首先我们来准备三个redis.conf配置文件

2.jpg

我这里根据端口号命名。修改redis79.conf

port 6379        
       
daemonize yes

pidfile /var/run/redis_6379.pid

logfile “6379.log”

dbfilename dump6379.rdb

#如果你是用的是aof备份机制,还需要修改:
appendfilename "appendonly6379.aof"

 

依次修改上方的配置文件。

修改成功之后,依次使用配置文件启动redis-server

redis-server rconfig/redis79.conf

redis-server rconfig/redis80.conf

redis-server rconfig/redis81.conf

 

使用进程查看命令查看redis进程:

[root@VM-4-16-centos rconfig]# ps -aux | grep redis
root     22373  0.3  0.1 241572  4392 ?        Ssl  09:21   0:00 redis-server 127.0.0.1:6379
root     22387  0.3  0.1 241572  4396 ?        Ssl  09:21   0:00 redis-server 127.0.0.1:6380
root     22397  0.3  0.1 241572  4388 ?        Ssl  09:21   0:00 redis-server 127.0.0.1:6381
root     22435  0.0  0.0  27084  3716 pts/0    S+   09:22   0:00 redis-cli
root     22440  0.0  0.0  27084  3712 pts/2    S+   09:22   0:00 redis-cli -p 6380
root     22444  0.0  0.0  27084  3712 pts/3    S+   09:22   0:00 redis-cli -p 6381
root     22487  0.0  0.0 112812   968 pts/4    S+   09:23   0:00 grep --color=auto redis

 

xshell新开四个窗口,在窗口中依次打开redis命令行:

redis-cli -p6379

redis-cli -p6380

redis-cli -p6381

 

这样我们需要的三个redis服务就搭建完成了。

默认情况下,每个redis都是主节点。

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:9f804be3e3abefa4f3372dd70b0fac2b5fa350df
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

 

一般情况下只需要配置从机就可以了,命令如下:

配置从机很简单,让他知道那个是主机就可以了,我这里将79认定为主机,那么80/81两个就是从机。这个配置需要到80/81上边去操作:

slaveof 127.0.0.1 6379   # 认主机命令

127.0.0.1:6380> slaveof 127.0.0.1 6379      # 认主机命令
OK
127.0.0.1:6380> info replication                # 查看当前redis信息
# Replication
role:slave                                                 # 角色:从机
master_host:127.0.0.1                               # 主机ip
master_port:6379                                     # 主机端口
master_link_status:up                               # 是否链接主机
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_read_repl_offset:14
slave_repl_offset:14
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:29d7972ef844579fb6a727bbbce017e58e35c45e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

 

81同理,这里不再做展示。

两台从机配置完成之后,我们再去主机下边看一下主机的信息:

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2                                                                      # 两个从机
slave0:ip=127.0.0.1,port=6380,state=online,offset=210,lag=0        # 从机1信息
slave1:ip=127.0.0.1,port=6381,state=online,offset=210,lag=1        # 从机2信息
master_failover_state:no-failover
master_replid:29d7972ef844579fb6a727bbbce017e58e35c45e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:224
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:224

 

我这里使用的事命令来做主从配置,这个主要用来做演示,在实际工作中,配置主从,一般都在配置文件中配置,这样才是永久的。

修改从机中的redis.conf:

replicaof <masterip> <masterport>          # 配置主机
masterauth <master-password>              # 配置主机密码

 

二:细节

1:主机负责写操作,从机负责读操作,读写分离,从机不能执行写操作

2:测试:主机断开连接,从机依日连接到主机的,但是没有写操作,这个时候,主机如果回来了,从机依旧可以直接获取到主机写的信息!

3:如果是使用命令行,来配置的主从,这个时候如果重启了,就会变回主机!

 

三:从机复制原理

Slave启动成功连接到master后会发送一个sync命令

 

Master接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。

 

全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。

 

增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步


但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

 

这样,最基本的一主二从redis集群就搭建完成了。

 

有好的建议,请在下方输入你的评论。