docker搭建redis哨兵模式集群-docker搭建redis哨兵模式集群


一、搭建redis一主两从集群

1.创建docker网络,为了容器间相互通信

docker network create redis

2.运行redis容器

docker run  -it -d --network redis --restart=always --name redis-master -p 6379:6379 -p 26379:26379  redis
docker run  -it -d --network redis --restart=always --name redis-slave-1 -p 6380:6379 -p 26380:26379  redis
docker run  -it -d --network redis --restart=always --name redis-slave-2 -p 6381:6379 -p 26381:26379  redis

3.查看master的ip地址

[root@aliyun ~]# docker inspect redis-master|grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

4.添加第一个slave节点

#进入redis-slave-1的容器内部
[root@aliyun ~]# docker exec -it redis-slave-1 /bin/bash
root@38493fef3e03:/data# redis-cli
127.0.0.1:6379> slaveof 172.17.0.2  6379
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:afd4ad72b47ce253b15470232f20ae5e4f768b29
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

可以看到第一个slave节点添加成功

5.添加第二个slave节点

#进入第二个slave节点(添加成功)
[root@aliyun ~]# docker exec -it redis-slave-2 /bin/bash
root@7d4124eb4f7b:/data# redis-cli
127.0.0.1:6379> slaveof 172.17.0.2  6379
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:42
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:afd4ad72b47ce253b15470232f20ae5e4f768b29
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:0

添加成功

6.登陆master查看信息

[root@aliyun ~]# docker exec -it redis-master /bin/bash
root@fb8299058ead:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.3,port=6379,state=online,offset=574,lag=1
slave1:ip=172.17.0.4,port=6379,state=online,offset=574,lag=1
master_replid:afd4ad72b47ce253b15470232f20ae5e4f768b29
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:574
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:574

信息中可以看到两个slave的信息(ip、端口、状态等内容)

7.测试主从同步

在master节点存数据,看slave节点是否能获取到

[root@aliyun ~]# docker exec -it redis-master /bin/bash
root@fb8299058ead:/data# redis-cli
127.0.0.1:6379> set name 12345
OK
127.0.0.1:6379> get name
"12345"
127.0.0.1:6379> exit
root@fb8299058ead:/data# exit
exit

进入slave1节点查看数据(同步成功)

[root@aliyun ~]# docker exec -it redis-slave-1  /bin/bash
root@38493fef3e03:/data# redis-cli
127.0.0.1:6379> get name
"12345"
127.0.0.1:6379> exit
root@38493fef3e03:/data# exit
exit

进入slave2节点查看数据(同步成功)

[root@aliyun ~]# docker exec -it redis-slave-2  /bin/bash
root@7d4124eb4f7b:/data# redis-cli
127.0.0.1:6379> get name
"12345"
127.0.0.1:6379>

二、搭建哨兵

1.在每个容器中安装vim,psutils

#需要进入容器中执行
apt-get update
apt-get install vim
apt-get install procps

2.在每个容器中创建哨兵文件

#sentinel.conf
port 26379
daemonize yes
logfile "sentinel.log"
sentinel monitor mymaster  172.17.0.2   6379 2

其中,sentinel monitor mymaster 172.17.0.2 6379 2配置的含义是:该哨兵节点监控172.17.0.2:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移

启动哨兵(每个节点都需要启动)

哨兵节点的启动有两种方式,二者作用是完全相同的:

redis-sentinel sentinel.conf
redis-server   sentinel --sentinel

下面可以看到redis-sentinel已经启动

root@7d4124eb4f7b:/data# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
redis        1     0  0 06:16 pts/0    00:00:11 redis-server *:6379
root      1370     0  0 09:02 ?        00:00:01 redis-sentinel *:26379 [sentinel]
root      1380     0  0 09:03 pts/1    00:00:00 /bin/bash
root      1390  1380  0 09:10 pts/1    00:00:00 ps -ef

3.查看哨兵信息

root@7d4124eb4f7b:/data# redis-cli -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.17.0.2:6379,slaves=2,sentinels=3
127.0.0.1:26379>

4.演示故障转移

[root@aliyun ~]# docker stop redis-master
redis-master

随便进入一个slave节点内部

[root@aliyun ~]# docker exec -it redis-slave-2  /bin/bash
root@7d4124eb4f7b:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:down(这里可以看到master状态为down)
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:149730
master_link_down_since_seconds:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:afd4ad72b47ce253b15470232f20ae5e4f768b29
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:149730
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:149688

127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.17.0.3(这里可以看到master的ip已经发生了改变)
master_port:6379
master_link_status:up(状态正常)
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:150428
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:c9bea460cf62fdc27109798770e115609594e541
master_replid2:afd4ad72b47ce253b15470232f20ae5e4f768b29
master_repl_offset:150428
second_repl_offset:149731
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:43
repl_backlog_histlen:150386

redis主节点挂掉,两个slave会进行选举,时间为30秒

再将之前的master节点start,会发现之前的master已经成为slave节点

[root@aliyun ~]# docker start redis-master
[root@aliyun ~]# docker exec -it redis-master /bin/bash
root@fb8299058ead:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.17.0.3
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0

进去当前的master节点看下当前信息

[root@aliyun ~]# docker exec -it redis-slave-1  /bin/bash
root@38493fef3e03:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.4,port=6379,state=online,offset=268053,lag=1
slave1:ip=172.17.0.2,port=6379,state=online,offset=268053,lag=1
master_replid:c9bea460cf62fdc27109798770e115609594e541
master_replid2:afd4ad72b47ce253b15470232f20ae5e4f768b29
master_repl_offset:268323
second_repl_offset:149731
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:268323
127.0.0.1:6379> info sentinel
127.0.0.1:6379> exit
root@38493fef3e03:/data# redis-cli -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=172.17.0.3:6379,slaves=2,sentinels=3
127.0.0.1:26379>

到此就结束了!!!

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
搭建 Redis 集群模式,可以使用 Docker 进行部署。以下是一些步骤供参考: 1. 首先,确保已经安装了 DockerDocker Compose。 2. 创建一个文件夹,用于存放 Redis 相关的配置文件和数据。 3. 在该文件夹中创建一个名为 `docker-compose.yml` 的文件,并将以下内容复制到文件中: ```yaml version: '3' services: redis-1: image: redis command: redis-server --port 7001 ports: - 7001:7001 volumes: - ./redis1:/data networks: - redis-cluster redis-2: image: redis command: redis-server --port 7002 ports: - 7002:7002 volumes: - ./redis2:/data networks: - redis-cluster redis-3: image: redis command: redis-server --port 7003 ports: - 7003:7003 volumes: - ./redis3:/data networks: - redis-cluster networks: redis-cluster: ``` 4. 运行以下命令启动 Redis 集群的容器: ```bash docker-compose up -d ``` 5. 接下来,需要使用 `redis-cli` 命令行工具连接到其中一个容器的 Redis 实例,并进行集群初始化。例如,连接到 `redis-1` 容器的 Redis 实例: ```bash docker exec -it <redis-1_container_id> redis-cli ``` 6. 在 Redis 命令行界面中,运行以下命令初始化集群: ```bash cluster meet <redis-2_container_ip> 7002 cluster meet <redis-3_container_ip> 7003 ``` 确保将 `<redis-2_container_ip>` 和 `<redis-3_container_ip>` 替换为对应容器的 IP 地址。 7. 最后,使用以下命令将容器加入集群: ```bash cluster addslots $(seq 0 5460) cluster addslots $(seq 5461 10922) cluster addslots $(seq 10923 16383) ``` 8. 现在,你已经成功搭建Redis 集群模式。可以使用 `redis-cli` 连接到任何一个容器的 Redis 实例,并执行相应的操作。 这只是一个简单的示例配置,你可以根据自己的实际需求进行调整。另外,还可以使用其他工具来简化 Redis 集群的管理,例如 Redis Sentinel 或 Redis Cluster Manager。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值