Linux搭建Redis集群
今天开始,我们着手搭建Redis集群,并实现客户端连接并操作Redis集群
1.首先,在开始搭建集群之前,需要注意的是,redis3.0之后才支持集群,但redis3.0-redis5.0之间需要ruby环境的支撑,而redis6.x需要gcc版本在5.3以上,在搭建集群前需要检查自己的机器的gcc版本是否符合我所说的再进行搭建,可以通过该命令查看gcc版本,我机器的版本是5.4,建议使用redis5或者redis6的版本,能更快速的搭建好集群
gcc -v
2. 下载redis的压缩包,我这里推荐你们官网地址,里面有redis的所有版本,可以选择相应版本下载
3.我这里使用的是redis5.x的版本,
4.使用命令解压: tar -zxvf redis-5.0.2.tar.gz,进入解压后的文件夹使用命令:make编译一下(注:如果make编译失败并且报 jemalloc/jemalloc.h:没有那个文件中目录 错误,这个很正常,第一次使用make编译会有这个问题,使用:make MALLOC=libc 该命令可以解决),编译好后进入src目录,使用make install PREFIX=/usr/local/redis(注:也可以指定其他目录,主要作用是将编译好后的可执行文件放到/usr/local/redis目录下),等待编译完成。
5.编译完成后,使用命令cd …/utils 进入主目录的utils文件夹下,查看该目录
6,将文件夹create-cluster,移动到你需要的目录下,建议移动到/usr/local/redis/bin目录下,进入该目录并查看
移动命令:mv create-cluster /usr/local/redis/bin/
切换命令: cd /usr/local/redis/bin
7.进入create-cluster 目录,打开脚本create-cluster,命令vim create-cluster(用vim打开后,若想编辑文档内的内容,按 i 键可进行编辑,编辑后按ESC键,退出编辑,再按Shift+:,然后在:后加上wq,意思是保存离开即可)
8.修改create-cluster脚本
PORT 改为6378(因为后面程序会加1,就需要比你想要设置的端口值-1,也就是开始端口为6379,可以自定义端口)
TIMEOUT=2000 超时时间,可以设置也可以使用默认
NODES=6 节点数量,这里需要注意,如果是一台服务器做三主三从的伪集群,则这里不需要修改,如果是两台服务器则这里值为3,如果三台服务器则值为2
REPLICAS=1 这里不要动
添加参数
PUBLICNET=192.168.1.190 这里改为向外抛出的IP地址,也就是公网IP
COUNT=10000 这个用于总线集成的端口,我们不止要开集群的端口,还需要开总线端口,一般总线端口为集群端口+10000,也就是集群端口为6379,那么总线端口为16379,(要打开防火墙,否则会出错)
TOTALPORT=0 总线端口,先定义,后面需要
9.修改start下的内容,如果操作步骤是跟着文档来,则直接复制已经修改后的脚本就好
修改后的脚本:
/usr/local/redis/bin/redis-server --port $PORT --cluster-enabled yes --cluster-config-file nodes-${PORT}.conf --cluster-node-timeout $TIMEOUT --protected-mode no --cluster-announce-ip $PUBLICNET --cluster-announce-port $PORT --cluster-announce-bus-port $TOTALPORT --appendonly yes --appendfilename appendonly-${PORT}.aof --dbfilename dump-${PORT}.rdb --logfile ${PORT}.log --daemonize yes
解释:
/usr/local/redis/bin/redis-server redis redis服务地址
--port $PORT 端口地址
--cluster-enabled yes 开启集群
--cluster-config-file node-${PORT}.conf 集群的配置文件
--cluster-node-timeout $TIMEOUT 集群节点超时时间
--protected-mode no protect-mode:是为了禁止公网访问redis cache 需要关掉
--cluster-announce-ip $PUBLICNET 配置集群映射的公网IP
--cluster-announce-port $PORT 配置集群映射的端口
--cluster-announce-bus-port $TOTALPORT 配置集群映射的总线端口
--appendonly yes 开启AOF持久化策略
--appendfilename appendonly-${PORT}.aof aof文件
--dbfilename dump-${PORT}.rdb rdb文件,和aof一样是一种持久化策略
--logfile ${PORT}.log redis cache的日志文件
--daemonize yes 指定redis要用守护进程的方式启动
修改后如图显示
10.修改create下的内容(注:解释语句不要写进去)
HOSTS=”$HOSTS 192.168.1.190:$PORT” 这里将127.0.0.1改为你的机子的ip(私网IP)
如果是单服务器集群部署,只需要将redis-cli 的地址改掉,代码如下:
/usr/local/redis/bin/redis-cli --cluster create $HOSTS --cluster-replicas $REPLICAS
如果是多服务器地址,比如三台,这样每台服务器上有两个redis服务,需要在$HOSTS后加上另外几台服务器的ip+port,ip是私网ip ,下面展示三台服务器的操作
/usr/local/redis/bin/redis-cli --cluster create $HOSTS ip1:port1 ip1:port2 ip2:port1 ip2:port2 --cluster-replicas $REPLICAS
11.修改stop下的内容
/usr/local/redis/bin/redis-cli -p $PORT shutdown nosave
12.修改watch下的内容
/usr/local/redis/bin/redis-cli -p $PORT cluster nodes | head -30
13.修改call下的内容
/usr/local/redis/bin/redis-cli -p $PORT $2 $3 $4 $5 $6 $7 $8 $9
14.修改完后,按ESC键,退出编辑,再按shift+:,之后按wq,保存退出,注:不能出现中文
15.使用命令开启服务./create-cluster start,这里是单服务器部署,因此一次性开启了六个节点,
如果是三台服务器,则只会开启两个节点
./create-cluster start
16.查看redis服务是否启动了,使用命令 ps aux | grep redis 查看
17.使用命令./create-cluster create,它会询问你这样配置节点是否可以,输入yes就好(注:多服务器下,需要其他服务器都运行./create-cluster start后才能使用create,否则会报错)
./create-cluster create
18.显示OK,就说明集群已经布置好了
19.操作一下看看是否没有问题,使用命令 /usr/local/redis/bin/redis-cli -c -h 192.168.1.190 -p 6379 -c 命令是指可以自由切换节点
/usr/local/redis/bin/redis-cli -c -h 192.168.1.190 -p 6379
20.可以看到已经进来了,接下来进行设值
21.它的过程是这样的 对key进行CRC16运算再%16384取余之后的值去对应相应的slot(槽),图中,redis会分配三个主节点的卡槽位置为0-5460,5461-10922,10923 - 16383,取余之后的值落在那个区间,就会放在哪个节点里,可以从上图中看到,当设置不同的key是会进行上述操作,然后重定向到相对应的主节点中进行设值
最后使用客户端工具连接服务器上的集群看是否成功,只需要填一个端口就好,会自动跳转节点的(如果是阿里云等云服务器需要对这些端口开放防火墙)
关于create-cluster脚本的一些命令
./create-cluster start 开启集群节点服务
./create-cluster create 开始创建集群
./create-cluster stop 关闭集群
./create-cluster clean 清除集群配置,日志,aof文件,重新布置集群后需要清除
至此,集群搭建完成,需要的小伙伴可以试一下哦