搭建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。
电商网站上的商品,一般都是一次上传,无数次浏览的,说专业点也就是"多读少写”。
对于这种场景,我们可以使如下这种架构:
主从复制,读写分离!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配置文件
我这里根据端口号命名。修改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集群就搭建完成了。
有好的建议,请在下方输入你的评论。