redis 用docker搭建哨兵模式/改密码/rdb和aof持久化
cd /home/soft/redis/config
vi sentinel-26379.conf :
port 26379
sentinel monitor mymaster 192.168.75.10 6379 2
vi sentinel-26380.conf :
port 26380
sentinel monitor mymaster 192.168.75.10 6379 2
vi sentinel-26381.conf :
port 26381
sentinel monitor mymaster 192.168.75.10 6379 2
docker run \
--name sentinel-26379 \
-p 26379:26379 \
-v /home/soft/redis/config/sentinel-26379.conf:/etc/redis/sentinel.conf \
-v /etc/localtime:/etc/localtime \
-d redis redis-sentinel /etc/redis/sentinel.conf
docker run \
--name sentinel-26380 \
-p 26380:26380 \
-v /home/soft/redis/config/sentinel-26380.conf:/etc/redis/sentinel.conf \
-v /etc/localtime:/etc/localtime \
-d redis redis-sentinel /etc/redis/sentinel.conf
docker run \
--name sentinel-26381 \
-p 26381:26381 \
-v /home/soft/redis/config/sentinel-26381.conf:/etc/redis/sentinel.conf \
-v /etc/localtime:/etc/localtime \
-d redis redis-sentinel /etc/redis/sentinel.conf
验证:
docker stop master-redis
docker logs -f salve2-redis:
1:S 05 Jul 2023 15:10:21.325 # Error condition on socket for SYNC: Connection refused
1:S 05 Jul 2023 15:10:22.337 * Connecting to MASTER 192.168.75.10:6379
1:S 05 Jul 2023 15:10:22.337 * MASTER <-> REPLICA sync started
1:S 05 Jul 2023 15:10:22.337 # Error condition on socket for SYNC: Connection refused
1:M 05 Jul 2023 15:10:22.829 * Discarding previously cached master state.
1:M 05 Jul 2023 15:10:22.829 # Setting secondary replication ID to f562378b948c944b4cb6e10307cf5c5b12f349ce, valid up to offset: 17784. New replication ID is 1bfced7bf965e9d707b57d919d958a767285d6dc
1:M 05 Jul 2023 15:10:22.829 * MASTER MODE enabled (user request from 'id=7 addr=172.17.0.1:59476 laddr=172.17.0.4:6381 fd=12 name=sentinel-479eeb4c-cmd age=110 idle=0 flags=x db=0 sub=0 psub=0 ssub=0 multi=4 qbuf=188 qbuf-free=20286 argv-mem=4 multi-mem=169 rbs=8192 rbp=4096 obl=45 oll=0 omem=0 tot-mem=29733 events=r cmd=exec user=default redir=-1 resp=2')
1:M 05 Jul 2023 15:10:22.830 # Could not create tmp config file (Permission denied)
1:M 05 Jul 2023 15:10:22.831 # CONFIG REWRITE failed: Permission denied
1:M 05 Jul 2023 15:10:23.573 * Replica 192.168.75.10:6380 asks for synchronization
1:M 05 Jul 2023 15:10:23.573 * Partial resynchronization request from 192.168.75.10:6380 accepted. Sending 299 bytes of backlog starting from offset 17784.
^C
# salve2-redis 成了主节点
[root@localhost config]# docker exec -it salve2-redis redis-cli -p 6381
127.0.0.1:6381> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.75.10,port=6380,state=online,offset=197757,lag=1
slave1:ip=172.17.0.1,port=6379,state=online,offset=198033,lag=1
master_failover_state:no-failover
master_replid:1bfced7bf965e9d707b57d919d958a767285d6dc
master_replid2:f562378b948c944b4cb6e10307cf5c5b12f349ce
master_repl_offset:198171
second_repl_offset:17784
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:57
repl_backlog_histlen:198115
127.0.0.1:6381> exit
[root@localhost config]# docker exec -it master-redis redis-cli -p 6379
127.0.0.1:6379>
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.75.10
master_port:6381
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_read_repl_offset:209005
slave_repl_offset:209005
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:1bfced7bf965e9d707b57d919d958a767285d6dc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:209005
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:190227
repl_backlog_histlen:18779
127.0.0.1:6379>
注意:当redis的master节点down掉,当重新启动down掉的redis容器节点时,也应重启对应的sentinel容器节点,否则当重新选举的redis的master节点再次down掉,就不会进行选举了。
--------改密码
[root@localhost config]# docker exec -it master-redis /bin/bash
root@dd0386271700:/data# redis-cli -p 6379
127.0.0.1:6379> AUTH 123123 #要大写
OK
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> CONFIG SET requirepass 123123
OK
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) "123123"
127.0.0.1:6379>
--------持久化:
rdb和aof持久化:
无论普通安装或Docker安装的Redis,修改其配置文件,通常位于 /etc/redis/redis.conf 或 /usr/local/etc/redis.conf.
在本例,我是通过外部自定义的配置文件起的redis容器:
docker run \
-p 6379:6379 \
--name master-redis \
--restart=always \
-v /home/soft/redis/data/data6379:/data \ # 容器持久化
-v /home/soft/redis/config/redis6379.conf:/etc/redis/redis.conf \
-v /etc/localtime:/etc/localtime \
-d redis redis-server /etc/redis/redis.conf
那么修改自定义的配置文件,再重启对应redis容器即可:
[root@localhost config]# vi /home/soft/redis/config/redis6379.conf
----------------------------------------------------------
save 3600 1 # RDB 持久化,
appendonly yes # 启用 AOF 持久化
appendfsync always # AOF 持久化:在每个写操作后立即将日志同步到磁盘
#appendfsync everysec # AOF 持久化:将每秒将日志同步到磁盘
----------------------------------------------------------
docker restart master-redis