内容简介:Redis的主从复制配置起来比较简单,主从配置有以下特点:在一台节点上配置文件中定义自己是谁的从节点,并且启用主节点密码认证即可。下面使用3台主机配置一主两从的结构,redis使用一主多从的结构时还可以实现像mysql MHA那样的复制集群,当master节点宕机后,可以在两个slave节点中根据优先级选举新的master。环境准备好之后,具体情况如下:
Redis的主从复制配置起来比较简单,主从配置有以下特点:
- 一个Master可以有多个slave主机,支持链式复制
- Master以非阻塞方式同步数据至slave主机
在一台节点上配置文件中定义自己是谁的从节点,并且启用主节点密码认证即可。下面使用3台主机配置一主两从的结构,redis使用一主多从的结构时还可以实现像mysql MHA那样的复制集群,当master节点宕机后,可以在两个slave节点中根据优先级选举新的master。
-
安装Redis
本次采用源码编译的方式安装Redis,执行相关的命令如下:
#下载 redis 安装包 cd /usr/local/src wget http://download.redis.io/releases/redis-5.0.3.tar.gz #解压安装包 tar -zxvf redis-5.0.3.tar.gz #拷贝到/usr/local/redis目录 mkdir -p /usr/local/redis #编译安装 make & make install #redis安装完成后,redis-server、redis-cli等程序默认安装在/usr/local/redis/src目录中,我们需要将它安装到系统搜索路径,并安装为系统服务,方便在任何终端访问,并且开机自动启动。 cd /usr/local/src/redis/utils ./install_server.sh #重复上述安装操作,安装redis到6380和6381端口 ./install_server.sh
环境准备好之后,具体情况如下:
三个Redis实例分别安装以下IP地址和端口,角色分别如下
192.168.1.103 6379 master
192.168.1.103 6380 slave
192.168.1.103 6381 slave
- 配置Master节点
bind 0.0.0.0 #绑定地址 (绑定在127.0.0.1,只有本机客户端可以访问,其他服务器无法访问,绑定在0.0.0.0上,如果没有端口限制,那么其他服务器则可以连接该服务器的该端口) requirepass 123456 #启用密码认证 #默认master节点修改这两项就可以了,也可以进行其他设置
- 配置Slave节点
bind 0.0.0.0 #定义master信息 slaveof 192.168.1.103 6379 #认证 masterauth 123456 #从节点上配置这三项页就可以,其他参数可以根据情况选择调整即可。
修改后记得重启服务,可以登录到master节点查看信息。
- 首先使用client list命令查看
[root@192 bin]# redis-cli -p 6379 -a 123456 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 127.0.0.1:6379> client list id=3 addr=127.0.0.1:44273 fd=7 name= age=2456 idle=1 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 id=4 addr=127.0.0.1:45342 fd=8 name= age=2453 idle=1 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 id=6 addr=127.0.0.1:49306 fd=9 name= age=6 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client 127.0.0.1:6379> cmd=client 表示是master cmd=replconf 表示是slave
- 首先使用info replication 命令查看
127.0.0.1:6379> info replication # Replication role:master #自己的角色 connected_slaves:2 #从节点数量 slave0:ip=127.0.0.1,port=6380,state=online,offset=3738,lag=0 #从节点信息 slave1:ip=127.0.0.1,port=6381,state=online,offset=3738,lag=1 #从节点信息 master_replid:061bcdd36e3b8d9a0c38d29dc762e908445baad6 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:3738 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:3738 127.0.0.1:6379>
可以看到主从差不多已经配置好了,接下来可以进行简单的验证复制,在master节点设置一个key,看两个slave节点复制情况。
Master节点创建一个key:
[root@192 bin]# redis-cli -p 6379 -a 123456 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 127.0.0.1:6379> set jobNo 123456 OK 127.0.0.1:6379>
从slave 6380 :
[root@192 bin]# redis-cli -p 6380 -a 123456 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 127.0.0.1:6380> get jobNo "123456" 127.0.0.1:6380>
从slave 6381:
[root@192 bin]# redis-cli -p 6381 -a 123456 Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 127.0.0.1:6381> get jobNo "123456" 127.0.0.1:6381>
可以看出在master上设置的key已经同步到了两个slave上。
slave节点定义也可以通过指令设置,设置后立即生效,并且会被保存至配置文件中,指令配置方式如下:
配置slave节点
redis-cli> SLAVEOF <MASTER_IP> <MASTER_PORT> redis-cli> CONFIG SET masterauth <PASSWORD>
redis主从复制相关配置
下面是redis主从复制场景的一些可调参数,需要根据实际环境调整
- slave-serve-stale-data yes : 是否可以把不新鲜的数据服务与客户端
- slave-read-only yes : 从节点只读,启用slaveof定义后才生效
- repl-diskless-sync no :是否同时向多个从节点同时发数据
- repl-diskless-sync-delay 5 :发送的延迟时间
- repl-ping-slave-period 10 探测从节点状态
- repl-timeout 60 探测节点超时时间
- repl-disable-tcp-nodelay no : 启用nodelay
- repl-backlog-size 1mb
- slave-priority 100 : 从节点优先级,复制集群中,主节点故障时,sentinel应用场景中的主节点选举时使用的优先级;数字越小优先级越高,但0表示不参与选举;
- min-slaves-to-write 3:主节点仅允许其能够通信的从节点数量大于等于此处的值时接受写操作;
- min-slaves-max-lag 10:从节点延迟时长超出此处指定的时长时,主节点会拒绝写入操作;
最后更新于 2019-02-27 22:26:15 并被添加「redis」标签,已有 2 位童鞋阅读过。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。