[redis] linux下主从篇(2)
一.前言
1.为何要主从架构
避免单机故障,主服务器挂掉后,还可以手动切换从服务为主服务继续工作,保持缓存数据完整。
2.主从同步的原理步骤
从服务器连接主服务器,发送SYNC命令;
主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;
二.配置主从
1.环境说明
系统基于CentOS-6.7-x86_64-minimal.iso,源码安装包redis-3.2.4版本,官方说明主从架构最好2.8版本以上
master 192.168.56.102:6379 host102 slave 192.168.56.103:6379 host103
2.关闭防火墙、selinux
#主从两台都操作 [root@host102 ~]# /etc/init.d/iptables stop [root@host102 ~]# setenforce 0 [root@host102 ~]# chkconfig iptables off [root@host102 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
3.redis配置文件
#master端配置 #复制一份默认的配置文件再修改以下个地方 [root@host102 ~]# cp /usr/local/src/redis-3.2.4/redis.conf /etc/redis/6379.conf [root@host102 ~]# vim /etc/redis/6379.conf bind 0.0.0.0 #监控地址 daemonize yes #dameon形式运行 pidfile /var/run/redis_6379.pid #pid文件 logfile "/var/log/redis_6379.log" #启动日志 dbfilename dump.rdb #数据文件 dir /var/lib/redis #数据目录 requirepass mima #配置连接密码
#slave端配置 [root@host103 ~]# vim /etc/redis/6379.conf bind 0.0.0.0 #监控地址 daemonize yes #dameon形式运行 pidfile /var/run/redis_6379.pid #pid文件 logfile "/var/log/redis_6379.log" #启动日志 dbfilename dump.rdb #数据文件 dir /var/lib/redis #数据目录 requirepass mima #配置连接密码 slaveof 192.168.56.102 6379 #指定master masterauth mima #slave认证master密码 slave-read-only yes #设置slave为只读模式
4.启动服务测试读写
#启动服务 #master端 [root@host102 redis]# /usr/local/redis/bin/redis-server /etc/redis/6379.conf #slave端 [root@host103 redis]# /usr/local/redis/bin/redis-server /etc/redis/6379.conf
5.测试读写
#master端 [root@host102 ~]# /usr/local/redis/bin/redis-cli -a mima 127.0.0.1:6379> set name john OK 127.0.0.1:6379> get name "john" 127.0.0.1:6379> info replication # Replication role:master connected_slaves:1 slave0:ip=192.168.56.103,port=6379,state=online,offset=239,lag=0 master_repl_offset:239 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:238 #slave端 [root@host103 redis]# /usr/local/redis/bin/redis-cli -a mima 127.0.0.1:6379> keys * 1) "name" 127.0.0.1:6379> get name "john" 127.0.0.1:6379> set age 28 (error) READONLY You can't write against a read only slave. 127.0.0.1:6379> info replication # Replication role:slave master_host:192.168.56.102 master_port:6379 master_link_status:up master_last_io_seconds_ago:9 master_sync_in_progress:0 slave_repl_offset:309 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