redis 主从复制 【待验证】

来源:互联网 发布:mac的密码忘记了 编辑:程序博客网 时间:2024/06/10 05:05

主从复制

Redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。

redis主从复制的特点:

1.一台master可以拥有多个slave(1对多的关系)

2.多个slave可以连接同一个master外,还可以连接到其他slave(这样做的原因是如果masterdown掉之后其中的一台slave立马可以充当master的角色,这样整个服务流程不受影响)

3.中从复制不会阻塞master,在同步数据的同时,master可以继续处理client请求。

4.提高系统的伸缩性

redis主从复制的过程:

1.slave与master建立连接,发送sync同步命令。

2.Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新得写命令并缓存。

3.后台完成保存后,将文件发送给slave

4.slave将文件保存到硬盘上

配置主从服务器:

配置slave服务器很简单,只需要在slave的配置文件中加入以下配置:

slaveof masterip masterport

如果主机开启了登录验证,那么还需要加入下面这句:

masterauth authpassword

然后启动从机,首先主机会发快照给从机,从机的数据库会更新到和主机相同的状态,然后往主机里写内容,从机也会随之更新。

如果我们在从机上写数据那么会报错:

(error) READONLY You can't write against a read only slave.

我们可以用info命令来查看主从服务器的信息,在从机上用info命令可以看到

role:slave

master_host:masterip

master_port:masterport

master_link_status:up证明和主机处在连接状态

在主机上用info命令

role:master

同时连接着几台从机

connected_slaves:1

同时可以查看连接到主机上的从机的ip和在线状态

slave0:ip=192.168.1.107,port=6379,state=online,offset=1709,lag=1



=============================================================第二篇

redis是一个键值(key-value)存储系统。和Memcached类似,它支持存储的value类型有很多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。redis还会周期性把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

环境规划:
master:192.168.1.250  6379
slave:192.168.1.251   6379
slave:192.168.1.252   6379
auth:system

1.下载安装redis数据库
master节点:
[root@node1 home]# wget http://download.redis.io/releases/redis-2.8.17.tar.gz[root@node1 home]# wgethttp://download.redis.io/releases/redis-2.8.17.tar.gz
[root@node1 home]# tar xvf redis-2.8.17.tar.gz  -C /usr/local/
[root@node1 home]# cd /usr/local/redis-2.8.17/
[root@node1 redis-2.8.17]# make && make install
[root@node1 redis-2.8.17]# echo $?
0
[root@node1 redis-2.8.17]#

slave1,slave2和master节点安装是一样

2.修改配置文件
master节点:
[root@node1 redis-2.8.17]# vim redis.conf
daemonize yes                    --进程后台启动
logfile /var/log/redis.log       --日志文件
syslog-enabled no                --日志不写进系统日志
dir /usr/local/redis-2.8.17/data      --数据文件存放
requirepass system                      --认证密码
 
slave1和slave2节点:
[root@node2 redis-2.8.17]# vim redis.conf
daemonize yes
logfile /var/log/redis.log 
syslog-enabled no
dir /usr/local/redis-2.8.17/data
slaveof 192.168.1.250 6379           --主服务器的IP地址和端口
masterauth system                       --主服务器上的认证密码

3.启动服务,检查端口
master节点:
[root@node1 redis-2.8.17]# cd src/
[root@node1 src]# ./redis-server ../redis.conf 
[root@node1 src]# netstat -antp | grep 6379
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      23672/./redis-serve 
tcp        0      0 192.168.1.250:6379          192.168.1.252:51446         TIME_WAIT   -                   
tcp        0      0 192.168.1.250:6379          192.168.1.251:54193         TIME_WAIT   -                   
tcp        0      0 192.168.1.250:6379          192.168.1.252:51620         ESTABLISHED 23672/./redis-serve 
tcp        0      0 192.168.1.250:6379          192.168.1.251:54208         ESTABLISHED 23672/./redis-serve 
tcp        0      0 :::6379                     :::*                        LISTEN      23672/./redis-serve 
[root@node1 src]#

slave1节点:
[root@node2 redis-2.8.17]# cd src/
[root@node2 src]# ./redis-server  ../redis.conf 
[root@node2 src]# netstat -antp | grep 6379
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      22435/./redis-serve 
tcp        0      0 192.168.1.251:54031         192.168.1.250:6379          TIME_WAIT   -                   
tcp        0      0 192.168.1.251:54193         192.168.1.250:6379          ESTABLISHED 22435/./redis-serve 
tcp        0      0 :::6379                     :::*                        LISTEN      22435/./redis-serve 
[root@node2 src]#

slave2节点:
[root@node3 redis-2.8.17]# cd src/
[root@node3 src]# ./redis-server  ../redis.conf 
[root@node3 src]# netstat -antp | grep 6379
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      20656/./redis-serve 
tcp        0      0 192.168.1.252:51620         192.168.1.250:6379          TIME_WAIT   -                   
tcp        0      0 127.0.0.1:39998             127.0.0.1:6379              TIME_WAIT   -                   
tcp        0      0 192.168.1.252:51626         192.168.1.250:6379          ESTABLISHED 20656/./redis-serve 
tcp        0      0 :::6379                     :::*                        LISTEN      20656/./redis-serve 
[root@node3 src]#

4.测试数据是否同步
master节点:
[root@node1 src]# ./redis-cli 
127.0.0.1:6379> set name 123456
(error) NOAUTH Authentication required.        --需要认证权限
127.0.0.1:6379> auth system
OK
127.0.0.1:6379> set name 123456
OK
127.0.0.1:6379> get name
"123456"
127.0.0.1:6379> set age Hello
OK
127.0.0.1:6379> get age
"Hello"
127.0.0.1:6379>

slave1和slave2节点查看数据:
[root@node2 src]# ./redis-cli 
127.0.0.1:6379> get name             --在从服务器不需要认证权限
"123456"
127.0.0.1:6379> get age
"Hello"
127.0.0.1:6379>

[root@node3 src]# ./redis-cli 
127.0.0.1:6379> get name
"123456"
127.0.0.1:6379> get age
"Hello"
127.0.0.1:6379>



0 0
原创粉丝点击