Redis安装与使用
安装
官方:将Redis做成一个服务 参考:Redis Quick Start
Centos下Redis 的安装
# 在/usr/local/下执行
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -zxvf redis-5.0.0.tar.gz
# yum安装gcc依赖
yum install gcc -y
mv redis-5.0.0 redis
cd redis
# 编译安装
make MALLOC=libc
cd src && make install
# 此时/usr/local/redis/src目录下安装生成的可执行文件复制到了/usr/local/bin目录下,新建/usr/local/redis/bin,再将这几个可执行文件移动到/usr/local/redis/bin
安装目录结构
cd /usr/local/redis
.
├── bin # 编译安装指定目录后自动生成目录及文件
│ ├── redis-benchmark
│ ├── redis-check-aof
│ ├── redis-check-rdb
│ ├── redis-cli
│ ├── redis-sentinel -> redis-server
│ └── redis-server
├── conf # 自己建立的存储配置文件的目录及自己创建的单个Redis配置文件
│ ├── 7001.conf
│ ├── 7002.conf
│ ├── 7003.conf
│ ├── 7004.conf
│ ├── ...
└── data # 自己建立的存储Redis数据的目录及单个Redis服务数据存储目录
└── 7001
│ ├── appendonly.aof
│ ├── dump7001.rdb
│ ├── dump.rdb
│ └── nodes-7001.conf
└── 7002
├── appendonly.aof
├── dump7002.rdb
├── dump.rdb
└── nodes-7002.conf
...
设置Redis开机自启动
cp utils/redis_init_script /etc/init.d/redis_6379
vim /etc/init.d/redis_6379
/etc/init.d/redis_6379
#!/bin/sh
# chkconfig 2345 90 25 # linux 开机启动设置 2345 运行级别 90 启动优先级(参考 memcached head /etc/rc.d/rc3.d/S90memcached ) 25 关闭优先级 (参考memcached)
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
### BEGIN INIT INFO
# Provides: redis_6379
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Redis data structure server
# Description: Redis data structure server. See https://redis.io
### END INIT INFO
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server # 修改为自己的可执行文件所在目录
CLIEXEC=/usr/local/redis/bin/redis-cli # 修改为自己的可执行文件所在目录
PIDFILE=/var/run/redis_${REDISPORT}.pid # 默认就好
CONF="/usr/local/redis/conf/${REDISPORT}.conf" # 修改为自己的配置文件存放目录
···省略···
esac
开始修改redis.conf
cp redis.conf /usr/local/redis/conf/6379.conf (修改成自己定义的目录。参考上述目录结构 redis.conf 在你们redis解压目录中的src目录下)
mkdir /usr/local/redis/data/6379 (修改成自己定义的目录。
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/var/log/redis_6379.log"
dir /usr/local/redis/data/6379
使用以下命令将新的Redis init脚本添加到所有默认的运行级别
# ubuntu
sudo update-rc.d redis_6379 defaults
# centos
chkconfig --add redis_6379
running with:
/etc/init.d/redis_6379 start
配置环境变量
# 配置环境变量,使得可以在任意路径输redis-server redis-cli等命令
vim /etc/profile
最后一行添加 export PATH=$PATH:/usr/local/redis/bin
source /etc/profile
Redis配置集群模式
准备工作:需要先安装 ruby gem
# 1 rvm安装 更换源
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -L get.rvm.io | bash -s stable
或 curl -sSL https://get.rvm.io | bash -s stable
usermod -a root -G rvm
source /etc/profile.d/rvm.sh
# 关shell 窗口,重新打开
rvm user gemsets
echo "ruby_url=https://cache.ruby-china.org/pub/ruby" > ~/.rvm/user/db
# 2 通过rvm安装 ruby、gem
rvm list known
# install ruby from internet to: /usr/local/rvm/rubies/ruby-2.4.0 by rvm
rvm install 2.4.0
rvm use 2.4.0
rvm remove 2.0.0
ruby --version
gem -v
# 3 gem 升级、更换源、通过gem安装redis
gem install rubygems-update
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem sources -l
gem install redis
准备工作完成,开始Redis配置集群模式
cd /usr/local/redis/conf
cp 6379.conf redis.conf.default # 用作集群其他配置文件的蓝本
修改 vim redis.conf.default
bind 192.168.2.123 # 绑定当前机器 IP, 注释掉 bind 127.0.0.1
cluster-enabled yes # 取消注释,启动集群模式
cluster-config-file nodes-6379.conf # 取消注释,修改为 /usr/local/redis/data/6379/nodes-6379.conf (如果遇到需要重新建立集群,不将此项修改为指定路径而和启动配置文件放在一起,会导致建立集群时,删除重建conf 文件)
cluster-node-timeout 15000 # 取消注释
appendonly yes # 将 no 修改为 yes
创建配置文件
cd /usr/local/redis/conf
echo 9001.conf 9002.conf 9003.conf 9004.conf 9005.conf 9006.conf | xargs -n 1 cp -v redis.conf.default
# 分别执行
sed -i 's/6379/9001/g' 9001.conf
sed -i 's/6379/9002/g' 9002.conf
sed -i 's/6379/9003/g' 9003.conf
sed -i 's/6379/9004/g' 9004.conf
sed -i 's/6379/9005/g' 9005.conf
sed -i 's/6379/9006/g' 9006.conf
# 检查配置是否正确
cat 9001.conf |grep 9001
创建数据存储文件
cd /usr/local/redis/data
mkdir -p 9001 9002 9003 9004 9005 9006
# 后期重新建立集群需要删除该文件件下的文件,用于重建集群,所以,删除命令也写一下
# rm -rf 900*/*
启动Redis cluster节点端口
/usr/local/redis/bin/redis-server /usr/local/redis/conf/9001.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/9002.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/9003.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/9004.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/9005.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/9006.conf
ps -ef | grep redis
创建集群
–cluster 集群模式
–cluster-replicas 1 主从
[root@nexus bin] redis-cli --cluster create 192.168.2.123:7001 192.168.2.123:7002 192.168.2.123:7003 192.168.2.123:7004 192.168.2.123:7005 192.168.2.123:7006 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: acc302009da55751659a58e6c9b9d48173b256ec 127.0.0.1:7001
slots:[0-5460] (5461 slots) master
M: 9bba116255fb9f547b7d2e5e3d1d0f1ee706e789 127.0.0.1:7002
slots:[5461-10922] (5462 slots) master
M: b67e8e7402aa0c9c7a136f4ae74a810dce17db2e 127.0.0.1:7003
slots:[10923-16383] (5461 slots) master
S: 4d05eba6c967005618dfb60db4ea301ac7891f57 127.0.0.1:7004
replicates 9bba116255fb9f547b7d2e5e3d1d0f1ee706e789
S: 4f49d29d5c58bf989ca7c855945db998d25615fb 127.0.0.1:7005
replicates b67e8e7402aa0c9c7a136f4ae74a810dce17db2e
S: 6320ec8b4edd305b769c5b024cbdf9c7ffaa239d 127.0.0.1:7006
replicates acc302009da55751659a58e6c9b9d48173b256ec
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
...
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: acc302009da55751659a58e6c9b9d48173b256ec 127.0.0.1:7001
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 9bba116255fb9f547b7d2e5e3d1d0f1ee706e789 127.0.0.1:7002
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 4d05eba6c967005618dfb60db4ea301ac7891f57 127.0.0.1:7004
slots: (0 slots) slave
replicates 9bba116255fb9f547b7d2e5e3d1d0f1ee706e789
S: 6320ec8b4edd305b769c5b024cbdf9c7ffaa239d 127.0.0.1:7006
slots: (0 slots) slave
replicates acc302009da55751659a58e6c9b9d48173b256ec
M: b67e8e7402aa0c9c7a136f4ae74a810dce17db2e 127.0.0.1:7003
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: 4f49d29d5c58bf989ca7c855945db998d25615fb 127.0.0.1:7005
slots: (0 slots) slave
replicates b67e8e7402aa0c9c7a136f4ae74a810dce17db2e
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
手动指定master/slave
redis 5.0中使用 redis-cli 添加cluster node 并 reshard
/var/redis/cluster/7000/bin/redis-server 7000/config/redis.conf
/var/redis/cluster/7001/bin/redis-server 7001/config/redis.conf
/var/redis/cluster/7000/bin/redis-cli --cluster create --cluster-replicas 0 10.101.2.201:7000 10.101.2.202:7000 10.101.2.203:7000 -a Oxxxxxx
/var/redis/cluster/7000/bin/redis-cli --cluster add-node 10.101.2.201:7001 10.101.2.201:7000 --cluster-slave --cluster-master-id 14de30503287b1dc4b36f1ff26d43703aba7957d -a xxxxiNj
/var/redis/cluster/7000/bin/redis-cli --cluster add-node 10.101.2.202:7001 10.101.2.202:7000 --cluster-slave --cluster-master-id e0a52ac9807a92639ed262abe7c3a6a1c4d2a412 -a xxxxiNj
/var/redis/cluster/7000/bin/redis-cli --cluster add-node 10.101.2.203:7001 10.101.2.203:7000 --cluster-slave --cluster-master-id a2cbdf758fb8bc5ff86b86c6dd746d10f1c3ec5c -a xxxxiNj
测试:进入redis写数据
[root@nexus bin] redis-cli -c -h 192.168.2.123 -p 9001 # -c 一定要加-c集群模式 -a password
[root@nexus bin] redis-cli -c -p 7001
127.0.0.1:7001> set k1 v1
-> Redirected to slot [12706] located at 127.0.0.1:7003
OK
127.0.0.1:7003> set hello world
-> Redirected to slot [866] located at 127.0.0.1:7001
OK
127.0.0.1:7001> get hello
"world"
127.0.0.1:7001> get k1
-> Redirected to slot [12706] located at 127.0.0.1:7003
"v1"
127.0.0.1:7003> get k1
"v1"
127.0.0.1:7003> cluster info
127.0.0.1:7003> cluster nodes
删除旧集群,新建集群
1 rm -rf 删除 redis/data/7001中旧集群的数据
2 修改好conf 配置文件
3 将密码设置为空,然后执行redis-server 9001.conf ... 9006.conf # 依次起端口
4 redis-cli --cluster create 192.168.2.123:7001 192.168.2.123:7002 192.168.2.123:7003 192.168.2.123:7004 192.168.2.123:7005 192.168.2.123:7006 --cluster-replicas 1 # 创建集群
5 然后依次进入各个节点重新设置新集群的密码,具体参考下边设置Redis集群密码
设置Redis集群密码
[root@nexus bin] redis-cli -c -p 7001
> config set masterauth 12xx56
> config set requirepass 12xx56
> auth 12xx56
> config rewrite
分别使用 redis-cli -c -p 7002 ... redis-cli -c -p 7006 去设置各个节点的密码,各个节点密码保存一致
# 下面这步可能不需要
find / -name *client.rb
找到 /root/.rvm/gems/ruby-2.4.0/gems/redis-4.2.3/lib/redis/client.rb
vim /root/.rvm/gems/ruby-2.4.0/gems/redis-4.2.3/lib/redis/client.rb
password 设置为各个节点的密码12xx56
Redis启动、停止方式
yum 安装
/etc/init.d/redis-server stop
/etc/init.d/redis-server start
/etc/init.d/redis-server restart
源码安装 三种方式
sudo /etc/init.d/redis_6379 start
/usr/local/redis/bin/redis-server redis.conf # 注意此处缺省:配置文件路径
redis-cli -h 127.0.0.1 -p 6379 shutdown
注:如果只是停止本地redis 请执行: redis-cli shutdown
强制终止
kill -9 进程号
pkill redis
参考文献
redis.io/topics/quickstart
必须是全网最全的Redis集群搭建教程
REDIS集群模式部署
Redis 集群搭建详细指南
修改密码
使用
Redis常用命令
1.打开一个 cmd 窗口 使用cd命令切换目录到 D:\Redis-x64-3.2.100 运行 redis-server.exe redis.windows.conf ,这相当于开启redis服务,redis.windows.conf 可以省略
2.redis服务启动后,这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。
切换到redis目录下运行 redis-cli.exe -c -h 127.0.0.1 -p 6379 -a password,如果没有设置密码就不写。
# -c 集群模式cluster
./redis-cli -c -h 127.0.0.1 -p 6379 -a password
# 设置键值对:
set key Value
# 取出键值对:
get key
# 查所有数据
keys *
# get hash
hgetall key_name
hdel
xinfo
xrange
# 查某个key对应value的type
type key_name
# 清空
flushall
Redis集群常用命令
cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。
redis 实践 常见问题处理
[root@ytj-sdn-control-10e101e8e60 secure]# /var/redis/cluster/7001/bin/redis-cli -c -h 10.10.80.60 -p 7001
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
10.10.80.60:7001> cluster nodes
f31ed535191cc5218dc40790765ba446105bff3b 10.10.80.61:7000@17000 slave fc1e413f2b0dfbeac12d6496d2684d8d8344eb38 0 1670393318077 7 connected
1170c683afe9f92ef5ab873e4a3a4ff1be57cda9 10.10.80.61:7001@17001 slave bcd451bd5201b7a7c3c1f8f8d2b677cbc19e1a9d 0 1670393320081 14 connected
bcd451bd5201b7a7c3c1f8f8d2b677cbc19e1a9d :0@0 master,noaddr - 1670393000615 1670393000588 14 disconnected 10923-16383
54d5925f5be51f39f1e35c3d18b31376237a3b72 10.10.80.60:7000@17000 master,fail? - 1670393000615 1670393000588 1 disconnected
cfd4034963e193b675d840b5a52e3e6df7496467 :0@0 master,noaddr - 1670393000615 1670393000588 15 disconnected 0-5460
fc1e413f2b0dfbeac12d6496d2684d8d8344eb38 10.10.80.60:7001@17001 myself,master - 0 1670393318000 7 connected 5461-10922
redis从节点slave,fail,noaddr问题处理
redis failover
CLUSTER FAILOVER 正常的主从切换
CLUSTER FAILOVER FORCE 主节点宕机时快速选主
CLUSTER FAILOVER TAKEOVER 半数master故障时,强制更新快速止损恢复服务