方法一:搭建主从集群
下载redis镜像
docker pull hub.c.163.com/library/redis:latest
运行镜像
docker run --name redis-node1 -p 6379:6379 -d hub.c.163.com/library/redis
docker run --name redis-node2 -p 6379:6379 -d hub.c.163.com/library/redis
docker run --name redis-node3 -p 6379:6379 -d hub.c.163.com/library/redis
配置redis集群
选择一台作为主机,我选择172.31.19.88这台作为主机
docker exec -ti 容器ID /bin/bash 分别进入三个redis容器中
进入容器后,使用redis-cli 命令,连接redis服务器
分别在172.31.18.167和172.31.16.94使用 SLAVEOF 172.31.19.88 6379 命令
在172.31.19.88 使用info replication 命令,查看主从关系是否配置成功
这样,redis集群环境就搭建好了。
哨兵模式
方案一:基于现有的3台Redis容器服务,互相启动一个Redis哨兵
方案二:重新再启动3台Redis容器服务,分别启动一个Redis哨兵
方法二:搭建redis cluster(非docker)
安装redis
cd /usr/local/src
wget http://download.redis.io/releases/redis-5.0.2.tar.gz
编译redis
先安装gcc编译器
yum -y install gcc
解压redis包 然后编译安装
tar -zxvf redis-5.0.2.tar.gz
cd redis-5.0.2
make && make install
创建节点
我选择在/usr/local下创建了一个redis-cluster文件夹
mkdir /usr/local/redis-cluster
cd /usr/local/redis-cluster
mkdir 6379 6380
cp /usr/local/redis-5.0.2/redis.conf /usr/local/redis-cluster/6379
cp /usr/local/redis-5.0.2/redis.conf /usr/local/redis-cluster/6380
修改配置文件
daemonize yes //守护线程 ,后台运行redis
pidfile /var/run/redis_6379.pid
port 6379 //每个节点的端口号
cluster-enabled yes //开启集群模式
cluster-config-file nodes_6379.conf //集群节点的配置
cluster-node-timeout 5000 //节点请求超时时间
appendonly yes //aof日志每一个操作都记录模式
bind 0.0.0.0 //开启网络,保证其他网络可以访问该机子
分发该配置到另外两台机器
scp -r /usr/local/redis-cluster [ip]:/usr/local
启动每台机器上的两个节点
cd /usr/loacl/src/
redis-server /usr/local/redis-cluster/6379/redis.conf
redis-server /usr/local/redis-cluster/6380/redis.conf
创建集群
cd /usr/local/src/redis-5.0.2
redis-cli --cluster create [ip1]:6379 [ip2]:6379 [ip3]:6379 [ip1]:6380 [ip2]:6380 [ip3]:6380 --cluster-replicas 1
//创建集群,--cluster-replicas 1 指定从库数量1
//创建顺序三个主,三个从,前面三个是主后面三个是从
方法三:搭建redis cluster(docker)
下载redis镜像
docker pull redis
编写配置文件
我选择在当前目录创建一个redis-cluster文件夹,进入文件夹编写文件redis-cluster.tmpl
port ${PORT} ##节点端口
protected-mode no ##开启集群模式
cluster-enabled yes ##cluster集群模式
cluster-config-file nodes.conf ##集群配置名
cluster-node-timeout 5000 ##超时时间
cluster-announce-ip xxx.xx.xx.xx ##容器ip,实际为各宿主机ip
cluster-announce-port ${PORT} ##节点映射端口
cluster-announce-bus-port 1${PORT} ##节点总线端口
appendonly yes ##持久化模式
生成配置文件
for port in `seq 7004 7005`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
创建redis容器
for port in `seq 7004 7005`; do \
docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
-v /root/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /root/redis-cluster/${port}/data:/data \
--name redis-${port} --net=host \
redis redis-server /usr/local/etc/redis/redis.conf; \
done
这里我使用了宿主机网络模式,容器之间可以直接通过宿主机ip进行通讯,配置文件也可以写宿主机ip。
上面步骤分别在三台主机上进行操作。
启动集群
进入其中一个容器中
docker exec -it redis-6379 bash
redis-cli --cluster create 172.16.10.175:7000 172.16.10.175:7001 172.16.10.175:7002 172.16.10.175:7003 172.16.10.175:7004 172.16.10.175:7005 --cluster-replicas 1
//创建集群,--cluster-replicas 1 指定从库数量1
//创建顺序三个主,三个从,前面三个是主后面三个是从