安装redis到linux可以选择使用安装服务和使用docker
这里我使用docker进行部署
首先安装docker
各系统安装docker的教程
傻瓜式教程跟着安装就好了,
安装redis
我们首先拉取redis镜像
这里客户查询redis镜像的各个版本
我这里使用最新版本
$docker pull redis:latest
然后我们就能查看自己拉取的镜像
$docker images
下面我们就可以启动容器了
$docker run -itd --name redis-dev -p 6379:6379 redis
这样启动使用的是默认配置,默认没有密码;
我们可以使用docker exec -it 镜像名称|镜像id /bin/bash
进入容器,找到配置文件进行配置,使用find -name redis.conf
查询配置文件所在地;
【如果没有配置文件,那就是没有挂载】我们进行手动的挂载外置配置文件
挂载外置配置文件
- 首先我们创建两个外置文件夹conf和data,用来存放配置文件和数据;
mkdir /docker/redis/{conf,data}
- 然后我们将redis额配置文件放进conf就可以开始挂载了,配置文件可以从现成服务中拿,也可以官网,网上拷贝
- 接下来我们挂载
docker run -d --privileged=true -p 16379:6389 -v /docker/redis/conf:/etc/redis/conf -v /docker/redis/data:/etc/redis/data --name redis-dev redis redis-server /etc/redis/conf/redis.conf --appendonly yes
参数说明
:
--privileged=true
:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
-d
:后台启动
-p 16379:6389
:将宿主机的16379端口和容器的6389端口进行映射关联,外界可以通过访问宿主机的16379访问到容器的6389端口,这里由于我配置了redis的启动端口为6389所以这里容器需要通过6389才能找到redis;
-v /docker/redis/conf:/etc/redis/conf
:映射规则宿主机目录:容器目录
,这里挂载的是整个文件夹目录不是配置文件,千万别弄错了,我们这里就是把我们存放配置文件的目录和容器中我们准备存放配置文件的目录进行了一个挂载映射,这样我们修改外置配置文件并且重新启动容器以后就会挂载外面的配置文件了,注意
:外置目录最好事先准备好
-v /docker/redis/data:/etc/redis/data
:这个就和上面一样了
--name redis-dev
:给容器起个名字[唯一]
redis
: 指定镜像名称
redis-server /etc/redis/conf/redis.conf
:指定使用哪个配置文件启动redis容器,注意
这里填写的是你挂载进去以后,配置文件所在的容器内部位置
--appendonly yes
:开启数据持久化
Redis配置密码,配置启动端口
配置密码
vim /docker/redis/conf/redis.conf
使用/requirepass foobared
搜索到这段配置,将他的注解拿掉改为
requirepass 密码
# IMPORTANT NOTE: starting with Redis 6 "requirepass" is just a compatibility
# layer on top of the new ACL system. The option effect will be just setting
# the password for the default user. Clients will still authenticate using
# AUTH <password> as usually, or more explicitly with AUTH default <password>
# if they follow the new protocol: both will work.
#
# The requirepass is not compatable with aclfile option and the ACL LOAD
# command, these will cause requirepass to be ignored.
#
# requirepass foobared
或者启动时直接指定密码
docker run -d --name redis -p 6379:6379 redis --requirepass "password"
在客户端中进入redis
redis-cli -h 127.0.0.1 -p 6379 -a "root"
配置启动端口
找到配置,修改他的prot参数
# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 16379
N
下一条n
上一条
保存后重启服务或者容器即可使配置生效
集群
启动并设置参数启动集群
docker run --name redis3 -p 6383:6379 -i -t -d redis --requirepass "password" --cluster-enabled yes
组建集群
redis-cli --cluster create 172.18.37.142:6381 172.18.37.142:6382 172.18.37.142:6383 --cluster-replicas 0 -a "password"
ip为宿主机对外ip,至少保证容器间可以通讯的ip和port,如果长期没响应看看是不是ip或者端口错了。或者防火墙和云服务安全组没有对端口进行开放,记得带上密码
目前有个问题,集群访问会出现超时,正在排查
发现日志
解决
似乎访问并不是按照我们配置的路径进行访问。而是按照我们配置集群的时候填入的路径,所以我们把那里的地址改为外部可以访问的地址,网络模式使用host+port --net host --port xxx
host共享端口方式启动
docker create --name redis-node3 -v /data/redis-data/node3:/data --net host redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --requirepass "devroot" --port 6381
映射端口方式启动
docker run -itd --name redis1 -v /data/redis-data/node1:/data -p 6379:6379 -p 16379:16379 redis --cluster-enabled yes --cluster-config-file nodes-node-1.conf --requirepass "devroot"
记得连带总线端口一起开放,配置集群时,会将端口号+1000,配置为当前容器
在集群里配置的端口+1000设置为总线端口;
例子:
也就是说 你的宿主机端口配置为6380:6379
由于内部redis默认6379所以内部端口通常是固定的,也对集群没有影响
,
这时候,我们创建集群时填写的地址就是47.132.123.123:6380,这时候配置中心就会把6380这个redis的总线设置为16380,所以这个容器的总线应该将内部的16380引出,同时由于读取配置文件,所以外部也会按照16380来访问,所以这个端口必须内外一致;
自我设定:myself这里。6379@16379,设置了自己的端口号和自己的总线
别人设定:xxxxx:6379@16379,设置了要访问这个容器需要的端口号和总线
启动集群
redis-cli --cluster create 10.211.55.4:6379 10.211.55.4:6380 10.211.55.4:6381 --cluster-replicas 0 -a "devroot"
如果是云服务记得开放容器的端口
,以及总线1000+端口
,否则无法访问导致超时
总结
如果服务和集群在一个服务器,第一种方案没问题,但是一台机器布置个啥子集群嘛,,但是如果想要不同网络区域进行访问就需要第二种了,但是。。项目通过集群最终的访问ip+port是添加集群时设置的那个;
集群部署
https://www.cnblogs.com/niceyoo/p/13011626.html
主从集群部署
https://www.cnblogs.com/niceyoo/p/14118146.html
编译版本中集群的部署
https://www.cnblogs.com/mafly/p/redis_cluster.html