config set appendonly yes 临时生效
如果想永久生效的话,执行
config rewrite
并不是所有的都支持修改
config set bind ip 修改bind参数会报错
(error) ERR Unsupported CONFIG parameter:bind 只能通过配置文件修改
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 将文件保存到硬盘上
redis 主从复制配置和使用都非常简单,通过主从复制可以允许多个slave server拥有和mater server相同的数据库副本.下面是redis主从复制的一些特点
a.master可以有多个slave
b.除了多个slave连接到相同的master外,slave也可以连接其他slave形成图状结构
c .主从复制不会阻塞master,也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求
相反slave在初次同步数据时则会阻塞不能处理client的请求
d.主从复制可以用来提高系统的可以伸缩性,我们可以用多个slave 专门用于client的读请求 比如sort操作可以使用slave来处理,也可以用来做简单的数据冗余
e 可以在master 禁用数据持久化,只需注释掉master配置文件中的所有save配置,然后只在slave上配置数据持久化
首先修改主的配置文件
vim /etc/redis/7000.conf 将bind注释掉
然后启动7000端口的redis服务 redis-server /etc/redis/7000.conf
vim /etc/redis/7001.conf
将 slaveof改成 slaveof 127.0.0.1 7000 指向主服务器的端口
然后启动 7001 端口的redis服务 redis-server /etc/redis/7001.conf
通过客户端工具
redis-cli -p 7000 info 查看主的状态
# Replication
role:master master
connected_slaves:1 从机的个数为 1个
slave0:ip=127.0.0.1,port=7001,state=online,offset=155,lag=0 状态为 online
master_repl_offset:155
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:154
redis-cli -p 7001 info 查看从的状态
# Replication
role:slave
master_host:127.0.0.1
master_port:7000
master_link_status:up 状态为 up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:225
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
检查是否同步
先连接主服务 ,并设定两个值
[[email protected] redis]# redis-cli -p 7000
127.0.0.1:7000> set s1 zhuchenghan
OK
127.0.0.1:7000> set s2 zhangqidong
OK
127.0.0.1:7000>
127.0.0.1:7000> get s1
"zhuchenghan"
127.0.0.1:7000>
127.0.0.1:7000> get s2
"zhangqidong"
127.0.0.1:7000>
127.0.0.1:7000>
127.0.0.1:7000> mget s1 s2
1) "zhuchenghan"
2) "zhangqidong"
在从服务器上进行验证 并且从服务器只能读
[[email protected] ~]# redis-cli -p 7001
127.0.0.1:7001>
127.0.0.1:7001>
127.0.0.1:7001>
127.0.0.1:7001> get s1
"zhuchenghan"
127.0.0.1:7001>
127.0.0.1:7001> get s2
"zhangqidong"
127.0.0.1:7001>
127.0.0.1:7001> mget s1 s2
1) "zhuchenghan"
2) "zhangqidong"
127.0.0.1:7001>
127.0.0.1:7001> set s1 a
(error) READONLY You can‘t write against a read only slave. (只读)
在主上修改 key 值 s1
127.0.0.1:7000> set s1 www.baidu.com
OK
127.0.0.1:7000>
127.0.0.1:7000> get s1
在从上验证 s1
127.0.0.1:7001> get s1
"www.baidu.com"
说明主从同步 没问题
可以再添加一条 把 其变更 主-从--从
此时我们如果将主 7000端口的服务给停掉,这时候 从 7001 就down掉了
我们如果修改7001 的/etc/redis/7001.conf 的配置文件 将slaveof 给删除或注释掉以后
再重新启动 7001 此时 7001 的状态就为 master 了