redis 搭建集群记录
Redis 单机部署
一、检查docker中是否有redis容器和镜像
#查看所有容器 docker ps -a
#查看镜像 docker images
二、拉取redis镜像
#不指定版本号,默认拉取最新版的redis docker pull redis
#指定的版本号 docker pull redis:5.0.7 查看镜像是否拉取成功docker images

三、启动容器
3.1 直接启动
#myredis是启动之后的docker容器名称 docker run --name myredis -d redis
3.2 以配置文件启动(推荐)
1、创建目录存放redis.conf文件
mkdir /opt/docker_redis
cd /opt/docker_redis
2、下载redis.conf文件
wget http://download.redis.io/redis-stable/redis.conf
(提示wget命令找不到,需要下载yum -y install wget)
3、文件授权
#给指定文件授权 chmod 777 redis.conf
4、修改默认配置信息
vi /opt/docker_redis/redis.conf
bind 127.0.0.1 通过#注释掉,解除本地连接限制

protected-mode yes 默认no,保护模式,限制为本地访问,修改后解除保护模式

daemonize yes 默认no 为不守护进程模式,修改为yes(配置文件中开启了守护进程和docker冲突了daemonize no)

设置密码(建议设置,不设置有风险)

持久化(可选)

5、docker启动redis命令
docker run -p 6379:6379 --name redis -v /docker-software/redis/redis.conf:/etc/redis/redis.conf -v /docker-software/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
1
命令分析
-p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
–name redis 指定该容器名称,查看和进行操作都比较方便。
-v 挂载文件或目录 :前表示主机部分,:后表示容器部分。
-d redis 表示后台启动redis
redis-server /etc/redis/redis.conf
以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis.conf
–appendonly yes 开启redis 持久化
–requirepass 123456 设置密码为123456
6、检查redis容器是否在运行
docker ps
哨兵部署
很明显我们即将搭建的Sentinel容器需要能访问到以上3个容器,故需要在形成Sentinel的Dokcer-compose 使用外置的redis-default网桥。
[root@hadoop4 sentinel]# pwd
/home/Docker/docker-compose/redis/sentinel
[root@hadoop4 sentinel]# cat docker-compose.yml
version: '3'
services:
sentinel1:
image: redis
container_name: redis-sentinel-1
ports:
- 26379:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf
sentinel2:
image: redis
container_name: redis-sentinel-2
ports:
- 26380:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf
sentinel3:
image: redis
container_name: redis-sentinel-3
ports:
- 26381:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
networks:
default:
external:
name: redis_default
创建哨兵文件,将如下内容拷贝进去
[root@hadoop4 sentinel]# cat sentinel1.conf port 26379 dir /tmp sentinel monitor mymaster 172.18.0.3 6379 2 sentinel auth-pass mymaster 123456 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes
注意,以上 172.18.0.3是之前Redis Master/slave启动之后Master节点的IP,通过docker inspect [containerIP]获取, 这里我们要配合设置Master/Slave访问密码。
复制两份sentinel1.conf文件,容器挂载需要
1、主从搭建结束,哨兵搭建完成后检查哨兵是否在工作,通过如下命令;
配置完之后启动哨兵 docker-compose up -d

3.进入容器docker exec -it 容器名称 bash

执行redis-cli -p 哨兵端口

查看主节点状态 出现这个就说明ok了
sentinel master mymaster

查看从节点状态
sentinel slaves mymaster
查询当前主节点对应的ip
SENTINEL get-master-addr-by-name mymaster

sentinel sentinels mymaster #查看mymaster下的哨兵节点信息
在使用REPLICAOF命令或者replicaof配置选项将一个服务器设置为从服务器之后,我们可以通过执行以下命令,让从服务器停止复制,重新变回主服务器:
replicaof no one
服务器在停止复制之后不会清空数据库,而是会继续保留复制产生的所 有数据。
比如,对于之前设置的从服务器127.0.0.1:12345,我们可以通过执行 以下命令,让它停止复制,重新变回主服务器:

3、哨兵节点详解:
-
进入哨兵节点客户端后执行SENTINEL masters命令“显示被监控的所有master以及它们的状态.”
127.0.0.1:26379> SENTINEL masters
1) 1) "name"
2) "mymaster" //被监控主节点的名称
3) "ip"
4) "172.60.0.4" //被监控主节点的ip
5) "port"
6) "6379" //被监控主节点的端口号
7) "runid"
8) "8aaecf3f6a197932b28ed89d2d3936636814c5fe" //被监控主节点的runid[运行]
9) "flags"
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "1017"
19) "last-ping-reply"
20) "1017"
21) "down-after-milliseconds"
22) "30000" //监控主节点不可达超时时间
23) "info-refresh"
24) "2704"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "386306494"
29) "config-epoch" //epochs的配置
30) "1"
31) "num-slaves"
32) "2" //发现从节点个数
33) "num-other-sentinels" //发现其他哨兵节点个数
34) "2"
35) "quorum"
36) "2" //需要同意主节点不可用的Sentinels的数量
37) "failover-timeout"
38) "180000" //延迟时间
39) "parallel-syncs" //复制转移数量
40) "1"
执行SENTINEL slaves mymaster查看从节点的信息:【你会看到有两个从节点的信息】
127.0.0.1:26379> SENTINEL slaves mymaster
1) 1) "name"
2) "172.60.0.3:6379"
3) "ip"
4) "172.60.0.3"
5) "port"
6) "6379"
7) "runid"
8) "e8510d9e9811dec10af1d88153db129284d2e264"
9) "flags"
10) "slave"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "981"
19) "last-ping-reply"
20) "981"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "8170"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "388149449"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "172.60.0.4"
35) "master-port"
36) "6379"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "76787185"
2) 1) "name"
2) "172.60.0.2:6379"
3) "ip"
4) "172.60.0.2"
5) "port"
6) "6379"
7) "runid"
8) "948b5d23e83648c586a5d3056c0b850a9c517887"
9) "flags"
10) "slave"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "981"
19) "last-ping-reply"
20) "981"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "8170"
25) "role-reported"
26) "slave"
27) "role-reported-time"
28) "387258992"
29) "master-link-down-time"
30) "0"
31) "master-link-status"
32) "ok"
33) "master-host"
34) "172.60.0.4"
35) "master-port"
36) "6379"
37) "slave-priority"
38) "100"
39) "slave-repl-offset"
40) "76787185"
执行SENTINEL get-master-addr-by-name mymaster 查看主节点的信息和端口号
127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster
1) "172.60.0.4"
2) "6379"
执行SENTINEL failover mymaster 强制切换主节点不需要得到其他Sentinel
127.0.0.1:26379> SENTINEL failover mymaster
OK -
当我们再次执行查询主节点信息时就会发现主节点已经切换了如下图:

哨兵日志分析:https://www.pianshen.com/article/3161983673/


浙公网安备 33010602011771号