tar -zxvf redis-3.2.8.tar.gz
cd redis-3.2.8
make
make install
默认安装路径 /usr/local/bin/ 也可自定义安装路径(make PREFIX=/usr/local/redis install)
# chkconfig: 2345 10 90
# description: Start and Stop redis
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379 #实际环境而定
EXEC=/usr/local/bin/redis-server #实际环境而定
REDIS_CLI=/usr/local/bin/redis-cli #实际环境而定
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis.conf" #实际环境而定
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed."
else
echo "Starting Redis server..."
$EXEC $CONF
fi
if [ "$?"="0" ]
then
echo "Redis is running..."
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE exists, process is not running."
else
PID=$(cat $PIDFILE)
echo "Stopping..."
$REDIS_CLI -p $REDISPORT SHUTDOWN
while [ -x $PIDFILE ]
do
echo "Waiting for Redis to shutdown..."
sleep 1
done
echo "Redis stopped"
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
exit 1
esac
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
方法二
wget http://download.redis.io/releases/redis-3.2.10.tar.gz
tar xvf redis-3.2.10.tar.gz
cd redis-3.2.10/
make
make PREFIX=/usr/local/redis install
cp redis-3.2.10/redis.conf /usr/local/redis/
启动和关闭redis服务
启动redis就是执行redis里的bin下的redis-server 命令
cd /usr/local/redis/
bin/redis-server
出现这种图标,说明启动成功;
但是,这种是前台启动,以服务程序运行,必须后台运行,ctrl+c 退出当前程序
设置后台运行
vi打开redis.conf vi /usr/local/redis/redis.conf
将daemonize no 修改为 daemonize yes
开发阶段 先将绑定ip取消 (需要重启redis服务)
去掉自我保护功能(**不推荐该方法**,需要重启redis服务),推荐方法为redis设置连接密码
设置redis连接密码
进入客户端
bin/redis-cli
config set requirepass ***** (设置密码)
保存退出
后台开启运行 在/usr/local/redis目录下输入命令
bin/redis-server redis.conf
查看redis服务是否开启
通过shutdown命令来停止redis服务
bin/redis-cli shutdown
redis基本使用
bin/redis-cli 进入客户端
------------------------------------------------------------------------------------------------------------------------------------------------------------------
配置集群
在/usr/local/redis下 修改bin文件夹为redis01,redis02...( (多台机器则可不改))
复制redis.conf配置文件
配置redis的配置文件redis.conf
daemonize yes #后台启动
port 7001 #修改端口号,从7001到7006 (多台机器则可不改)
cluster-enabled yes #开启cluster,去掉注释
cluster-config-file nodes.conf
cluster-node-timeout 15000
appendonly yes#开启AOF模式
dir /usr/local/redis/myfile
复制 redis-trib.rb
安装ruby环境:
[root@localhost redis]# yum install ruby
[root@localhost redis]# yum install rubygems
安装redis-trib.rb运行依赖的ruby的包redis-*.gem:
[root@localhost redis]# gem install redis
----------------------------
其中 gem install redis命令执行时出现了:
redis requires Ruby version >= 2.2.2的报错,查了资料发现是Centos默认支持ruby到2.0.0,可gem 安装redis需要最低是2.2.2
参考:
http://blog.csdn.net/daxiangqqcom/article/details/78329496
----------------------------
我用了6台虚拟机 端口6379 bing 各自的IP
开启每台的redis
./redis-trib.rb create --replicas 1 192.168.84.200:6379 192.168.84.201:6379 192.168.84.202:6379 192.168.84.203:6379 192.168.84.205:6379 192.168.84.206:6379
set foo abc本想在206的6379节点保存foo这个key,但206的6379节点并没有存,而是将请求转发给了202的6379节点存储。而且客户端自动切换到了6379节点。这是神马情况?这其实是redis集群数据存储的机制,通过crc16算法计算key的hash值,然后对12182取模,得到一个0~16384以内的slot值来决定由哪个节点存储,而每一个节点在创建集群的时候,都会均匀的分配相应的slot数量
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
redis cluster命令
集群(cluster)
cluster info 打印集群的信息
cluster nodes 列出集群当前已知的所有节点(node),以及这些节点的相关信息
节点(node)
cluster meet
cluster forget
cluster replicate
cluster saveconfig 将节点的配置文件保存到硬盘里面
cluster slaves
cluster set-config-epoch 强制设置configEpoch
槽(slot)
cluster addslots
cluster delslots
cluster flushslots 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点
cluster setslot
cluster setslot
cluster setslot
cluster setslot
键(key)
cluster keyslot
cluster countkeysinslot
cluster getkeysinslot
其它
cluster myid 返回节点的ID
cluster slots 返回节点负责的slot
cluster reset 重置集群,慎用
redis cluster配置
cluster-enabled yes
如果配置yes则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例。
cluster-config-file nodes-6379.conf
虽然此配置的名字叫"集群配置文件",但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。
cluster-node-timeout 15000
这是集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障。如果主节点超过这个时间还是不可达,则用它的从节点将启动故障迁移,升级成主节点。注意,任何一个节点在这个时间之内如果还是没有连上大部分的主节点,则此节点将停止接收任何请求。一般设置为15秒即可。
cluster-slave-validity-factor 10
如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点。如果设置成正数,则cluster-node-timeout乘以cluster-slave-validity-factor得到的时间,是从节点与主节点失联后,此从节点数据有效的最长时间,超过这个时间,从节点不会启动故障迁移。假设cluster-node-timeout=5,cluster-slave-validity-factor=10,则如果从节点跟主节点失联超过50秒,此从节点不能成为主节点。注意,如果此参数配置为非0,将可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作。
cluster-migration-barrier 1
主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移。更详细介绍可以看本教程后面关于副本迁移到部分。
cluster-require-full-coverage yes
在部分key所在的节点不可用时,如果此参数设置为"yes"(默认值), 则整个集群停止接受操作;如果此参数设置为”no”,则集群依然为可达节点上的key提供读操作。
redis cluster状态
192.168.84.203:6379> cluster info
cluster_state:ok
如果当前redis发现有failed的slots,默认为把自己cluster_state从ok个性为fail, 写入命令会失败。如果设置cluster-require-full-coverage为no,则无此限制。
cluster_slots_assigned:16384 #已分配的槽
cluster_slots_ok:16384 #槽的状态是ok的数目
cluster_slots_pfail:0 #可能失效的槽的数目
cluster_slots_fail:0 #已经失效的槽的数目
cluster_known_nodes:6 #集群中节点个数
cluster_size:3 #集群中设置的分片个数
cluster_current_epoch:15 #集群中的currentEpoch总是一致的,currentEpoch越高,代表节点的配置或者操作越新,集群中最大的那个node epoch
cluster_my_epoch:12 #当前节点的config epoch,每个主节点都不同,一直递增, 其表示某节点最后一次变成主节点或获取新slot所有权的逻辑时间.
cluster_stats_messages_sent:270782059
cluster_stats_messages_received:270732696
192.168.84.203:6379> cluster nodes
25e8c9379c3db621da6ff8152684dc95dbe2e163 192.168.64.102:8002 master - 0 1490696025496 15 connected 5461-10922
d777a98ff16901dffca53e509b78b65dd1394ce2 192.168.64.156:8001 slave 0b1f3dd6e53ba76b8664294af2b7f492dbf914ec 0 1490696027498 12 connected
8e082ea9fe9d4c4fcca4fbe75ba3b77512b695ef 192.168.64.108:8000 master - 0 1490696025997 14 connected 0-5460
0b1f3dd6e53ba76b8664294af2b7f492dbf914ec 192.168.64.170:8001 myself,master - 0 0 12 connected 10923-16383
eb8adb8c0c5715525997bdb3c2d5345e688d943f 192.168.64.101:8002 slave 25e8c9379c3db621da6ff8152684dc95dbe2e163 0 1490696027498 15 connected
4000155a787ddab1e7f12584dabeab48a617fc46 192.168.67.54:8000 slave 8e082ea9fe9d4c4fcca4fbe75ba3b77512b695ef 0 1490696026497 14 connected
#说明
节点ID:例如25e8c9379c3db621da6ff8152684dc95dbe2e163
ip:port:节点的ip地址和端口号,例如192.168.64.102:8002
flags:节点的角色(master,slave,myself)以及状态(pfail,fail)
如果节点是一个从节点的话,那么跟在flags之后的将是主节点的节点ID,例如192.168.64.156:8001主节点的ID就是0b1f3dd6e53ba76b8664294af2b7f492dbf914ec
集群最近一次向节点发送ping命令之后,过了多长时间还没接到回复
节点最近一次返回pong回复的时间
节点的配置纪元(config epoch)
本节点的网络连接情况
节点目前包含的槽,例如192.168.64.102:8002目前包含的槽为5461-10922