1 构建redis镜像
1.1 编写编译安装redis的脚本
#!/bin/bash yum install -y gcc gcc-c++ make openssl openssl-devel cd /home/redis-6.2.1 make && make PREFIX=/usr/local/redis install mkdir -p /usr/local/redis/conf/ cp /home/redis-6.2.1/redis.conf /usr/local/redis/conf/ mkdir -p /data mkdir –p /usr/local/redis/log sed -i 's#127.0.0.1#0.0.0.0#' /usr/local/redis/conf/redis.conf sed -i 's#protected-mode yes#protected-mode no#' /usr/local/redis/conf/redis.conf sed -i '1230s#appendonly no#appendonly yes#' /usr/local/redis/conf/redis.conf sed -i '444s#dir ./#dir ./data#' /usr/local/redis/conf/redis.conf |
1.2 编写Dockerfile
FROM centos:7 ADD redis-6.2.1.tar.gz /home #需要自己下载redis的安装包 COPY redis_install.sh /home RUN sh /home/redis_install.sh ENTRYPOINT /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf |
1.3 构建镜像:docker build -t redisclusterimage:v1
bind 0.0.0.0 port 6379 requirepass "1234" #注意要创建一个该目录/usr/local/redis/log,否则启动容器会失败 logfile "/usr/local/redis/log/redis1.log" dbfilename "redis1.rdb" dir "/data" appendonly yes appendfilename "appendonly1.aof" protected-mode no masterauth "1234" #是否开启集群 cluster-enabled yes cluster-config-file nodes-6379.conf #节点连接超时时间 cluster-node-timeout 20000 #集群节点的ip,当前节点的ip(对外暴露的ip) cluster-announce-ip 192.xxx.xx.xx #集群节点映射端⼝(应用程序连接的端口)(该集群节点对外暴露的端口) cluster-announce-port 6379 #集群节点总线端⼝,节点之间互相通信,常规端⼝+1万该集群节点对外暴露节之间点通信的端口) cluster-announce-bus-port 16379 |
2 创建6个redis配置文件作为挂载文件
(redis1.conf…redis6.conf)配置文件如下(不同的redis实例要修改部分配置,如各种端口,一些文件名 ip等)
3构建docker-compose.yml文件
version: '3' services: redis1: image: ee98f212cc43 container_name: Docker_Compose_rediscluster1 ports: - "6379:6379" - "16379:16379" volumes: - /redis_cluster/redis1.conf:/usr/local/redis/conf/redis.conf - /redis_cluster/log:/usr/local/redis/log - /redis_cluster/data:/data restart: always redis2: image: ee98f212cc43 container_name: Docker_Compose_rediscluster2 ports: - "6380:6380" - "16380:16380" volumes: - /redis_cluster/redis2.conf:/usr/local/redis/conf/redis.conf - /redis_cluster/log:/usr/local/redis/log - /redis_cluster/data:/data restart: always redis3: image: ee98f212cc43 container_name: Docker_Compose_rediscluster3 ports: - "6381:6381" - "16381:16381" volumes: - /redis_cluster/redis3.conf:/usr/local/redis/conf/redis.conf - /redis_cluster/log:/usr/local/redis/log - /redis_cluster/data:/data restart: always redis4: image: ee98f212cc43 container_name: Docker_Compose_rediscluster4 ports: - "6382:6382" - "16382:16382" volumes: - /redis_cluster/redis4.conf:/usr/local/redis/conf/redis.conf - /redis_cluster/log:/usr/local/redis/log - /redis_cluster/data:/data restart: always redis5: image: ee98f212cc43 container_name: Docker_Compose_rediscluster5 ports: - "6383:6383" - "16383:16383" volumes: - /redis_cluster/redis5.conf:/usr/local/redis/conf/redis.conf - /redis_cluster/log:/usr/local/redis/log - /redis_cluster/data:/data restart: always redis6: image: ee98f212cc43 container_name: Docker_Compose_rediscluster6 ports: - "6384:6384" - "16384:16384" volumes: - /redis_cluster/redis6.conf:/usr/local/redis/conf/redis.conf - /redis_cluster/log:/usr/local/redis/log - /redis_cluster/data:/data restart: always |
4 执行 后台启动容器:docker-compose up –d
5 输入加入集群的命令
/usr/local/redis6.00/bin/redis-cli -a 1234 --cluster create 192.1xx.xx.xx:6379 192.xx.xx.189:6380 192.1xx.xx.x:6381 192.xx.xx.189:6382 192.1xx.xx:1x:6383 192.xx.xxx.189:6384 --cluster-replicas 1
(其中⼀个节点执⾏即可)(对于一个集群执行一次即可)(除非我们是要重新搭建一个redis集群,不然执行一次该命令即可,重启集群后无需重复执行该命令了)
(执行该命令才开始分配槽位)(如果重启有问题就必须重新创建一个集群,必须删除之前数据文件rdb和aof,再重新执行该命令)
6进入客户端中检查集群信息
直 接 /usr/local/redis6.00/bin/redis-cli -c -a 1234
或者 /usr/local/redis6.00/bin/redis-cli -c -p 6386 -a 1234
(这里的-p 指端口,注意该端口的节点必须在该机器上)
进入客户端后可以输入以下查看集群信息和节点信息
# 集群信息
cluster info
#所有集群节点信息 (可以看出所有节点之间的主从关系)
cluster nodes
2检查状态某个节点的信息 (可以看出指定节点的具体信息)
/usr/local/redis6.00/bin/redis-cli -a 1234 --cluster check 192.xxx.xx.xx:6381
使用docker-compose构建redis集群的好处
1 构建速度相比直接用docker一个一个去构建快的多,一次性启动所有集群中所有的初始容器。因为我们的redis镜像和配置文件已经提前写好(就算要扩展节点也只要对配置文件做部分修改)(且对redis镜像进行了加强可以自动生成log目录)