redis的主从复制:
主节点对内存数据直接进行一次快照,并将快照文件发给从节点,从节点在本机的内存空间重构数据库,完成复制,主节点的数据就会同步到从节点上
特点:
一个Master可以有多个slave主机,支持链式复制;
Master以非阻塞方式同步数据至slave主机;
实验说明:
本实验使用三台设备,一主二从,通过修改配置文件和在命令行操作两种方式完成从节点的配置
1、安装redis软件包、启动服务、同时同步时间
1
2
3
|
yum -y
install
redis
systemctl start redis.service
ntpdate 172.18.0.1
|
2、主节点配置
主节点开启认证功能、指定监听地址,不用做其他的操作
1
2
3
|
vim
/etc/redis
.conf
requirepass centos
bind 0.0.0.0
#本实验环境就监听所有地址,实际场景中应该是监听提供服务的ip
|
3、从节点A上的配置(修改配置文件的方式)
修改监听地址、auth认证
1
2
3
|
vim
/etc/redis
.conf
requirepass centos
bind 0.0.0.0
|
关联的主节点信息
1
2
3
|
slaveof 192.168.1.101 6379
#主节点的地址和端口
masterauth centos
#主节点配置的认证口令
#从节点只需配置这些,很简单
|
然后启动redis服务,在本机检查结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
redis-cli -h 192.168.1.106
#从节点连接本机redis服务
AUTH centos
#只有本机通过认证才能执行后面的操作
192.168.1.106:6379[15]> INFO Replication
#查看从主节点同步过来的信息
# Replication
role:slave
#当前角色是slave
master_host:192.168.1.101
#主节点地址
master_port:6379
#端口
master_link_status:up
#与主节点的链路状态是up的
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:603
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
|
4、在主节点上检查
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
redis-cli -h 192.168.1.101
192.168.1.101:6379> CLIENT LIST
id
=3
addr=192.168.1.106:39661 fd=5 name= age=344 idle=0 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-
free
=0 obl=0 oll=0 omem=0 events=r cmd=replconf
或者
192.168.1.101:6379> INFO Replication
# Replication
role:master
#当前是主节点
connected_slaves:1
slave0:ip=192.168.1.106,port=6379,state=online,offset=505,lag=0
master_repl_offset:505
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:504
|
5、从节点B上的配置(命令行方式)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
redis-cli -h 192.168.1.107
192.168.1.107:6379> AUTH centos
OK
192.168.1.107:6379> slaveof 192.168.1.101 6379
192.168.1.107:6379> CONFIG SET masterauth centos
#这两条与从节点A在配置文件中修改的内容是一样的
192.168.1.107:6379> SELECT 15
OK
192.168.1.107:6379[15]> GET key1
"hello redis,hello linux"
#在主节点已经提前创建一些数据,所以在从节点能够同步过来
192.168.1.107:6379[15]> INFO Replication
# Replication
role:slave
#当前状态是从节点
master_host:192.168.1.101
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:3543
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.1.107:6379[15]> CONFIG GET slave-
read
-only
#从节点只读功能,默认即是开启的
1)
"slave-read-only"
2)
"yes"
192.168.1.107:6379[15]> CONFIG REWRITE
OK
#将配置写入配置文件中
tail
/etc/redis
.conf
#此时能够看到命令行的信息已经写入到了配置文件中
|
在主节点上虽然配置的字段不多但是还是有很多选项需要我们注意:
1
2
3
4
|
repl-diskless-
sync
no
#不设定无磁盘的同步,即不必等待所有从节点请求到达再一次性完成复制,而是来几个从节点完成几次复制
repl-diskless-
sync
-delay 5
#无磁盘同步的延迟时间
repl-
ping
-slave-period 10
#每隔多长时间去探测slave节点是否存活,单位是秒
repl-timeout 60
#复制的超时时间
|
从节点配置需要注意一点
1
2
|
slave-priority 100
#当主节点故障,多个从节点依据此优先级抢占主节点位置,默认值是100,值越小越优先,0表示不参见抢占
slave-
read
-only
yes
#从节点只读功能即可
|
总结:
redis的主从复制配置起来非常简单,主节点只需开启服务、认证和bind地址
从节点无论在配置文件还是命令行关键就是完成指定主节点地址和端口以及认证口令的配置,可以说两条语句搞定。只是cli模式下要重写入配置文件而已
至此,redis的主从复制实验结束,比MySQL的主从复制简单多了
本文转自 a_pan 51CTO博客,原文链接:http://blog.51cto.com/panpangao/1982608