Linux 下安装 Redis 6.0.3

前言

​ Redis 都已经发布到 6 版本了, 正好本地要搭建, 那么就来体验一下最新版, 然而安装过程还是有点曲折的, 最起码对 Linux 环境及编译工具有要求, 可详见问题.

​ Redis 6 还是有很多更新的, 毕竟引入了 threads, 更快, 更快

​ 另外在浏览 Redis 网站时, 发现维护的真好, 上面各种资料说明都有, 虽然是英文版,但是还是建议有时间读一下. 因为你看到的所有关于 Redis Cluster 的博客, 内容都是来自官网的一段说明, 连总结都谈不上. 比如 Redis 5 及之后开始支持 redis-cli 来创建 cluster , 版本 3 和4 还是使用的ruby. 这也是解了我的疑惑, 为啥在 window 安装还需要ruby. 这样的说明在哪里? 还有其他的资讯官网上都有描述, 参考资料上附有直达链接, 也可访问 redis 官网查找

​ Redis 集群至少需要3个节点,因为投票容错机制要求超过半数,所以2个节点无法构成集群。要保证集群的高可用,需要每个节点都有从节点,所以 Redis 集群至少需要6台服务器。

闲言已叙. Go! Go! Go!

环境

​ CentOS Linux release 7.6

1. 安装依赖包

yum -y install gcc automake autoconf libtool make

2. 下载redis安装包

cd /usr/local
wget  http://download.redis.io/releases/redis-6.0.3.tar.gz

​ 解压、编译与安装

tar xzf redis-6.0.3.tar.gz
cd redis-6.0.3
make MALLOC=libc & make install

3. 开始搭建集群

​ 创建 redis 节点(在 /usr/local/redis-6.0.3 目录下)

mkdir cluster

​ 创建节点目录,并将 redis.conf 文件复制到 7001 节点目录下

cd cluster && mkdir 7001 7002 7003 7004 7005 7006

​ 修改 7001/redis.conf 配置文件

# 是否要用守护线程的方式启动
daemonize yes
# 分别对每个机器的端口号进行设置
port 7001
# 指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据
dir /usr/local/redis-6.0.3/cluster/7001/
# 启动集群模式
cluster-enabled yes
# 集群节点信息文件,这里 700x 最好和 port 对应上,redis 会自动创建 nodes-XX.conf不需要手动创建
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
# 关闭保护模式
protected-mode  no
appendonly yes
##### 如果要设置密码需要增加如下配置:
# 设置 redis 访问密码
requirepass 123456
# 设置集群节点间访问密码,跟上面一致
masterauth 123456

​ 将 7001/redis.conf 复制到其他目录, 并修改为各自的配置

cd /usr/local/redis-6.0.3/cluster
cp 7001/redis.conf 7002
cp 7001/redis.conf 7003
cp 7001/redis.conf 7004
cp 7001/redis.conf 7005
cp 7001/redis.conf 7006
# 下面是将批量修改 700x
sed -i "s/7001/7002/g" 7002/redis.conf
sed -i "s/7001/7003/g" 7003/redis.conf
sed -i "s/7001/7004/g" 7004/redis.conf
sed -i "s/7001/7005/g" 7005/redis.conf
sed -i "s/7001/7006/g" 7006/redis.conf 

​ 启动节点

cd /usr/local/redis-6.0.3
src/redis-server cluster/7001/redis.conf
src/redis-server cluster/7002/redis.conf
src/redis-server cluster/7003/redis.conf
src/redis-server cluster/7004/redis.conf
src/redis-server cluster/7005/redis.conf
src/redis-server cluster/7006/redis.conf

​ 创建集群

/usr/local/redis-6.0.3/src/redis-cli --cluster create --cluster-replicas 1 192.168.0.1:7001 192.168.0.1:7002 192.168.0.1:7003 192.168.0.1:7004 192.168.0.1:7005 192.168.0.1:7006

注意,上面的 ip 要替换为本机IP。如果设定了密码之后, 后面添加 -a 密码值 即可

4. 测试

src/redis-cli -h 192.168.0.1 -p 7001 -a 123456
get test 
(error) MOVED 6918 192.168.0.1:7005

​ 注意那个 error , 说明没有启动集群模式(即缺少了那个"-c"), 换成以下方式即可

src/redis-cli -c -h 192.168.0.1 -p 7001 -a 123456

​ 之后 get test 会跳转到相应的服务节点, 获取数据

# 查看集群信息
src/redis-cli -p 7001 -a 123456 cluster nodes
# 结果
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
8c10abba0f2899dad3be219e216cc0bf69c66d1b 192.168.0.1:7003@17003 master - 0 1590540040583 3 connected 10923-16383
4b89fb185b98fd545aebe75f5ea5f8d6b817d5dd 192.168.0.1:7004@17004 slave 8b2f9a6f7b6fd5e44c546c38206f87e43f33361f 0 1590540040583 4 connected
63b6901ad65de101fa7eff2308dac21277799b6b 192.168.0.1:7002@17002 master - 0 1590540039581 2 connected 5461-10922
8b2f9a6f7b6fd5e44c546c38206f87e43f33361f 192.168.0.1:7001@17001 myself,master - 0 1590540040000 1 connected 0-5460
08b65c951b7fa1d99c317aae68243adbb2e0892c 192.168.0.1:7005@17005 slave 63b6901ad65de101fa7eff2308dac21277799b6b 0 1590540041585 5 connected
96c2dee8f791cc78d46b706d728d1d2c045b5396 192.168.0.1:7006@17006 slave 8c10abba0f2899dad3be219e216cc0bf69c66d1b 0 1590540041585 6 connected

5. 问题

​ 问题一

cd src && make all
make[1]: Entering directory `/usr/local/redis-6.0.3/src'
Makefile.dep:25: *** missing separator.  Stop.
make[1]: Leaving directory `/usr/local/redis-6.0.3/src'
make: *** [all] Error 2

​ 解决方式: 只要前面 yum 安装依赖包没有问题, 可能会很少出现此问题. 我这边是由于 解压的指令不对, 导致一致报这个问题,后面删除掉解压包, 重新解压, 看到了问题二

​ 问题二

server.c:5170:15: error: ‘struct redisServer’ has no member named ‘maxmemory’
    if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {
        ^
            server.c:5170:39: error: ‘struct redisServer’ has no member named ‘maxmemory’
                if (server.maxmemory > 0 && server.maxmemory < 1024*1024) {
                    ^
                        server.c:5171:176: error: ‘struct redisServer’ has no member named ‘maxmemory’
                            serverLog(LL_WARNING,"WARNING: You specified a maxmemory value that is less than 1MB (current value is %llu bytes). Are you sure this is what you really want?", server.maxmemory);
                    ^
                        server.c:5174:31: error: ‘struct redisServer’ has no member named ‘server_cpulist’
                            redisSetCpuAffinity(server.server_cpulist);
                    ^
                        server.c: In function ‘hasActiveChildProcess’:
                    server.c:1476:1: warning: control reaches end of non-void function [-Wreturn-type]
                }
        ^
            server.c: In function ‘allPersistenceDisabled’:
        server.c:1482:1: warning: control reaches end of non-void function [-Wreturn-type]
    }
^
    server.c: In function ‘writeCommandsDeniedByDiskError’:
server.c:3789:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
    server.c: In function ‘iAmMaster’:
server.c:4966:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
    make[1]: *** [server.o] Error 1
    make[1]: Leaving directory `/usr/local/redis-6.0.3/src'
    make: *** [all] Error 2

​ 解决办法:

# 查看 gcc 版本是否在5.3以上,centos7.6默认安装4.8.5
gcc -v
# 升级gcc到5.3及以上,如下:
# 升级到gcc 9.3:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
# 需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
# 如果要长期使用gcc 9.3的话:

echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
# 这样退出shell重新打开就是新版的gcc了
# 以下其他版本同理,修改 devtoolset 版本号即可。

查看 linux 系统属性的指令

# 查看发行版本
cat /etc/redhat-release
# 结果
CentOS Linux release 7.6
# 查看系统版本
cat /proc/version
# 显示 
Linux version 3.10.0-957.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Thu Nov 8 23:39:32 UTC 2018

参考这篇博文

参考资料

​ 官方教程 [力荐]

​ Redis 6 版本说明

​ Redis Cluster 规范文档 [力荐]

​ 解决了我的问题

你可能感兴趣的:(linux)