redis简单主从复制463.com:

两台ubuntu 云服务器,分别redis主从服务器,ip地址是:
123.207.96.138(主)
139.199.167.251(从)

是什么 :

安装redis,在这里我建议给redis设置密码,之前看过一篇文章,就是因为redis没有设置密码,导致redis服务器被黑了。
首先修改redis.conf配置文件:
设置所有主机都可以访问:
bind 127.0.0.1 改为 bind 0.0.0.0

  也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主

设置密码:
requiredpass: **** #(密码)

能干嘛:

在139.199.167.251(从服务器上设置):
slaveof 123.207.96.138 6379
masterpass **** #(主服务器密码)

  读写分离,容灾恢复

就这么简单,但是可能会出现一系列问题。最常见的两个问题就是内存限制,当从主服务器复制数据到从服务器的时候,如果数据量多,可能就会出现问题。这是一个要考虑的。
第二个就是主从redis服务器版本对不上。我就是这个问题!
一开始我就是如上的配置,但是在redis-cli上测试:
info replication
显示如下:
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:123.207.96.138
master_port:6379
master_link_status:down
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:336
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

怎么玩:

master_link_status:down说明主从服务器之间的连接断了,这时候一定要看redis的配置文件!!!
redis.log:
5414:S 27 Apr 10:00:57.490 # Can’t handle RDB format version 8
5414:S 27 Apr 10:00:57.490 # Failed trying to load the MASTER
synchronization DB from disk

  1.配从(库)不配主(库)

大概看了下,这应该就是redis版本对不上了,查了下还真是!重装了redis,版本一致,就解决问题了!
redis有问题一定看日志文件。

  2.从库配置:slaveof 主库IP 主库端口

    每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件

    Info replication

  3.修改配置文件细节操作

    拷贝多个redis.conf文件

    开启daemonize yes

    Pid文件名字

    指定端口

    Log文件名字

    Dump.rdb名字  

  4.常用3招:

    一主二仆

    薪火相传

    反客为主

 

在同一台机器的不同端口演示,类似于多台机器

拷贝多份配置文件

[root@node1 myredis]# cp redis.conf redis6379.conf
[root@node1 myredis]# cp redis.conf redis6380.conf
[root@node1 myredis]# cp redis.conf redis6381.conf
[root@node1 myredis]#

 

分别修改对应的配置文件

[root@node1 myredis]# vim redis6379.conf 
[root@node1 myredis]# vim redis6380.conf 
[root@node1 myredis]# vim redis6381.conf 
[root@node1 myredis]# 

 

info replication

127.0.0.1:6379> info replication
# Replication
role:master
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
127.0.0.1:6379> 

 

 

127.0.0.1:6380> info replication
# Replication
role:master
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
127.0.0.1:6380> 

 

 

127.0.0.1:6381> info replication
# Replication
role:master
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
127.0.0.1:6381> 

 

 

一仆二主:

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> keys *
1) “k3”
2) “k2”
3) “k1”

 

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6380> get k4
“v4”
127.0.0.1:6380>

 

127.0.0.1:6381> slaveof 127.0.0.1 6379
OK
127.0.0.1:6381> get k1
“v1”
127.0.0.1:6381>

 

再次输入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=291,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=291,lag=0
master_repl_offset:291
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:290
127.0.0.1:6379>

 

127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_repl_offset:333
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
127.0.0.1:6380>

 

读写分离:

slave节点不能写入

127.0.0.1:6380> set k6 v6
(error) READONLY You can't write against a read only slave.
127.0.0.1:6380> 

 

 

主机挂掉时:

127.0.0.1:6379> SHUTDOWN
not connected> exit
You have new mail in /var/spool/mail/root
[root@node1 ~]#

slave节点状态:

127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:753
master_link_down_since_seconds:17
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
127.0.0.1:6380>

主机修复后:

[root@node1 ~]# redis-server /myredis/redis6379.conf
[root@node1 ~]# redis-cli -p 6379
127.0.0.1:6379> set k7 v7
OK
127.0.0.1:6379>

 

slave节点:

127.0.0.1:6380> get k7
“v7”
127.0.0.1:6380>

在当前这种状体下,主机挂掉后从机不会改变状态,会原地待命

相关文章