redis-CentOS7安装单实例和集群

1、单实例安装

1.1、下载redis

下载地址在:redis.io 首页
image.png

如果从官网下载慢,可以把链接贴到迅雷下载,再传到虚拟机:

1
2
cd /usr/local/soft/
wget https://download.redis.io/releases/redis-6.0.9.tar.gz

1.2、解压压缩包

1
tar -zxvf redis-6.0.9.tar.gz

1.3、安装gcc依赖

Redis是C语言编写的,编译需要GCC。
Redis6.x.x版本支持了多线程,需要gcc的版本大于4.9,但是CentOS7的默认版本是4.8.5。
查看gcc的版本:

1
gcc -v

升级gcc版本:

1
2
3
4
5
6
7
yum -y install centos-release-scl

yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

scl enable devtoolset-9 bash

echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile

确认gcc的版本(在同一个窗口中!):

1
gcc -v

1.4、编译安装

1
2
cd redis-6.0.9/src
make install

安装成功的结果是src目录下面出现服务端和客户端的脚本
redis-server
redis-cli
redis-sentinel

1.5、修改配置文件

默认的配置文件是/usr/local/soft/redis-6.0.9/redis.conf
后台启动,不然窗口一关服务就挂了

1
daemonize no

改成

1
daemonize yes

下面一行必须改成 bind 0.0.0.0 或注释,否则只能在本机访问

1
bind 127.0.0.1

如果需要密码访问,取消requirepass的注释,在外网(比如阿里云)这个必须要配置!

1
requirepass yourpassword

1.6、使用指定配置文件启动Redis

1
/usr/local/soft/redis-6.0.9/src/redis-server /usr/local/soft/redis-6.0.9/redis.conf

查看端口是否启动成功:

1
netstat -an|grep 6379

1.7、进入客户端

1
/usr/local/soft/redis-6.0.9/src/redis-cli

1.8、停止redis(在客户端中)

1
redis> shutdown

1
2
ps -aux | grep redis
kill -9 xxxx

1.9、配置别名的步骤

1
vim ~/.bashrc

添加两行:

1
2
alias redis='/usr/local/soft/redis-6.0.9/src/redis-server /usr/local/soft/redis-6.0.9/redis.conf'
alias rcli='/usr/local/soft/redis-6.0.9/src/redis-cli'

编译生效:

1
source ~/.bashrc

这样就可以用redis启动服务,rcli进入客户端了

2、三主三从伪集群安装

为了节省机器,我们直接把6个Redis实例安装在同一台机器上(3主3从),只是使用不同的端口号。
机器IP 192.168.44.181
可以跟单机的redis安装在同一台机器上,因为数据目录不同,没有影响。

1
2
3
4
cd /usr/local/soft/redis-6.0.9
mkdir redis-cluster
cd redis-cluster
mkdir 7291 7292 7293 7294 7295 7296

复制redis配置文件到7291目录

1
cp /usr/local/soft/redis-6.0.9/redis.conf /usr/local/soft/redis-6.0.9/redis-cluster/7291

修改7291的redis.conf配置文件,内容:

1
2
3
cd /usr/local/soft/redis-6.0.9/redis-cluster/7291
>redis.conf
vim redis.conf

内容如下:

1
2
3
4
5
6
7
8
9
port 7291
daemonize yes
protected-mode no
dir /usr/local/soft/redis-6.0.9/redis-cluster/7291/
cluster-enabled yes
cluster-config-file nodes-7291.conf
cluster-node-timeout 5000
appendonly yes
pidfile /var/run/redis_7291.pid

把7291下的redis.conf复制到其他5个目录。

1
2
3
4
5
6
cd /usr/local/soft/redis-6.0.9/redis-cluster/7291
cp redis.conf ../7292
cp redis.conf ../7293
cp redis.conf ../7294
cp redis.conf ../7295
cp redis.conf ../7296

批量替换内容

1
2
3
4
5
6
cd /usr/local/soft/redis-6.0.9/redis-cluster
sed -i 's/7291/7292/g' 7292/redis.conf
sed -i 's/7291/7293/g' 7293/redis.conf
sed -i 's/7291/7294/g' 7294/redis.conf
sed -i 's/7291/7295/g' 7295/redis.conf
sed -i 's/7291/7296/g' 7296/redis.conf

启动6个Redis节点

1
2
3
4
5
6
7
cd /usr/local/soft/redis-6.0.9/
./src/redis-server redis-cluster/7291/redis.conf
./src/redis-server redis-cluster/7292/redis.conf
./src/redis-server redis-cluster/7293/redis.conf
./src/redis-server redis-cluster/7294/redis.conf
./src/redis-server redis-cluster/7295/redis.conf
./src/redis-server redis-cluster/7296/redis.conf

是否启动了6个进程

1
ps -ef|grep redis

image.png

创建集群

注意用绝对IP,不要用127.0.0.1

1
2
cd /usr/local/soft/redis-6.0.9/src/
redis-cli --cluster create 192.168.44.181:7291 192.168.44.181:7292 192.168.44.181:7293 192.168.44.181:7294 192.168.44.181:7295 192.168.44.181:7296 --cluster-replicas 1

Redis会给出一个预计的方案,对6个节点分配3主3从,如果认为没有问题,输入yes确认

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.44.181:7295 to 192.168.44.181:7291
Adding replica 192.168.44.181:7296 to 192.168.44.181:7292
Adding replica 192.168.44.181:7294 to 192.168.44.181:7293
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 2058bd8fc0def0abe746816221c5b87f616e78ae 192.168.44.181:7291
slots:[0-5460] (5461 slots) master
M: 4e41266f2fb7944420d66235475318f5f9526cd8 192.168.44.181:7292
slots:[5461-10922] (5462 slots) master
M: 9ff8ac86b5faf3c0eca149f090800efea3b142e0 192.168.44.181:7293
slots:[10923-16383] (5461 slots) master
S: 8383088d3ce75732fc9acb31ca4bce68833028f7 192.168.44.181:7294
replicates 9ff8ac86b5faf3c0eca149f090800efea3b142e0
S: d185adbfa62133e30cee291b028eff451502ecca 192.168.44.181:7295
replicates 2058bd8fc0def0abe746816221c5b87f616e78ae
S: 634709cf14809976ea40b65615f816e31d424748 192.168.44.181:7296
replicates 4e41266f2fb7944420d66235475318f5f9526cd8
Can I set the above configuration? (type 'yes' to accept):

注意看slot的分布:

1
2
3
7291  [0-5460] (5461个槽) 
7292 [5461-10922] (5462个槽)
7293 [10923-16383] (5461个槽)

输入yes确认,集群创建完成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>>> Performing Cluster Check (using node 192.168.44.181:7291)
M: 2058bd8fc0def0abe746816221c5b87f616e78ae 192.168.44.181:7291
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 8383088d3ce75732fc9acb31ca4bce68833028f7 192.168.44.181:7294
slots: (0 slots) slave
replicates 9ff8ac86b5faf3c0eca149f090800efea3b142e0
S: d185adbfa62133e30cee291b028eff451502ecca 192.168.44.181:7295
slots: (0 slots) slave
replicates 2058bd8fc0def0abe746816221c5b87f616e78ae
M: 9ff8ac86b5faf3c0eca149f090800efea3b142e0 192.168.44.181:7293
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 4e41266f2fb7944420d66235475318f5f9526cd8 192.168.44.181:7292
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 634709cf14809976ea40b65615f816e31d424748 192.168.44.181:7296
slots: (0 slots) slave
replicates 4e41266f2fb7944420d66235475318f5f9526cd8
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

重置集群的方式是在每个节点上个执行cluster reset,然后重新创建集群

批量写入值

1
2
cd /usr/local/soft/redis-6.0.9/redis-cluster/
vim setkey.sh

脚本内容

1
2
3
4
5
6
7
#!/bin/bash
for ((i=0;i<20000;i++))
do
echo -en "helloworld" | redis-cli -h 192.168.44.181 -p 7291 -c -x set name$i >>redis.log
done
chmod +x setkey.sh
./setkey.sh

连接到客户端

1
2
3
redis-cli -p 7291
redis-cli -p 7292
redis-cli -p 7293

每个节点分布的数据

1
2
3
4
5
6
127.0.0.1:7291> dbsize
(integer) 6652
127.0.0.1:7292> dbsize
(integer) 6683
127.0.0.1:7293> dbsize
(integer) 6665

其他命令,比如添加节点、删除节点,重新分布数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 ... hostN:portN
--cluster-replicas <arg>
check host:port
--cluster-search-multiple-owners
info host:port
fix host:port
--cluster-search-multiple-owners
reshard host:port
--cluster-from <arg>
--cluster-to <arg>
--cluster-slots <arg>
--cluster-yes
--cluster-timeout <arg>
--cluster-pipeline <arg>
--cluster-replace
rebalance host:port
--cluster-weight <node1=w1...nodeN=wN>
--cluster-use-empty-masters
--cluster-timeout <arg>
--cluster-simulate
--cluster-pipeline <arg>
--cluster-threshold <arg>
--cluster-replace
add-node new_host:new_port existing_host:existing_port
--cluster-slave
--cluster-master-id <arg>
del-node host:port node_id
call host:port command arg arg .. arg
set-timeout host:port milliseconds
import host:port
--cluster-from <arg>
--cluster-copy
--cluster-replace
help

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

3、命令

3.1 集群命令

cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点(node),以及这些节点的相关信息。
cluster meet :将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
cluster forget <node_id> :从集群中移除 node_id 指定的节点(保证空槽道)。
cluster replicate <node_id> :将当前节点设置为 node_id 指定的节点的从节点。
cluster saveconfig :将节点的配置文件保存到硬盘里面。

3.2 槽slot命令

cluster addslots [slot …] :将一个或多个槽(slot)指派(assign)给当前节点。
cluster delslots [slot …] :移除一个或多个槽对当前节点的指派。
cluster flushslots :移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot node <node_id> :将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
cluster setslot migrating <node_id> :将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot stable :取消对槽 slot 的导入(import)或者迁移(migrate)。

3.3 键命令

cluster keyslot :计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot :返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot :返回 count 个 slot 槽中的键

4、管理工具

一个Win7可用的Redis可视化客户端(redis-desktop-manager-0.8.3.3850)
最后一个免费版本是0.9.3.817,后面都要付费了,不升级不用付费
链接:https://pan.baidu.com/s/1m6QoUaU0AKLfiXGhSNDJww
提取码:ewa0