linux中安装redis集群(伪集群)

说明: 伪集群是指一台linux上启动了三台实例,正常的集群是每一个实例一台机器

      百度上的redis集群教程大部分都是使用ruby或者其他脚本一步到位,安装效率比较高

     本教程不使用ruby或其他脚本,需要一步一步手工搭建,相对繁琐,但也更能了解其原理。

安装前准备:1、linux已安装单机redius

大概步骤:

  1)创建节点目录

  2)修改配置文件

  3)启动6个redis实例

  4)节点握手

  5)分配哈希槽

  6)启动集群并验证

 

正文:

第一步:创建相关目录

  redis集群要高可用需要6个节点,3个主节点,3个从节点,所以创建7001-7006的6个节点的工作目录。

mkdir /home/comuser/soft/redis-cluster
mkdir /home/comuser/soft/redis-cluster/log
mkdir /home/comuser/soft/redis-cluster/7001
mkdir /home/comuser/soft/redis-cluster/7002
mkdir /home/comuser/soft/redis-cluster/7003
mkdir /home/comuser/soft/redis-cluster/7004
mkdir /home/comuser/soft/redis-cluster/7005
mkdir /home/comuser/soft/redis-cluster/7006

 

第二步:修改配置文件

  先从redis安装目录拷贝redis.conf到7001目录,并做编辑里面的配置内容

cp /home/comuser/soft/redis-6.0.6/redis.conf  /home/comuser/soft/redis-cluster/7001/redis.conf

  编辑7001目录的redis-7001.conf配置文件,修改以下内容

# 绑定ip,虚拟机ip,尽量不要用127.0.0.1

 bind 192.168.100.10   

  # 节点端口

  port 7001

  # 日志目录

  logfile "/home/cmuser/soft/redis-cluster/log/reids-7001.log"

  # 开启集群模式

  cluster-enabled yes

  # 节点超时时间,单位毫秒

  cluster-node-timeout 15000

  # 集群内部配置节点信息文件名,集群自己创建这个文件,这里只是固定义文件名

  cluster-config-file node-7001.conf

  # pid文件

  pidfile /var/run/redis_7001.pid

  # 主节点密码(可以不设置)

  masterauth xxxxxxx

  # 客户端连接请求密码(可以不设置)

  requirepass xxxxxxx

  然后把这个配置文件分别拷贝到7002-7006目录,配置基本一样,只需要把文件里的7001换成相应的节点号就行

#  在redis-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

#把每个目录配置文件里的7001替换成相应的节点号,在redis-cluster目录执行以下命令:
cd 7002
sed -i "s|7001|7002|g" `grep -lr "7001" ./`
cd ../7003
sed -i "s|7001|7003|g" `grep -lr "7001" ./`
cd ../7004
sed -i "s|7001|7004|g" `grep -lr "7001" ./`
cd ../7005
sed -i "s|7001|7005|g" `grep -lr "7001" ./`
cd ../7006
sed -i "s|7001|7006|g" `grep -lr "7001" ./`

  到此,6个redis的单机配置就已经准备完成,接下来进行集群配置

第三步:启动6个单机redis

  1)  新建一个启动脚本

  redis的启动命令是nohup redis-server redis.confi &  ,但是这样一次只能启动一个,需要连续执行6次,太麻烦了,可以写一个脚本同时启动6个redis。

#在redis-cluster目录里面,新建一个start-all.sh文件
vi start-all.sh

#文件里面内容如下
cd 7001
nohup redis-server redis.conf &
echo '\n'
cd ../7002
nohup redis-server redis.conf &
echo '\n'
cd ../7003
nohup redis-server redis.conf &
echo '\n'
cd ../7004
nohup redis-server redis.conf &
echo '\n'
cd ../7005
nohup redis-server redis.conf &
echo '\n'
cd ../7006
nohup redis-server redis.conf &
echo '\n'

   2) 创建一个关闭集群的脚本

#在redis-cluster目录创建一个stop-all.sh文件
vi stop-all.sh

#内容如下,700是节点号的前三个数字:
ps -ef|grep redis|grep cluster|grep 700|awk '{print $2}'|xargs kill -9

  3)给这两个文件赋权

#chmod是赋权命令,文件可读,可执行等
chmod 777 start-all.sh
chmod 777 stop-all.sh

  4)启动6个单机redis

./start-all.sh

 

第四步:节点握手

  启动6个redis后,登录其中的一台节点

#登录命令
redis-cli -h 192.168.100.10 -p 7001

  进入到redis客户端命令窗口,通过客户端发起meet过程,执行一下命令即可

#用登录的节点给其他节点meet一下,需要一条一条执行

cluster meet 192.168.100.10 7002
cluster meet 192.168.100.10 7003
cluster meet 192.168.100.10 7004
cluster meet 192.168.100.10 7005
cluster meet 192.168.100.10 7006

 

第五步:分配哈希槽

  redis共有16384个哈希槽,通过cluster addslots命令为节点非陪哈希槽,作为一个集群,每个主节点只负责储存一部分哈希槽,所有主节点合起来就是完整的哈希槽点  

  只要给主节点分配哈希槽,从节点哈希槽和主节点一致。

  #退出客户端
  quit
  执行列命令分配哈希草
  redis-cli -h 192.168.100.10 -p 7001 cluster addslots {0..5461}
  redis-cli -h 192.168.100.10 -p 7002 cluster addslots {5462..10922}
  redis-cli -h 192.168.100.10 -p 7003 cluster addslots {10923..16383}

#如果提示某个槽点被使用,就把6个节点关闭,去7001-7006目录,
  把node开头的文件,及aof或者rdb文件删除,然后后启动,在执行上面的命令。

 

第五步:设置主从关系

  6个节点的主从分配可以自己定义,这里使用7001,7002,7003作为主节点,7004为7001从节点,7005为7002从节点,7006为7003从节点。

  分别登录7004-7006设置主从关系

#退出当前登录的节点
quit
#登录7004
redis-cli -h 192.168.100.10 -p 7004 cluster nodes
#回显以下数据
  6829ae75d4b3a5eebef2944c75c0a456c0beacdf 192.168.100.10:7003@17003 master - 0 1628112136000 2 connected 10923-16383
  9bb6c48b1d7a2240253b58331e7c1fe693d09708 192.168.100.10:7006@17006 master - 0 1628112137000 5 connected
  d9b6f9e5d13269e3599249187361132c4a3c3dd6 192.168.100.10:7005@17005 master - 0 1628112137524 4 connected
  27573976166e3f7fbdaac9e0a1230c49b0dea441 192.168.100.10:7002@17002 master - 0 1628112138540 1 connected 5462-10922
  31c48aafe2d882516e836bb7a356abcaf302ace5 192.168.100.10:7004@17004 master - 0 1628112135489 3 connected
  ea29a6d1cd2ab92dd500692920c8134b8f525c59 192.168.100.10:7001@17001 myself,master - 0 1628112138000 0 connected 0-5461
  第一列为节点对应的id,第二列节点ip端口,其他的不用看

  接下来就设置主从关系
#退出客户端
quit
#设置主从关系,cluster replicate 后面一串为对应主节点的id

  redis-cli -h 192.168.100.10 -p 7004 cluster replicate ea29a6d1cd2ab92dd500692920c8134b8f525c59
  redis-cli -h 192.168.100.10 -p 7005 cluster replicate 27573976166e3f7fbdaac9e0a1230c49b0dea441
  redis-cli -h 192.168.100.10 -p 7006 cluster replicate 6829ae75d4b3a5eebef2944c75c0a456c0beacdf

  到此,redis集群已经搭建是否完毕,最后验证集群有无问题。

  关闭6个单机节点。

#在redis-cluster目录执行
./stop-all.sh

 

第六步:启动集群,验证是否正常

  集群是否能用验证方法:如果你在7001节点存入是数据,在其他节点能够获取数据,就表示集群搭建成功

#启动集群(其实就是分别启动6个redis实例),在redis-cluster目录执行启动命令
./start-all.sh

#使用集群的方式登录7001,注意和之前登录单机的命令不一样,多了-c,表示集群登录
redis-cli -c -h 192.168.100.10 -p 7001

#存入缓存数据键值对
set hello redis

#退出7001节点
quit

#登录7006
redis-cli -c -h 192.168.100.10 -p 7006

#获取hello的值
get hello

#如果能够返回redis字符串表示集群搭建成功,如果返回nil表示搭建失败。

posted @ 2021-08-03 09:21  蜗牛开奔驰  阅读(289)  评论(0编辑  收藏  举报