Redis集群部署-docker集群
2019-11-27 本文已影响0人
_str_
集群
1.Redis 集群的优势
自动分割数据到不同的节点上。
整个集群的部分节点失败或者不可达的情况下能够继续处理命令。
特点
主从复制
实现了高可用
数据分片存储
集群节点的 meet
过程
image
image
指派槽
image客户端和槽
image3. Redis 集群的安装
原生命令安装
步骤
-
配置开启集群节点
-
配置
meet
-
指派槽
-
配置主从
实例操作
六个容器
三个主
三个从
务必保证一个主有一个从
架构图
image实验步骤
安装官方工具
- 首先使用docker镜像起一个centos镜像 里面已经装有 redis 并且进入
1. 下载、编译、安装 Ruby
[root@s1 ~]# wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.1.tar.gz
安装依赖包
yum install zlib-devel readline openssl-devel gcc gcc-c++ make
$ ./configure
$ make
$ sudo make install
2. 安装 rubygem redis
一个 ruby 语言实现的访问 Redis 集群的客户端
cd ..
wget https://rubygems.org/rubygems/rubygems-3.0.2.tgz
tar -xf rubygems-3.0.2.tgz
cd rubygems-3.0.2/
ruby setup.rb
gem install redis
3. 安装 redis-trib.rb
这里的redis是源码安装
redis-trib
位于 Redis 源码的 src
文件夹中, 它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared
)等工作。
cp ~/redis-4.0.10/src/redis-trib.rb /usr/local/bin/
如果是使用yum安装的redis的话 下面可能帮到你
image.png image.png放到和之前源码一样的位置即可
编辑集群配置文件
vi /etc/redis-cluster.conf
bind 0.0.0.0
port 7001 ---容器的话就不需要修改端口
daemonize yes --- 后台启动
# 允许任何地址不使用密码访问我
protected-mode yes
dir "/redis/data/"
logfile "cluster-7001.log"
dbfilename "cluster-dump-7001.log"
cluster-enabled yes
cluster-config-file redis-cluster.conf
# 不需要集群的全部节点完好才提供服务
cluster-require-full-coverage no
然后就可以启动服务了
redis-server /etc/redis-cluster.conf
image.png
最后把这个部署好的容器进行commit成本地镜像
docker commit 容器名/容器id redis-cluster
接下来我们就可使用docker-compose来进行集群启动
version: "3.2"
services:
redis-clu-m1:
image: redis-ruby:latest
container_name: redis-clu-m1
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
redis-clu-m2:
image: redis-ruby:latest
container_name: redis-clu-m2
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
redis-clu-m3:
image: redis-ruby:latest
container_name: redis-clu-m3
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
redis-clu-s1:
image: redis-ruby:latest
container_name: redis-clu-s1
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
redis-clu-s2:
image: redis-ruby:latest
container_name: redis-clu-s2
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
redis-clu-s3:
image: redis-ruby:latest
container_name: redis-clu-s3
expose:
- "6379"
networks:
- cmdb_jumpserver-test
tty: true
networks:
cmdb_jumpserver-test:
external:
name: cmdb_jumpserver-test
注意:这里使用同一个网络便于容器之间通信,镜像不加标签默认是latest,最后的网络external代表着使用额外的网络名 tty:true让这个几个容器在启动后将这个终端给占住,不然会异常退出
这样在启动完docker-compose后我们就可以进入到容器中让每个redis-server启动
docker-compose exec redis-clu-m2 redis-server /etc/redis-cluster.conf
依次执行 只需要换个服务名即可
选择一个服务器容器来进行集群部署 这里我们选择的是redis-clu-m1来部署
redis-trib.rb create --replicas 1 主节点1的IP:端口 主节点2的IP:端口 主节点3的IP:端口 从节点1的IP:端口 从节点2的IP:端口 从节点3的IP:端口
依次将主从写到后面 待会会一一对应
注意这儿不能使用容器名 不解析 需要提前将各个容器的ip地址给找出来
在redis-clu-m1中执行的命令
[root@3604a0ecd95c /]# redis-trib.rb create --replicas 1 172.29.0.6:6379 172.29.0.7:6379 172.29.0.4:6379 172.29.0.5:6379 172.29.0.3:6379 172.29.0.2:6379
-因为docker-compose是随机启动的 所以这里面的ip地址不会按顺序
下面是执行的结果展示
集群配置 成功后的标志 检查节点信息在那个服务器上都可以查到,在任意服务器上能查任意的节点