建议版本:2.2.3+
安装curl : yum install curl
升级nss版本 : yum -y update nss
安装rvm : curl -L get.rvm.io | bash -s stable
若提示
or if it fails:
command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
command curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
执行
command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
command curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
保存执行变更 : source /etc/profile.d/rvm.sh
查看Ruby版本 :rvm list known
升级Ruby版本 :rvm install 2.7.0
使用Ruby版本 :rvm use ruby-2.7.0
查看Ruby版本 :ruby -v
安装RubyGem :yum install rubygems
安装Redis Gem : gem install redis --version 4.0.1
1.安装Docker(详见docker安装文档)
2.下载redis源码包
mkdir /usr/local/redis_docker
cd /usr/local/redis_docker
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
3.解压
tar -xzf redis-4.0.1.tar.gz
4.安装gcc
yum install -y gcc make
5.编译
cd /usr/local/redis_docker/redis-4.0.1/
make
#如果报错,可以尝试:make MALLOC=libc
6.配置redis.conf
vim /usr/local/redis_docker/redis-4.0.1/redis.conf
ip绑定
bind 0.0.0.0
0.0.0.0为不绑定ip
#后台运行(检查配置文件是否设置了daemonize yes,如果是,就要改为daemonize no,因为该选项让redis成为在后台运行的守护进程,而docker容器必须要有一个前台进程才能留存,否则容器会自动退出)
daemonize no
设置密码(redis访问密码,也可以不设置密码)
#requirepass 123456789
主从复制的验证密码(集群安全验证)
#masterauth 123456789
日志文件
logfile “/var/log/redis/redis-server.log”
开启集群配置
cluster-enabled yes
集群配置文件
cluster-config-file nodes-6379.conf
集群超时时间
cluster-node-timeout 15000
1.创建Dockerfile文件
cd /usr/docker_root/redis_cluster
vim Dockerfile
#没有这个镜像会自动pull
FROM centos:7
ADD redis-4.0.1.tar.gz /
RUN mkdir -p /redis
ADD ./redis-4.0.1/redis.conf /redis/
RUN yum -y update && yum install -y gcc make
WORKDIR /redis-4.0.1
RUN make && mv /redis-4.0.1/src/redis-server /redis/
WORKDIR /
RUN rm -rf /redis-4.0.1 && yum remove -y gcc make
VOLUME ["/var/log/redis/"]
EXPOSE 6379
ENTRYPOINT ["/redis/redis-server", "/redis/redis.conf"]
2.构建redis基础镜像
#"."表示Dockerfile文件的相对路径
[root@mysqltest redis_docker]# docker build -t redis:4.0.1 .
[root@mysqltest redis_docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 4.0.1 f3ef5d9ec418 5 seconds ago 461MB
centos 7 b5b4d78bc90c 3 weeks ago 203MB
3.启动镜像
[root@mysqltest redis_docker]# docker run -d --name redis01 -p 6379:6379 redis:4.0.1
eb3baccf097b27ad7bd4ba45796500f98b9f2b6dcc12dcde1e458bf3bd73e4d4
[root@mysqltest redis_docker]# docker run -d --name redis02 -p 6380:6379 redis:4.0.1
79fabb71de2733ce01b1f76cfbf8040330ec2316b96975a97087e8a26eda9e4b
[root@mysqltest redis_docker]# docker run -d --name redis03 -p 6381:6379 redis:4.0.1
5c6b8d263c2b3b6251eac08be61af3d976ba471c433877af27b8af078421a015
[root@mysqltest redis_docker]# docker run -d --name redis04 -p 6382:6379 redis:4.0.1
d82c2f5378bf9d961ccd5e3d0bb479b2023b2ddd1a1ac3f11eff802b9d7317d7
[root@mysqltest redis_docker]# docker run -d --name redis05 -p 6383:6379 redis:4.0.1
44e7bcb96c9a7016303b27dc8417cce346bcba7c8753c55134c6c7c4ce061cb1
[root@mysqltest redis_docker]# docker run -d --name redis06 -p 6384:6379 redis:4.0.1
18da0af35ab682c92725ce61537e662b943d654251513dad4b94d3c36355b92f
4.查找配置文件 :
find / -name client.rb 【中间有redis目录的那个】
5.修改配置文件 :
vim /usr/local/rvm/gems/ruby-2.3.8/gems/redis-4.1.2/lib/redis/client.rb
DEFAULTS = {
:url => lambda { ENV["REDIS_URL"] },
:scheme => "redis",
:host => "127.0.0.1",
:port => 6379,
:path => nil,
:timeout => 5.0,
:password => "xxxxxx", #主要是修改这个,要和redis.conf配置的密码一致,如果没有密码就删掉
:db => 0,
:driver => nil,
:id => nil,
:tcp_keepalive => 0,
:reconnect_attempts => 1,
:inherit_socket => false
}
6.查看Redis节点IP
[root@mysqltest redis_docker]# docker inspect redis01 redis02 redis03 redis04 redis05 redis06 | grep IPAddress | grep 172
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.4",
"IPAddress": "172.17.0.4",
"IPAddress": "172.17.0.5",
"IPAddress": "172.17.0.5",
"IPAddress": "172.17.0.6",
"IPAddress": "172.17.0.6",
"IPAddress": "172.17.0.7",
"IPAddress": "172.17.0.7",
7.搭建集群
cd /usr/local/redis_docker/redis-4.0.1/src
./redis-trib.rb create --replicas 1 172.17.0.2:6379 172.17.0.3:6379 172.17.0.4:6379 172.17.0.5:6379 172.17.0.6:6379 172.17.0.7:6379
8.验证集群
[root@mysqltest src]# ./redis-trib.rb check 172.17.0.2:6379
>>> Performing Cluster Check (using node 172.17.0.2:6379)
M: 2c3bbbba188381b08b4ac763b7ce00b191b3698f 172.17.0.2:6379
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 6b05d66d03c71ca6a6c67efa84a17f28d3d6541c 172.17.0.5:6379
slots: (0 slots) slave
replicates 2c3bbbba188381b08b4ac763b7ce00b191b3698f
S: f500fda4543e6557e36389d93222cb793ec7945f 172.17.0.6:6379
slots: (0 slots) slave
replicates 69cecddf1df6009ee9afb9df189583e0f1bed35a
M: 5f9893fcdda2863cde67d70fc32c26d56759990b 172.17.0.4:6379
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: 2f0ff504ac4a392150342f1e925393980f3f8a91 172.17.0.7:6379
slots: (0 slots) slave
replicates 5f9893fcdda2863cde67d70fc32c26d56759990b
M: 69cecddf1df6009ee9afb9df189583e0f1bed35a 172.17.0.3:6379
slots:5461-10922 (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@mysqltest src]# ./redis-cli -c -h 172.17.0.2 -p 6382
Could not connect to Redis at 172.17.0.2:6382: Connection refused
Could not connect to Redis at 172.17.0.2:6382: Connection refused
not connected>
[root@mysqltest src]# ./redis-cli -c -h 172.17.0.2 -p 6379
172.17.0.2:6379> keys *
(empty list or set)
172.17.0.2:6379> set a 123
-> Redirected to slot [15495] located at 172.17.0.4:6379
OK
172.17.0.4:6379> get a
"123"