配置文件
修改redis.conf文件。(redis.conf可以从官方的github中下载)
bind 0.0.0.0 #修改bindip 使其他用户可访问
daemonize no #关闭守护进程
requirepass 123456 #添加密码
masterauth 123456 #添加主从连接密码
logfile "/var/log/redis/redis-server.log" #设置日志路径
cluster-enabled yes #配置集群相关信息
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
创建docker容器
首先创建6个redis:
docker run -d -p 6379:6379 -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf --name redis-6379 redis redis-server /etc/redis/redis.conf
docker run -d -p 6380:6379 -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf --name redis-6380 redis redis-server /etc/redis/redis.conf
docker run -d -p 6381:6379 -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf --name redis-6381 redis redis-server /etc/redis/redis.conf
docker run -d -p 6382:6379 -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf --name redis-6382 redis redis-server /etc/redis/redis.conf
docker run -d -p 6383:6379 -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf --name redis-6383 redis redis-server /etc/redis/redis.conf
docker run -d -p 6384:6379 -v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf --name redis-6384 redis redis-server /etc/redis/redis.conf
-p 6380:6379
端口映射,本地的6380端口映射容器中的6379端口。
-v /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf
文件映射,本地/usr/local/docker/redis/redis.conf的文件映射容器中的/etc/redis/redis.conf文件。
--name
容器名称,注意不能重复。
redis
镜像名称。
redis-server /etc/redis/redis.conf
redis容器启动时选择的配置文件。
获取容器的ip地址
docker inspect redis-6379 redis-6380 redis-6381 redis-6382 redis-6383 redis-6384|grep IPA
redis关联
进入其中一个redis-cli中,让其与其他5个redis关联
CLUSTER MEET 172.17.0.3 6379
CLUSTER MEET 172.17.0.4 6379
CLUSTER MEET 172.17.0.5 6379
CLUSTER MEET 172.17.0.6 6379
CLUSTER MEET 172.17.0.7 6379
CLUSTER NODES #查看结果
分配糟信息
执行shell脚本
#!/bin/bash
n=0
for ((i=n;i<=5461;i++))
do
/usr/bin/redis-cli -h 10.1.254.51 -p 6379 -a 123456 CLUSTER ADDSLOTS $i
done
n=5462
for ((i=n;i<=10922;i++))
do
/usr/bin/redis-cli -h 10.1.254.51 -p 6380 -a 123456 CLUSTER ADDSLOTS $i
done
n=10923
for ((i=n;i<=16383;i++))
do
/usr/bin/redis-cli -h 10.1.254.51 -p 6381 -a 123456 CLUSTER ADDSLOTS $i
done
该脚本将redis-6379,redis-6380,redis-6381,设置为主redis.
在redis-cli运行命令CLUSTER INFO
,发现第一行cluster_state
为ok。
集群搭建完成
高可用
到上面为止,redis集群已经可以用了,但是如果有其中一个redis挂掉就没有备用的启用,所以需要搭建高可用.
CLUSTER NODES
查看节点
执行shell脚本
#!/bin/bash
/usr/bin/redis-cli -h 10.1.254.51 -p 6382 -a 123456 CLUSTER REPLICATE 3d501ebfeb0780e57b20efd4b8eb647df9a4c276
/usr/bin/redis-cli -h 10.1.254.51 -p 6383 -a 123456 CLUSTER REPLICATE d11bd089b4ab164040bb9ebaada001cfa078fbf5
/usr/bin/redis-cli -h 10.1.254.51 -p 6384 -a 123456 CLUSTER REPLICATE 3d1161aaab22988bb0700b662315a6a815f8e562
CLUSTER REPLICATE
后面的一排字母分别是执行CLUSTER NODES
命令后结果的3个主redis前面的字母。
该脚本将后三个redis分别设置为前三个redis的从节点或者可以说备用节点。
测试
测试集群
随便选择一个redis执行set key value
,然后去其他redis中执行get key
,查看结果.
测试高可用
将3个master的redis全部关了,然后在剩下的3个redis中随便选一个执行get key
查看结果.
如果搭建错误那么执行下面的命令把容器全部删了重新搭建吧。
docker kill redis-6379
docker rm redis-6379
docker kill redis-6380
docker rm redis-6380
docker kill redis-6381
docker rm redis-6381
docker kill redis-6382
docker rm redis-6382
docker kill redis-6383
docker rm redis-6383
docker kill redis-6384
docker rm redis-6384