标签:linux redis
redis的主从复制:
主节点对内存数据直接进行一次快照,并将快照文件发给从节点,从节点在本机的内存空间重构数据库,完成复制,主节点的数据就会同步到从节点上
特点:
一个Master可以有多个slave主机,支持链式复制;
Master以非阻塞方式同步数据至slave主机;
实验说明:
本实验使用三台设备,一主二从,通过修改配置文件和在命令行操作两种方式完成从节点的配置
1、安装redis软件包、启动服务、同时同步时间
yum -y install redis systemctl start redis.service ntpdate 172.18.0.1
2、主节点配置
主节点开启认证功能、指定监听地址,不用做其他的操作
vim /etc/redis.conf requirepass centos bind 0.0.0.0 #本实验环境就监听所有地址,实际场景中应该是监听提供服务的ip
3、从节点A上的配置(修改配置文件的方式)
修改监听地址、auth认证
vim /etc/redis.conf requirepass centos bind 0.0.0.0
关联的主节点信息
slaveof 192.168.1.101 6379 #主节点的地址和端口 masterauth centos #主节点配置的认证口令 #从节点只需配置这些,很简单
然后启动redis服务,在本机检查结果
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、在主节点上检查
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上的配置(命令行方式)
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 #此时能够看到命令行的信息已经写入到了配置文件中
在主节点上虽然配置的字段不多但是还是有很多选项需要我们注意:
repl-diskless-sync no #不设定无磁盘的同步,即不必等待所有从节点请求到达再一次性完成复制,而是来几个从节点完成几次复制 repl-diskless-sync-delay 5 #无磁盘同步的延迟时间 repl-ping-slave-period 10 #每隔多长时间去探测slave节点是否存活,单位是秒 repl-timeout 60 #复制的超时时间
从节点配置需要注意一点
slave-priority 100 #当主节点故障,多个从节点依据此优先级抢占主节点位置,默认值是100,值越小越优先,0表示不参见抢占 slave-read-only yes #从节点只读功能即可
总结:
redis的主从复制配置起来非常简单,主节点只需开启服务、认证和bind地址
从节点无论在配置文件还是命令行关键就是完成指定主节点地址和端口以及认证口令的配置,可以说两条语句搞定。只是cli模式下要重写入配置文件而已
至此,redis的主从复制实验结束,比MySQL的主从复制简单多了
本文出自 “a_pan” 博客,谢绝转载!
标签:linux redis
原文地址:http://panpangao.blog.51cto.com/10624093/1982608