一、文档参考引用
使用redis 安装配置.note安装redis后进行主从配置,在同一台主机上搭建
本文参考https://www.cnblogs.com/gossip/p/5992716.html和https://www.cnblogs.com/think-in-java/p/5123884.html
二、主要配置情况
说明:当前是使用了同一个主机配置(实际环境中应该分部在多台主机上),所以都用了IP为127.0.0.1
1、按照1主2从的结构搭建,即1个Master,2个Slaver节点
2、Redis配置文redis.conf改为带端口号名称以便识别redis端口号.conf的配置
3、Slaver连接Master:slaveof host:ip (测试时使用slaveof手动连接master,正式环境使用配置文件)
4、查看主从信息:info Replication
daemonize (后台运行) |
pidfile |
port |
logfile(日志) |
# slaveof <masterip> <masterport> (测试时使用slaveof手动连接master,正式环境使用配置文件) |
||
Master |
yes |
/usr/local/dblog/redis/redis6379.pid |
6379 |
"/usr/local/dblog/redis/redis6379.log" |
slaveof no one |
|
Slaver1 |
yes |
/usr/local/dblog/redis/redis6381.pid |
6381 |
"/usr/local/dblog/redis/redis6381.log" |
slaveof 127.0.0.1 6379 |
|
Slaver2 |
yes |
/usr/local/dblog/redis/redis6382.pid |
6382 |
"/usr/local/dblog/redis/redis6382.log" |
slaveof 127.0.0.1 6379 |
# mkdir -p /usr/local/dblog/redis
# mkdir -p /usr/local/dbdata/redis
# mkdir -p /usr/local/dbconf/redis
配置情况如下(其中6479端口号可以更改为对应的):
[root@localhost redis]# grep ^[^#] redis6379.conf
bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /usr/local/dblog/redis/redis6379.pid
loglevel notice
logfile "/usr/local/dblog/redis/redis6379.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump6379.rdb
dir /usr/local/dbdata/redis
# slaveof <masterip> <masterport> 指定主
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
另两配置文件可直接复制后进行修改
# sed -i s/6379/6381/g redis6381.conf
# sed -i s/6379/6382/g redis6382.conf
三、开启实例手动测试
1、启动实例
# redis-server /usr/local/dbconf/redis/redis6379.conf
# redis-server /usr/local/dbconf/redis/redis6381.conf
# redis-server /usr/local/dbconf/redis/redis6382.conf
2、连接实例查看信息
1)Replication信息,三个端口的基本一样,role都为master
# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> info Replication
# Replication
role:master
connected_slaves:0
master_replid:9499d69fa68edd997118285e8d84db5471a169ef
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
3)手动从指定主(在从上操作,两个从机操作方式一样,返回信息也一相同)
127.0.0.1:6381> slaveof 127.0.0.1 6379
OK
127.0.0.1:6381> 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:0
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:e7bacd0fdeef91da69221a778370c5f3dc0f2170
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:0
指定后主的Replication信息
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6381,state=online,offset=34735,lag=1
slave1:ip=127.0.0.1,port=6382,state=online,offset=34735,lag=0
master_replid:7f9a262ec80944797499774fdd7a00043acebf9b
master_replid2:21a4e84ab69894128307bcd58c57e4d636b5c739
master_repl_offset:34867
second_repl_offset:30702
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:16296
repl_backlog_histlen:18572
4)主从同步测试
在主上执行
127.0.0.1:6379> set test 'I am test'
OK
在备上执行
127.0.0.1:6381> get test
"I am test"
127.0.0.1:6381> set aa bb
(error) READONLY You can't write against a read only slave. 可以发现从只读
5)手动操作测试主挂掉换主
在主上执行
127.0.0.1:6379> shutdown
not connected>
在从(6381)上执行
127.0.0.1:6381> slaveof no one
OK
在从(6382)上执行,将指定主127.0.0.1 6381
127.0.0.1:6382> slaveof 127.0.0.1 6381
OK
这样从(6381)就为当前主了
手动将6379拉起后指定主6381
# redis-server /usr/local/dbconf/redis/redis6379.conf
# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> slaveof 127.0.0.1 6381
OK
127.0.0.1:6381> info Replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6382,state=online,offset=16309,lag=1
slave1:ip=127.0.0.1,port=6379,state=online,offset=16309,lag=1
master_replid:21a4e84ab69894128307bcd58c57e4d636b5c739
master_replid2:e7bacd0fdeef91da69221a778370c5f3dc0f2170
master_repl_offset:16309
second_repl_offset:2274
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:16309
四、配置哨兵从而实现自动主从切换
sentinel参考:http://doc.redisfans.com/topic/sentinel.html
1)修改配置文件,配置文件参考:https://www.jianshu.com/p/f0ea643f7825 , https://www.cnblogs.com/zhoujinyi/p/5570024.html
# cp sentinel.conf sentinel26379.conf
# grep ^[^#] /usr/local/dbconf/redis/sentinel26379.conf 红色字体是自己修改的,其中有的配置会根据当前redis服务情况自动调整
port 26379
sentinel myid f6c05ea79855664688492388058f0568c8b02f14
dir "/tmp"
sentinel monitor mymaster 127.0.0.1 6382 2
sentinel config-epoch mymaster 5
sentinel leader-epoch mymaster 5
sentinel known-slave mymaster 127.0.0.1 6381
sentinel known-slave mymaster 127.0.0.1 6379
sentinel current-epoch 5
sentinel announce-ip 127.0.0.1 #这里如果是本机127.0.0.1可以不用配置
sentinel announce-port 6379
logfile "/usr/local/dblog/redis/sentinel26379.log"
daemonize yes
2)启动sentinel
# redis-server /usr/local/dbconf/redis/sentinel26379.conf --sentinel
另一种启动方式 # redis-sentinel /usr/local/dbconf/redis/sentinel26379.conf
3)sentinel服务本身也不是万能的,也会宕机,所以我们还得部署sentinel集群,象我这样多启动几个sentinel。
关注这个配置:sentinel monitor mymaster 127.0.0.1 6382 2 这个后面的数字2,是指当有两个及以上的sentinel服务检测到master宕机,才会去执行主从切换的功能。
4)相关日志