基于docker搭建redis cluster

本文介绍如何在CentOS7上安装Docker并利用Docker搭建Redis集群,包括配置Docker仓库、安装与启动Docker服务、编写脚本批量创建Redis容器及配置文件、构建集群网络、配置集群节点等步骤。
摘要由CSDN通过智能技术生成

环境说明:

虚拟机centos7安装中安装docker

1.设置阿里云仓库,下载速度会快很多

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.安装docker

yum install docker-ce

3.启动docker

​​​​​​​[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker

4.查看docker

docker version

redis集群搭建: 

1.创建目录用于存放脚本

/usr/local/redis-cluster

2.在redis-cluster目录新建redis-cluster.tmpl文件

vim redis-cluster.tmpl

输入一下内容,下面内容中的${PORT}用于批量生成配置【envsubst】

#端口
port ${PORT}
#非保护模式
protected-mode no
#启用集群模式
cluster-enabled yes
##节点配置 记录各个了节点信息
cluster-config-file nodes.conf
#超时时间
cluster-node-timeout 5000
#宿主机地址
cluster-announce-ip 192.168.0.106
#端口号
cluster-announce-port ${PORT}
#总线端口号
cluster-announce-bus-port 1${PORT}
appendonly yes
#后台运行
#daemonize yes 
pidfile  /var/run/redis_${PORT}.pid
#redis的认证密码
masterauth a123456 
requirepass a123456 

3.在redis-cluster目录新建redis.sh脚本

redis.sh

并输入一下内容

#!/bin/bash

#在/usr/local/redis-cluster下生成conf和data目标,并生成redis.conf配置信息
for port in `seq 6000 6005`; 
do 
  mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf && mkdir -p ./${port}/data;
done

#循环创建6个redis-xxx[6000-6005]容器
for port in `seq 6000 6005`;
do
	docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/redis-cluster/${port}/data:/data --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
done

注:

Envsubst用shell格式字符串中的值替换环境变量。要替换的变量应位于${var}$var格式。

4.在redis-cluster目录新建stop.sh脚本 用于批量停止daokcer容器并删除对应的容器以及目录

vim stop.sh

输入内容如下:

#!/bin/bash
docker stop 
redis-6000
redis-6001 
redis-6002 
redis-6003 
redis-6004 
redis-6005
docker rm 
redis-6000 
redis-6001
redis-6002 
redis-6003 
redis-6004 
redis-6005
rm -rf
 6000 6001 6002 6003 6004 6005

5.  给redis.sh和stop.sh授权

chmod 755 redis.sh stop.sh

6.新建docker子网用于redis集群间通信

docker network create redis-net

7.在redis-cluster下执行./redis.sh

结果如下,生成了对应的目录和文件

[root@localhost redis-cluster]# ll
total 12
drwxr-xr-x. 4 root root   30 Dec 17 11:50 6000
drwxr-xr-x. 4 root root   30 Dec 17 11:50 6001
drwxr-xr-x. 4 root root   30 Dec 17 11:50 6002
drwxr-xr-x. 4 root root   30 Dec 17 11:50 6003
drwxr-xr-x. 4 root root   30 Dec 17 11:50 6004
drwxr-xr-x. 4 root root   30 Dec 17 11:50 6005
-rw-r--r--. 1 root root  402 Dec 17 11:33 redis-cluster.tmpl
-rwxr-xr-x. 1 root root 1087 Dec 17 11:46 redis.sh
-rwxr-xr-x. 1 root root  191 Dec 17 11:47 stop.sh

8.查看子网

docker network inspect redis-net

结果如下:

 9.执行redis集群操作,中间出现输入Can I set the above configuration? (type 'yes' to accept): yes

redis-cli --cluster create 172.18.0.2:6000 172.18.0.3:6001 172.18.0.4:6002 172.18.0.5:6003 172.18.0.6:6004 172.18.0.7:6005 -a a123456 --cluster-replicas 1

执行结果如下,出现红框中的信息说明成功了:

 

10.进入一个容器中

docker exec -it redis-6000 bash

11.连接redis查看集群信息

 redis-cli -a a123456 -c -h 192.168.0.106 -p 6000

集群结果如下,三主三从[6000,6001,6002是主节点]:

 

12.使用redis客户端进行连接

关闭防火墙:

systemctl stop firewalld service

 连接示例:

13.容灾演示

停掉主节点6002【docker stop e8889e9f41db】 

在查看节点信息,可以看到6003升级为主节点了

 

再次启动6002节点 可以看到该节点已经变成了从节点【docker start e8889e9f41db】
 

 14.dockerUI的使用

docker pull uifd/ui-for-docker ##拉取
docker run -it -d --name docker-ui -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock docker.io/uifd/ui-for-docker##启动

访问http://192.168.0.106:9000/,可以使用图形化进行容器管理

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值