【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
一、CentOS7下Redis安装(非常详细)
1.查看linux内核版本
此步骤可以省略,一般CentOS7内核版本都应该满足,因为搭建Redis高可用集群是Redis3以上才支持的,而Redis3需要linux内核高于3.10版本,所有才有此步骤,在linux下输入命令查看内核版本:
uname -a
展示如下信息就没问题:
Linux centos 3.10.0-1062.9.1.el7.x86_64 #1 SMP Fri Dec 6 15:49:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
2.下载redis包
在Redis官网下载Redis压缩包,本次实验使用 redis-3.0.6.tar.gz 版本。
3.编译安装Redis
笔者的Redis压缩包存在 /home/soft 下
直接解压:
tar -zxvf redis-3.0.6.tar.gz
解压后,有Redis文件夹 redis-3.0.6
进入该文件夹目录:
cd redis-3.0.6
编译并安装:
make && make install
等待Complete后,进入redis下的src目录:
cd src
ls
用ls命令查看所有当前src目录下的文件,会发现有 redis-server redis-cli redis-trib.rb 三个文件,这三个文件前两个用来开启关闭redis,第三个用于建立集群。
在redis目录下(当前在src目录,可以直接 cd .. 命令回到上级目录),新建 bin 目录(mkdir bin),建好后将上面前两个文件移入bin目录下:
具体操作命令:
cd ../
mkdir bin
cp src/redis-server bin/
并将当前目录下的redis-conf文件也一同移入bin目录下:
cp redis.conf /bin/
说明一下,将这几个文件移入同一个bin目录下,主要是为了好操作而已,不移动也是完全可以的。
4.启动关闭Redis
启动redis:
在bin目录下:
./redis-server redis.conf
此redis启动的默认端口是6379
关闭redis:
./redis-cli -p 6379 shutdown
单机版单redis安装成功。
二、Redis高可用分片集群搭建
Redis高可用分片集群搭建至少得六台服务器,三台master,三台slave,且Redis3版本才支持,集群启动脚本是运行在Ruby环境下,所以笔者准备的Redis是3.0.6版本,更改版本需要更高的Ruby版本环境,当前CentOS安装的Ruby环境是2.0.0的,gem也是2.0.0的,笔者不想重新安装Ruby环境(试过有点烦),而且redis.gem版本目前最高4.x,会遇到很多环境依赖问题,懒得弄了。
准备环境:安装好的Redis3.0.6已备好,六台服务器(哪有那么多,笔者只能用一台虚拟机六个端口去模拟),ruby-2.0.0环境,gem-2.0.0环境(一般安装好ruby就有gem了,版本应该是一致的),redis-3.0.6.gem包(ruby的redis包,得下载,最好和redis版本一致)。
1.创建一个集群目录
笔者是在 /home 目录下创建的集群文件夹:
cd /home
mkdir redis-cluster
将第一大步骤创建的redis bin目录复制到集群文件夹下:
cp -r soft/redis-3.0.6/bin/ redis-cluster/redis01
打开redis01修改redis-conf的端口、启用集群设置、开启守护线程(主要为了后台执行):
cd redis01
vim redis.conf
打开后找到(端口)port 6379,把6379改为7001(此改动是为了好记),把cluster-enabled (开启集群)解开注释后面的值改为yes,找到daemonize (开启守护线程)设置为yes
设置完毕后保存该文件。
然后redis-cluster文件夹下将redis01复制5份分别为redis02、redis03、redis04、redis05、redis06,并且分别将redis.conf的port分别修改为7002、7003、7004、7005、7006,这样就修改完了。
启动这六个redis,一个一个的启动当然太麻烦,写一个脚本一起启动:
先在redis-cluster文件夹下建立一个脚本文件:
touch startall.sh
用vim打开该文件,然后将一下脚本内容复制进去:
cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..
给该.sh脚本文件授权后才能启动,授权命令:
chmod +x startall.sh
或者
chmod 777 startall.sh
授权后,用ls命令查看,该文件会由变成绿色的。
用以下命令启动redis:
./startall.sh
然后查看启动情况:
ps -aux |grep redis
[root@centos redis-cluster]# ./startall.sh
[root@centos redis-cluster]# ps -aux | grep redis
root 29874 0.6 0.3 140904 7212 ? Ssl 10:15 0:00 ./redis-server *:7001 [cluster]
root 29876 0.1 0.3 140904 7212 ? Ssl 10:15 0:00 ./redis-server *:7002 [cluster]
root 29882 0.0 0.3 140904 6552 ? Ssl 10:15 0:00 ./redis-server *:7003 [cluster]
root 29886 0.1 0.1 140904 2504 ? Ssl 10:15 0:00 ./redis-server *:7004 [cluster]
root 29890 0.0 0.1 140904 2500 ? Ssl 10:15 0:00 ./redis-server *:7005 [cluster]
root 29894 0.0 0.1 140904 2504 ? Ssl 10:15 0:00 ./redis-server *:7006 [cluster]
root 29904 0.0 0.0 112728 972 pts/0 S+ 10:15 0:00 grep --color=auto redis
出现如上内容说明6个redis启动成功,已经具备集群环境搭建的基础,接下来开启集群。
2.开启集群
ruby环境已经建好的情况下我们可以直接进行了,如果ruby环境没有,可以用yum install ruby去安装,具体操作请查阅安装ruby环境的相关文档。
在第二大点开始的说明中,有个redis-3.0.6.gem的包,就是redis 的ruby包,这个需要先安装,笔者的此包放在/home/soft目录下,和redis的目录平级。
在/home/soft目录下,运行如下命令安装redis的gem文件:
gem install redis-3.0.6.gem
出现1 gem installed. 就安装成功了。
在回到第一大步安装好的redis目录的src下,还记得有个redis-trib.rb文件吧,将此文件复制到redis-cluster目录下:
cp redis-trib.rb ../../../redis-cluster
然后用此命令开启集群(当然需要将IP替换成自己虚拟机的IP):
./redis-trib.rb create --replicas 1 192.168.43.108:7001 192.168.43.108:7002 192.168.43.108:7003 192.168.43.108:7004 192.168.43.108:7005 192.168.43.108:7006
也可以将其写成一个脚本文件,直接启动:
用touch命令新建redis-cluster.sh文件,并打开将上述命令复制进去保存,然后用chmod命令授权即可。
启动后,中途有个地方要输入yes才能继续,如下图:
[root@centos redis-cluster]# ./redis-cluster.sh
>>> 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: 799398bdbacb72d10ad0cbff1badd8f99bff7a1e 127.0.0.1:7001
slots:0-5460 (5461 slots) master
M: d70a2f378e2142fa719a518ef77b3c90e6ff5394 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
M: bf81bbef6325e45288e5ca9ed9b40764e3e71dd6 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
S: 5b9f16c467786d47de1c7e9138d17ff6584ffae5 127.0.0.1:7004
replicates 799398bdbacb72d10ad0cbff1badd8f99bff7a1e
S: 1e860f0142f5978ebccc41de473e7f2728b19dbe 127.0.0.1:7005
replicates d70a2f378e2142fa719a518ef77b3c90e6ff5394
S: 70e9d7763ebf7a0fb6efe34a49bd53b0b3da3f7b 127.0.0.1:7006
replicates bf81bbef6325e45288e5ca9ed9b40764e3e71dd6
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: 799398bdbacb72d10ad0cbff1badd8f99bff7a1e 127.0.0.1:7001
slots:0-5460 (5461 slots) master
M: d70a2f378e2142fa719a518ef77b3c90e6ff5394 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
M: bf81bbef6325e45288e5ca9ed9b40764e3e71dd6 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
M: 5b9f16c467786d47de1c7e9138d17ff6584ffae5 127.0.0.1:7004
slots: (0 slots) master
replicates 799398bdbacb72d10ad0cbff1badd8f99bff7a1e
M: 1e860f0142f5978ebccc41de473e7f2728b19dbe 127.0.0.1:7005
slots: (0 slots) master
replicates d70a2f378e2142fa719a518ef77b3c90e6ff5394
M: 70e9d7763ebf7a0fb6efe34a49bd53b0b3da3f7b 127.0.0.1:7006
slots: (0 slots) master
replicates bf81bbef6325e45288e5ca9ed9b40764e3e71dd6
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
如果已经启动过集群,或者单个节点启动过,集群会启动报错,这时一定要删除每个节点的 dump.rdb 和 nodes.conf 这两个文件才能启动集群。
至此,Redi集群搭建成功!大家注意最后一段文字,显示了每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别映射了0-5460、5461-10922、10933-16383solts。
在任意一个节点都可以连接整个集群,他们会根据算法自动转发切换节点进行存储和查询。
redis01/redis-cli -p 7001 -c
注意:命令行一定要加上-c,不然节点之间是无法自动跳转的!如下图可以看到,存储的数据(key-value)是均匀分配到不同的节点的:
三、总结
先安装单个redis,然后复制多个修改端口模拟多个节点,然后用ruby安装集群环境并启动集群。
最后两条简单的命令查看集群简单信息:
1.查看当前集群信息
cluster info
2.查看集群里有多少个节点
cluster nodes