Docker环境下配置3节点Redis Cluster集群

什么是Redis?

以下是百度百科给出的定义

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

实际上,Redis就是一个使用内存提高缓存速度的非关系型数据库。传统网络中,用户访问网页的加载速度都是从服务器硬盘上的数据库加载的,随着移动互联网的发展,用户对浏览速度的需求日益提升,Redis这种高速缓存数据库应运而生。我们使用Docker来搭建Redis集群。

常见的Redis集群方案:

  • Redis Cluster: 官方推荐,不存在中心节点
  • Codis: 360曾经推出的中间件产品,存在中心节点
  • Twemproxy: 早期的中间件产品,存在中心节点

我们推荐使用无中心节点的Redis Cluster服务器。这里我们需要注意的是,Redis集群中应当包含奇数个Master,并且至少有3个以上的Master节点,每个节点配有Slave节点。由于后台代码一般会考虑到负载均衡,所以,我们使用Redis暂且不考虑负载。
环境:CentOS 7 ,默认已装Docker

1 安装Redis镜像

输入以下命令

docker pull yyyyttttwwww/redis

这里,我们不使用官方redis,而是已经配置好的yyyyttttwwww/redis,感谢培训班的老师。

2 创建内部网络

docker network create --subnet=172.19.0.0/16 net2

我们创建一个172.19.0.0的内部网络,方便将Redis的各个节点集中于同一网络中。

3 使用Docker开启并运行Redis

我们一共创建6个Redis节点,包含3个Master主节点和3个Slave从节点。r1 分配 172.19.0.2;r2 分配 172.19.0.3,以此类推。

3.1 创建并运行Redis容器

每创建一个Redis节点,就需要创建并运行一个新的Redis容器,因此我们以创建配置一个r3节点为例。

docker run -it -d --name r3 -p 5003:6379 --net=net2 --ip=172.19.0.4 docker.io/yyyyttttwwww/redis bash

上述命令的意思就是,使用刚刚下载的docker-redis镜像,创建并运行一个redis容器。

  • -it 有交互界面
  • -d 允许后台运行
  • –name 设置容器的名称
  • -p 把容器中的端口映射到宿主机中,5003是宿主机端口,6379是容器的端口
  • –net 给这个redis分配到net2中
  • docker.io/yyyyttttwww/redis 使用此镜像来创建容器
  • bash 使用bash这种shell

3.2 配置Redis节点

从宿主机进入到创建的容器r3中:

docker exec -it r3 bash

修改/usr/redis/redis.conf(Redis的配置文件)

vim /usr/redis/redis.conf

需要修改的地方如下:

daemonize yes    # 允许后台运行redis
cluster-enabled yes    # 开启集群
cluster-config-file nodes.conf 	  # 集群配置文件
cluster-node-timeout  15000    # 超时时间
appendonly yes         # 开启AOF模式

原配置文件中,上述代码可能被#注释掉了,直接删除#即可。
最重要的一点:还需修改此配置文件绑定的IP!
也就是,在配置文件的下面一行中:

bind 127.0.0.1 

添加 172.19.0.4(我们在创建Redis时,绑定的IP),注意两个IP的顺序!

bind 172.19.0.4 127.0.0.1 

3.3 开启redis服务

我们一定要注意,需要先退出容器,在宿主机中的命令行中,重启容器r3,再进入r3

exit   # 退出容器r3
docker restart r3   # 重启容器r3
docker exec -it r3 bash   # 进入容器r3的命令行

在容器r3中,开启redis服务

cd /usr/redis/src
./redis-server ../redis.conf

至此,我们就完成了一个Redis容器的创建,和Redis服务的开启
实际运行代码

4 创建Redis Cluster集群

在创建好的6个节点中,随便选择一个节点,来配置Cluster集群服务,这里,我们选择r1
进入r1容器,配置服务,为了使大家看清楚,我把完整代码粘贴在下面,#前面的是主机名

[root@localhost ~]# docker exec -it r1 bash
root@f1ef0ca93bcd:/# cd /usr/redis/src/
root@f1ef0ca93bcd:/usr/redis/src# ./redis-server ../redis.conf 
root@f1ef0ca93bcd:/usr/redis/src# cd ..
root@f1ef0ca93bcd:/usr/redis# mkdir cluster
root@f1ef0ca93bcd:/usr/redis# cd src
root@f1ef0ca93bcd:/usr/redis/src# cp redis-trib.rb ../cluster/
root@f1ef0ca93bcd:/usr/redis/src# cd ../cluster/
root@f1ef0ca93bcd:/usr/redis/cluster# ./redis-trib.rb create --replicas 1 172.19.0.2:6379 172.19.0.3:6379 172.19.0.4:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.0.7:6379

使用ruby脚本,配置集群

./redis-trib.rb create --replicas 1 172.19.0.2:6379 172.19.0.3:6379 172.19.0.4:6379 172.19.0.5:6379 172.19.0.6:6379 172.19.0.7:6379

至此,我们就完成了3节点Redis的配置,中间也遇到不少错误,所以在这里把详细过程记录下来,让大家少走弯路。

发布了23 篇原创文章 · 获赞 22 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/song_lee/article/details/84255757
今日推荐