什么是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的配置,中间也遇到不少错误,所以在这里把详细过程记录下来,让大家少走弯路。