redis 集群搭建

生产环境redis集群至少需要一个备份节点,才能更好的保证集群的高可用。一个集群里面有 M1-S1、M2-S2、M3-S3 六个主从节点,其中节点 M1 包含 0-5500号哈希槽,节点 M2 包含5501-11000 号哈希槽,节点 M3 包含11001-16384号哈希槽。如果是 M1 宕掉,集群便会选举S1 为新节点继续服务,整个集群还会正常运行。当 M1、S1 都宕掉了,这时候集群就不可用了。

 

建议使用至少六台单独的服务器进行部署,这里为了搭建方便,在一台服务器上进行实操

开始

环境:Centos7

安装gcc

yum install gcc

注意:

如果已经安装gcc则升级基础组件,否则编译安装会报错:
# 升级到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

 

下载解压:

#下载安装包
wget http://download.redis.io/releases/redis-6.0.5.tar.gz

#解压安装包
tar zxf redis-6.0.5.tar.gz

安装

#解压安装包后进入redis-6.0.5目录执行安装
cd redis-6.0.5
#安装
make && make install

创建集群配置:

#在redis-6.0.5创建集群文件夹
mkdir redis-cluster

#在redis-cluster下创建文件存放对应配置信息
mkdir 8001 8002 8003 8004 8005 8006

#在对应800X下创建 pid nodes dir 文件夹
mkdir pid nodes dir

#在对应800X创建redis8001.conf文件

修改6个redis.conf配置:

#端口800X
port  8003

#需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
bind 192.168.1.158

#redis后台运行
daemonize yes

#pidfile文件对应800X
pidfile  /usr/local/redis-6.0.5/redis-cluster/8003/pid/redis_8003.pid

#开启集群  把注释#去掉
cluster-enabled  yes

#集群节点信息文件,这里800x最好和port对应上
cluster-config-file  /usr/local/redis-6.0.5/redis-cluster/8003/nodes/nodes_8003.conf 

#AOF 持久化,按需要选择是否开启
appendonly  yes

#指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据
dir /usr/local/redis-6.0.5/redis-cluster/8003/dir/

#Redis集群节点链接超时时限(node timeout)
cluster-node-timeout 5000

#关闭保护模式
protected-mode no

#保存数据的AOF文件名称
appendfilename "appendonly.aof"


############################################如下配置可以减少异步复制和脑裂导致的数据丢失(min-slaves-to-write min-slaves-max-lag)#######
#当min-slaves-to-write=1时,slave去维护断开的情况下 主库此时只能读,不能写:
min-slaves-to-write 1

#数据复制和同步的延迟不能超过10秒
min-slaves-max-lag 10

启动服务:

进入目录
 cd redis-6.0.5/src/

启动
redis-server ../redis-cluster/8001/redis8001.conf
redis-server ../redis-cluster/8002/redis8002.conf
redis-server ../redis-cluster/8003/redis8003.conf
redis-server ../redis-cluster/8004/redis8004.conf
redis-server ../redis-cluster/8005/redis8005.conf
redis-server ../redis-cluster/8006/redis8006.conf

创建集群:

#replicas参数指定集群中每个主节点配备几个从节点,这里设置为1。
#设置密码后连接集群
#redis-cli --cluster create ip:端口 --cluster-replicas 1

#--cluster create 前3个主节点 后3个为对应主节点的从节点



redis-cli --cluster create 192.168.1.158:8001 192.168.1.158:8002 192.168.1.158:8003 192.168.1.158:8004 192.168.1.158:8005 192.168.1.158:8006 --cluster-replicas 1

查看集群:

#查看集群
redis-cli --cluster check 192.168.1.158:8001



#结果
[root@superman src]# redis-cli --cluster check 192.168.1.158:8001
192.168.1.158:8001 (3889b2cf...) -> 0 keys | 5461 slots | 1 slaves.
192.168.1.158:8003 (8245b1ea...) -> 0 keys | 5461 slots | 1 slaves.
192.168.1.158:8002 (c958efc6...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.158:8001)
M: 3889b2cf4756b6b4dc63e988f961a2e6e7622c55 192.168.1.158:8001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: ea42625339520abef14bcf39a026784e65063a4a 192.168.1.158:8004
   slots: (0 slots) slave
   replicates 8245b1ea19b144821494a7a19c40914e46ce1de7
M: 8245b1ea19b144821494a7a19c40914e46ce1de7 192.168.1.158:8003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: id  192.168.1.158:8002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 16d188a9781fb1f9c0b09d01c444480542605772 192.168.1.158:8005
   slots: (0 slots) slave
   replicates 3889b2cf4756b6b4dc63e988f961a2e6e7622c55
S: bfc354ff541924e7df5ad169e0df6f5f97b0d5f8 192.168.1.158:8006
   slots: (0 slots) slave
   replicates 主8002的id
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.


#从库的replicates记录所属主库的id







 

搭建完成

集群登录库

/usr/local/redis-6.0.5/src/redis-cli -h 192.168.1.158 -p 8005 -c

 

查看语法

#语法使用redis-cli --cluster help

[root@superman src]# 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
                 --cluster-fix-with-unreachable-masters
  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
  backup         host:port backup_directory
  help           

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

 

关闭集群

[root@superman src]# ps -ef |grep redis
root       6632      1  0 11:34 ?        00:00:02 redis-server 192.168.1.158:8001 [cluster]
root       6638      1  0 11:34 ?        00:00:02 redis-server 192.168.1.158:8002 [cluster]
root       6647      1  0 11:35 ?        00:00:02 redis-server 192.168.1.158:8003 [cluster]
root       6661      1  0 11:35 ?        00:00:02 redis-server 192.168.1.158:8004 [cluster]
root       6667      1  0 11:35 ?        00:00:02 redis-server 192.168.1.158:8005 [cluster]
root       6673      1  0 11:35 ?        00:00:02 redis-server 192.168.1.158:8006 [cluster]
root       6954   2100  0 11:56 pts/0    00:00:00 grep --color=auto redis
[root@superman src]# kill -9 6632 6638 6647 6661 6667 6673

重新启动

启动
redis-server ../redis-cluster/8001/redis8001.conf
redis-server ../redis-cluster/8002/redis8002.conf
redis-server ../redis-cluster/8003/redis8003.conf
redis-server ../redis-cluster/8004/redis8004.conf
redis-server ../redis-cluster/8005/redis8005.conf
redis-server ../redis-cluster/8006/redis8006.conf

 

 

集群操作

https://www.cnblogs.com/paul8339/p/11987345.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值