关于 Redis Replication
Redis支持异步主从复制,允许一个或多个Redis服务器 隶属于Redis Master服务器的精确副本。Redis主从复制的配置是非常简单的,只需安装几个步骤即可。有关Redis更多信息,请参阅官方的Redis复制文档。
对于生产环境,将数据复制到至少两个节点被认为是最佳的做法。这允许在环境故障的情况下恢复,这在您的应用程序用户基础增长以及体验尤为重要。它还允许您安全地与生产数据交互,而无需修改或影响性能。
1.规划(由于资源有限,暂用2台Server做为测试):
OS:CentOS 7.4
Redis 4.0.1
Redis Master 10.10.204.64
Redis Slave 10.10.204.65
2.配置Redis Replication之前首先需要安装Redis实例服务:
《Linux Centos7 Redis 4.0.1 源码编译安装配置》
3.主从互相添加Hosts:
主服务器:
# echo “10.10.204.64 10-10-204-64” >> /etc/hosts # echo “10.10.204.65 10-10-204-65” >> /etc/hosts从服务器:
# echo “10.10.204.65 10-10-204-65” >> /etc/hosts # echo “10.10.204.64 10-10-204-64” >> /etc/hosts
4.Redis.conf 配置文件:
其实Slave的配置和Master基本一致,为什么这么说呢,当Master挂掉之后,那么Slave就担任了Master工作,所以一些参数就必须和Master相同,所以主从分别,只需要修改相应的pidfile,端口,日志文件名,并配上Master的地址和认证密码即可,生产环境亦是如此。
Master & Slave 通用配置:
# vim /usr/local/redis/redis.conf
port 6379 #端口信息 daemonize yes #如果需要在后台运行,把该项改为yes pidfile /var/run/redis_6379.pid #主从PID路径 logfile "/usr/local/redis/log/redis.log" #设置日志文件路径 requirepass RenwoleQxl5qpKHrh9khuTW #设置设置256位连接密码 masterauth RenwoleQxl5qpKHrh9khuTW #如果Master设置了密码,则Slave需要通过masterauth配置密码 repl-diskless-sync yes #无硬盘复制功能通过以下配置 repl-diskless-sync-delay 5 maxmemory-policy volatile-lru #最大内存策略:如果达到内存限制了,Redis如何选择删除key.多选 repl-ping-slave-period 10 #多少秒ping一次Master repl-timeout 60 #复制的超时时间,这个时间一定要大于ping的时间 timeout 300 #客户端闲置多长时间后断开连接,默认为0关闭此功能 min-slaves-to-write 3 #最小slave链接数默认为0 min-slaves-max-lag 10 #最小的slave,最大延迟数默认为10 dir /usr/local/redis-4.0.1 #自定义数据存储路径 tcp-keepalive 60 #建议60,首先找到设置并将其设置为60秒 appendonly yes 为了提高耐用性保证,可以启用仅追加文件的持久性,这助于最大程度减少系统故障时的数据丢失,同时IO的读写会付出相应的代价 appendfilename "redis-staging-ao.aof" repl-backlog-ttl 3600 #在某些时候, master 不再连接 slaves,backlog 将被释放。如果设置为 0 意味着不释放 backlog maxclients 10000 #当连接数超过这个值时,redis 将不再接收其他连接请求,客户端尝试连接时将收到 error 信息
5.Master 配置:
bind 127.0.0.1 10.10.204.64
6.Slave 配置:
bind 127.0.0.1 10.10.204.65 slaveof 10.10.204.64 6379 #设置Master的IP与端口注意:当从服务器执行了slaveof命令后,从服务器中原来的数据将清空,重新加载主服务器中的数据。
7.重新启动 Master & Slave 查看主从连接状态:
# systemctl restart redis
8.查看 Master 角色以及Slave连接状态(注意:红色部分):
# redis-cli 10.10.204.64:6379> auth RenwoleQxl5qpKHrh9khuTW OK 10.10.204.64:6379> info Replication # Replication role:master connected_slaves:1 slave0:ip=10.10.204.65,port=6379,state=online,offset=101640,lag=1 master_replid:cd78097afde482dd3ef18cf74ec66da7f2d7d140 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:101640 ...
9.查看Slave角色以及连接Master的状态(注意:红色部分):
# redis-cli 10.10.204.65:6379> auth RenwoleQxl5qpKHrh9khuTW OK 10.10.204.65:6379> info Replication # Replication role:slave master_host:10.10.204.64 master_port:6379 master_link_status:up master_last_io_seconds_ago:7 master_sync_in_progress:0 slave_repl_offset:101906 slave_priority:100 slave_read_only:1 connected_slaves:0 ...
10.在Master节点上操作:
10.10.204.64:6379> set key renwole.com OK 10.10.204.64:6379> scan 0 1) "0" 2) 1) "name" 2) "key" 3) "name1"
11.检查Slave节点是否同步:
10.10.204.65:6379> scan 0 1) "0" 2) 1) "key" 2) "name1" 3) "name" 10.10.204.65:6379> get key "renwole.com"Slave信息显示已经成功同步。
注:Redis Replication 配置要求需要两台或多台redis实例之间保证端口相互通信,否则不能正常实现Redis复制。
12.Redis主从复制看起来完美无瑕,但由于Redis目前仅支持主从复制备份,而无法提供故障自动切换。所以这并不能满足我们的业务需求。
请参阅《Redis Sentinel冗余配置为Redis实例提供自动故障切换》高可用(HA)解决方案。