一、安装Redis
1、将压缩包导入虚拟机
redis-3.2.9.tar
2、进入解压后的文件夹执行命令make
3、在当前的目录src下有一系列的可执行的文件,这是与redis相关的命令,将可执行的命令添加到PATH变量中。
find . -type f -executable
4、开启redis服务:# redis-server
5、连接reids数据库:# redis-cli
redis 数据库的使用
1、string字符串类型
设置键值对 set key value
127.0.0.1:6379> set a chinaitsoft
OK
获取键值:
127.0.0.1:6379> get a
"chinaitsoft"
将key中存储的数字加1
127.0.0.1:6379> set b 2
OK
127.0.0.1:6379> INCR b
(integer) 3
将key中存储的数字减1
127.0.0.1:6379> get b
"6"
127.0.0.1:6379> DECR b
(integer) 5
127.0.0.1:6379> get b
"5"
返回key所存储的字符串的长度:
127.0.0.1:6379> STRLEN a
(integer) 11
链表的使用:
在链表的前端添加一个值:
127.0.0.1:6379> LPUSH aa shandong
(integer) 1
在链表的前端添加一个值:
127.0.0.1:6379> LPUSH aa jinan
(integer) 2
在链表的前端添加一个值:
127.0.0.1:6379> LPUSH aa changqing
(integer) 3
获取链表的值(链表的存储是从0开始的):
127.0.0.1:6379> LRANGE aa 0 3
1) "changqing"
2) "jinan"
3) "shandong"
在链表的后端添加一个值:
127.0.0.1:6379> RPUSH aa china
(integer) 4
127.0.0.1:6379> LRANGE aa 0 4
1) "changqing"
2) "jinan"
3) "shandong"
4) "china"
获取redis数据库中所有的键:
127.0.0.1:6379> KEYS *
1) "aa"
2) "c"
3) "b"
4) "a"
集合的使用:
向集合中添加一个值:
127.0.0.1:6379> SADD dd 1
(integer) 1
127.0.0.1:6379> SADD dd 2
(integer) 1
127.0.0.1:6379> SADD dd 3
(integer) 1
向集合中同时添加多个值:
127.0.0.1:6379> SADD dd 4 5 6
(integer) 3
127.0.0.1:6379> SMEMBERS dd
1) "2"
2) "3"
3) "4"
4) "5"
5) "6"
获取集合的中的所有的成员:
127.0.0.1:6379> SMEMBERS dd
1) "1"
2) "2"
3) "3"
移除并返回集合中的一个随机元素:
127.0.0.1:6379> SPOP dd
"1"
127.0.0.1:6379> SMEMBERS dd
1) "2"
2) "3"
获取集合的成员数:
127.0.0.1:6379> SCARD dd
(integer) 2
返回两个集合的交集:
127.0.0.1:6379> SINTER dd cc
1) "3"
有序集合(zset)的使用:
添加一个数值:
127.0.0.1:6379> ZADD r 0 shandong
(integer) 1
127.0.0.1:6379> zadd r 0 jinan
(integer) 1
127.0.0.1:6379> ZADD r 0 changqing
(integer) 1
显示有序集合某一个区间的值
127.0.0.1:6379> ZRANGE r 0 2
1) "changqing"
2) "jinan"
3) "shandong"
127.0.0.1:6379> ZRANGE r 0 1
1) "changqing"
2) "jinan
显示有序集合中的值的数量:
127.0.0.1:6379> ZCARD r
(integer) 3
127.0.0.1:6379> ZRANGE r 0 1
1) "changqing"
2) "jinan"
hash的使用:
创建:
127.0.0.1:6379> HSET t database "mysql"
(integer) 1
127.0.0.1:6379> HSET t OS ""
(integer) 1
127.0.0.1:6379> HSET t OS "linux"
(integer) 0
获取所有hash表中的字段
127.0.0.1:6379> HKEYS t
1) "database"
2) "OS"
获取在hash表中指定key的所有字段和值
127.0.0.1:6379> HGETALL t
1) "database"
2) "mysql"
3) "OS"
4) "linux"
获取hash表中到的所有值:
127.0.0.1:6379> HVALS t
1) "mysql"
2) "linux"
二、redis集群的搭建
1、分区的概念:
分区是分割数据到多个redis实例,每个实例保存的是key的一个子集
通过利用多台计算机内存的和值,允许构造出更大的数据库
2、分区的类型:
1、范围分区,就是映射一定范围的对象到特定的redis实例。
2、hash分区。
3、redis集群的优势:
1、容错性:解决了单台redis数据库的单点故障,
2、扩展性:相比单台的redis服务器,在升级性能到的过程中,集群能实现多节点的热部署,不需要停止数据库。
3、性能提升:性能的在扩展的时候体现出来。
4、集群架构:
在redis集群的每一个节点中,都有两个东西,一个是插槽,可以理解为存储两个数值的变量,这个变量的取值范围是0-16383,还有一个相当于一个管理的插件,当我们存取的key到达的时候,redis会根据算法得到一个值,然后用这个值对16383取余,这样就会对应一个编号在0-16383的hash槽。
5、集群成员的管理:
集群的节点和节点之间每一个节点都会定期到的交换集群内部的信息,并且更新,这些信息包括:IP、PORT、节点的名字、节点的状态、节点的角色。
6、集群可用性的判断:
每一个节点都会存储这个集群所有主节点和从节点的信息:
1、节点之间互相ping进行监听,如果有一半的节点去ping一个节点没有响应,集群就会认为这个节点宕机。然后去连接他的从节点,如果该节点所有的从节点全部挂掉,该集群就会进入fail状态。
2、如果该集群的一半以上的主节点宕机,那个该集群就会进入fail状态。无论是否有从节点。这就是redis投票机制,投票过程是该集群的所有master参与。
7、集群的搭建:
要让集群正常工作至少3个主节点,所有本次我们使用6个redis节点,分别对应3个主节点,3的从节点:
对应的redis节点的IP和端口对应关系:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
127.0.0.1:7004
127.0.0.1:7005
127.0.0.1:7006
7.1、创建该集群需要的目录
mkdir /redis-cluster
cd /redis-cluster/
mkdir 7001 7002 7003 7004 7005 7006
7.2、将redis的配置文件分别拷贝到对应的PORT的文件夹下:
[root@zabbix-agent redis-cluster]# cp /software/redis-3.2.9/redis.conf 7001
[root@zabbix-agent redis-cluster]# cp 7001/redis.conf 7002
[root@zabbix-agent redis-cluster]# cp 7001/redis.conf 7003
[root@zabbix-agent redis-cluster]# cp 7001/redis.conf 7004
[root@zabbix-agent redis-cluster]# cp 7001/redis.conf 7005
[root@zabbix-agent redis-cluster]# cp 7001/redis.conf 7006
7.3、修改配置文件如下(每一个文件都需要修改):
port 7001 要和对应的目录相对应
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
7.4、分别启动这6个实例:
[root@zabbix-agent redis-cluster]# cd 7001
[root@zabbix-agent 7001]# ls
redis.conf
[root@zabbix-agent 7001]# redis-server redis.conf
[root@zabbix-agent 7001]# ps -ef |grep redis
root 2328 2297 0 17:40 pts/0 00:00:11 redis-server *:6379
root 2358 2335 0 17:43 pts/1 00:00:00 redis-cli
root 2963 1 0 19:25 ? 00:00:00 redis-server 127.0.0.1:7001 [cluster]
root 2967 2365 0 19:25 pts/2 00:00:00 grep redis
[root@zabbix-agent 7001]# cd ../7002
[root@zabbix-agent 7002]# redis-server redis.conf
[root@zabbix-agent 7002]# cd ../7003
[root@zabbix-agent 7003]# redis-server redis.conf
[root@zabbix-agent 7003]# cd ../7004
[root@zabbix-agent 7004]# redis-server redis.conf
[root@zabbix-agent 7004]# cd ../7005
[root@zabbix-agent 7005]# redis-server redis.conf
[root@zabbix-agent 7005]# cd ../7006
[root@zabbix-agent 7006]# redis-server redis.conf
[root@zabbix-agent 7006]# ps -ef|grep redis
root 2328 2297 0 17:40 pts/0 00:00:11 redis-server *:6379
root 2358 2335 0 17:43 pts/1 00:00:00 redis-cli
root 2963 1 0 19:25 ? 00:00:00 redis-server 127.0.0.1:7001 [cluster]
root 2973 1 0 19:28 ? 00:00:00 redis-server 127.0.0.1:7002 [cluster]
root 2978 1 0 19:28 ? 00:00:00 redis-server 127.0.0.1:7003 [cluster]
root 2983 1 0 19:28 ? 00:00:00 redis-server 127.0.0.1:7004 [cluster]
root 2987 1 0 19:28 ? 00:00:00 redis-server 127.0.0.1:7005 [cluster]
root 2991 1 0 19:29 ? 00:00:00 redis-server 127.0.0.1:7006 [cluster]
root 2995 2365 0 19:29 pts/2 00:00:00 grep redis
7.5、安装ruby环境
因为redis集群的管理工具redis-trib.rb依赖ruby环境,首先安装ruby环境。
yum install ruby
yum install rubygems
检查是够安装:
[root@zabbix-agent 7006]# rpm -qa |grep ruby
ruby-rdoc-1.8.7.374-4.el6_6.x86_64
ruby-libs-1.8.7.374-4.el6_6.x86_64
ruby-irb-1.8.7.374-4.el6_6.x86_64
rubygems-1.3.7-5.el6.noarch
ruby-1.8.7.374-4.el6_6.x86_64
gem 安装redis ruby接口:
gem install redis-3.2.1.gem
Successfully installed redis-3.2.1
1 gem installed (表示安装成功)
Installing ri documentation for redis-3.2.1...
Installing RDoc documentation for redis-3.2.1...
7.6、创建集群
redis-trib.rb的子命令create命令用于创建集群
--replicas则是指定为redis cluster中的每个master节点配置几个slave节点。先master后slave。
[root@zabbix-agent src]# redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 输入yes
Creating cluster
Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
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
M: 661f78d1110107c1b3c458de6d2442e1f84fb4d5 127.0.0.1:7001
slots:0-5460 (5461 slots) master
M: 3d9d07e1bea22e86af2ccbc94b1b01a61ea205bb 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
M: 9c0af3c826817482c32b408727fe07f5bb0e9f9a 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
S: c4d0e9dba23bd897658cda342333ee4d2113d37f 127.0.0.1:7004
replicates 661f78d1110107c1b3c458de6d2442e1f84fb4d5
S: a5d9f6909981f35fec475aee87dea78773fd8cfe 127.0.0.1:7005
replicates 3d9d07e1bea22e86af2ccbc94b1b01a61ea205bb
S: a98de46385b5124c5426a0f001386bbabdab4e6a 127.0.0.1:7006
replicates 9c0af3c826817482c32b408727fe07f5bb0e9f9a
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: 661f78d1110107c1b3c458de6d2442e1f84fb4d5 127.0.0.1:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: c4d0e9dba23bd897658cda342333ee4d2113d37f 127.0.0.1:7004
slots: (0 slots) slave
replicates 661f78d1110107c1b3c458de6d2442e1f84fb4d5
S: a5d9f6909981f35fec475aee87dea78773fd8cfe 127.0.0.1:7005
slots: (0 slots) slave
replicates 3d9d07e1bea22e86af2ccbc94b1b01a61ea205bb
M: 3d9d07e1bea22e86af2ccbc94b1b01a61ea205bb 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: a98de46385b5124c5426a0f001386bbabdab4e6a 127.0.0.1:7006
slots: (0 slots) slave
replicates 9c0af3c826817482c32b408727fe07f5bb0e9f9a
M: 9c0af3c826817482c32b408727fe07f5bb0e9f9a 127.0.0.1:7003
slots:10923-16383 (5461 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.
默认的是前三个节点7001 7002 7003为主节点,后三个节点7004 7005 7006为从节点,如果部署在不同的服务器,请根据主从的分布规则,填写IP以及PORT。
至此redis集群搭建完成。