根据redis官方文档,Redis支持集群最小的单位为6个实例,3个主节点,3个从节点。本次实验,将用 3台Centos 7.4 各做成2个节点,来实现。 一、环境准备: 3 台Centos 7.4 最小化安装 redis-5.0.3.tar.gz 二、节点规划:三、安装redis 5.0.3 (3台主机上都要安装) 在安装前,需要安装gcc gcc-c++ wget yum install gcc gcc-c++ wget vim -y cd /opt wget http://download.redis.io/releases/redis-5.0.3.tar.gz tar zxvf redis-5.0.3.tar.gz cd redis-5.0.3/ make make PREFIX=/usr/local/redis install redis 服务器的内核参数调整: vim /etc/sysctl.conf net.core.somaxconn= 1024 vm.overcommit_memory=1 保存退出。 sysctl -p somaxconn: 系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128, 对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。大多数环境这个值建议增加到 1024 或者更多。 overcommit_memory: 设置内存分配策略 /proc/sys/vm/overcommit_memory 可选值:0 1 2 0:内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申 请允许;否则,内存申请失败,并把错误返回给应用进程。 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2:表示内核允许分配超过所有物理内存和交换空间总和的内存 redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为8G,这个时候也要同样分配8G的内存给child,如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。 +++++++++++ 以上操作,3 台主机上都要操作 +++++++++++ 四、修改配置文件 (redis01 主机上操作) 4.1、创建用于存放redis 节点配置的文件夹 mkdir -p /usr/local/redis-cluster/{9900,9901} 拷贝配置文件: cp /opt/redis-5.0.3/redis.conf /usr/local/redis-cluster/9900/ cp /opt/redis-5.0.3/redis.conf /usr/local/redis-cluster/9901/ 修改配置文件: vim /usr/local/redis-cluster/9900/redis.conf
![]()
![]()
![]()
![]()
![]()
![]()
![]()
参照9900的配置文件,修改9901的配置文件,只是端口不一样,把9900的地方修改成9901即可。 复制 redis01 这台主机上面的配置文件,到另外两台主机,redis02 redis03 scp -r /usr/local/redis-cluster 192.168.189.66:/usr/local scp -r /usr/local/redis-cluster 192.168.189.16:/usr/local 五、启动redis (3 台redis 主机上都要执行启动) cd /usr/local/redis/bin/ ./redis-server /usr/local/redis-cluster/9900/redis.conf ./redis-server /usr/local/redis-cluster/9901/redis.conf
![]()
![]()
六、创建集群 在189.14 (redis01)操作: cd /usr/local/redis/bin ./redis-cli --cluster create 192.168.189.14:9900 192.168.189.66:9900 192.168.189.16:9900 192.168.189.14:9901 192.168.189.66:9901 192.168.189.16:9901 --cluster-replicas 1 --cluster-replicas 1 指定从库数量1,即一主一从。 //创建顺序三个主,三个从,前面三个是主后面三个是从 在创建过程中,需要输入一个 yes
![]()
在另一台终端上面,连接集群:(可以连接任何一个主节点) ./redis-cli -c -h 192.168.189.14 -p 9900 cluster nodes ##查看集群信息
在/usr/local/redis/bin/9900.conf 里面也记录了,集群中所有节点的连接关系 每个 节点上的 集群信息文件,内容都一样,因为它们属于同一个集群。
七、测试: 7.1、主从冗余测试 根据集群配置文件,得出:
它们之间通过hash值进行关联。两两一个高可用架构 当我们连接的主 down机了,我们还能不能继续写数据。 kill 掉 192.168.189.14:900 进程,模拟 一个主down 机
![]()
现在把192.168.189.14:9900 这个节点重新启动: cd /usr/local/redis/bin ./redis-server /usr/local/redis-cluster/9900/redis.conf
这时,我们登录另一个主,在上面创建一个key 值:
![]()
只有当 192.168.189.66:9901 现在的这个主,down 机后,192.168.19.14:9900 这个从才会接管,又变成原来的主。 7.2、分布式存储测试: 我们先连接上主(192.168.189.14:9900)
![]()
根据测试,redis 存储数据时,会算做一个key->slot的映射计算,根据计算结果去找solt 号在那一个主节点上,再存储在那个主节点上。 八、新增节点 (主机名: redis04 IP:192.168.189.68) 8.1、配置 新节点 在一台新的主机上,安装好redis 5.0.3 redis04 -------两个节点:192.168.189.68:9900 192.168.189.68:9901 从redis01 上面把,9900 9901 的配置文件拷贝到 redis04 scp -r /usr/local/redis-cluster 192.168.189.68:/usr/local 上面这条命令是在 redis01(192.168.189.14)上面执行。
启动节点: cd /usr/local/redis/bin/ ./redis-server /usr/local/redis-cluster/9900/redis.conf ./redis-server /usr/local/redis-cluster/9901/redis.conf
8.2、添加新节点到集群 (在3台主机上任意一台上都可以执行下面命令) 添加主节点: cd /usr/local/redis/bin/ ./redis-cli --cluster add-node 192.168.189.68:9900 192.168.189.14:9900 ./redis-cli --cluster add-node 192.168.189.68:9901 192.168.189.14:9901 redis-cli --cluster add-node {新节点IP}:{新节点端口} {集群任意节点IP}:{端口}
![]()
我们在redis01 上面,登录 192.168.189.14:9900 这个主节点
查看集群信息: (新添加进集群的节点是没有分配hash slot,不能存数据)
用命令也可以查看集群信息: ./redis-cli --cluster check 192.168.189.14:9900
8.3、分配hash slot (redis01 的命令行操作) ./redis-cli --cluster reshard 192.168.189.68:9900
中间要输入 yes 查看分配结果: (redis01 的命令行操作) ./redis-cli --cluster check 192.168.189.14:9900
./redis-cli --cluster info 192.168.189.14:9900
8.4、平衡各主节点hash slot 的数量 (redis01 的命令行操作) ./redis-cli --cluster rebalance --cluster-threshold 1 192.168.189.14:9900
![]()
![]()
redis 将从其他3 个主节点上移动一定数量的 hash slot 到 192.168.189.68:9900 这个节点。 查看结果: ./redis-cli --cluster info 192.168.189.14:9900
8.5、指定从节点: (redis01 的命令行操作) 把192.168.189.68:9901(新加的节点)指定为192.168.189.16:9900 的从 查看集群节点:
登录192.168.189.68:9901 要把 A节点指向B节点的从,就要登录到A节点
cluster replicate 97a07cb50f5266f09f87b74d9845662ca239198b 这后面跟的是,B(主) 节点的IDS编号
查看集群信息: 系统自动把 192.168.189.14:9901(原来192.168.189.16:9900的从),指向给 192.168.189.68:9900(新添加的节点),因为 --cluster-replicas 1 这个参数,在创建集群的时候,指定了从库的数量 1 。--cluster-replicas 1 一主一从
九、删除节点: (redis01 的命令行操作) 9.1、删除从节点,从节点可以直接删除 删除192.168.189.68:9901 这个从节点 ./redis-cli --cluster del-node 192.168.189.68:9901 c48bfe3fcb7d016da712179121441895a4c6971c
最后面的IDS ,是192.168.189.68:9901 自己的。 查看删除结果:./redis-cli --cluster check 192.168.189.14:9900
9.2、删除主节点 (redis01的命令行操作) 删除 192.168.189.68:9900 主节点 如果主节点上有hash slot ,需要先把这些 hash slot转移到其他主节点 移除192.168.189.68:9900 上所有的 hash slot ./redis-cli --cluster reshard 192.168.189.68:9900
![]()
查看结果: ./redis-cli --cluster info 192.168.189.14:9900
删除192.168.189.68:9900这个主节点: ./redis-cli --cluster del-node 192.168.189.68:990007 dbc900eb78a4730d1d7728bacbded63c3e1c02
登录集群:查看节点信息
9.3、平衡各主节点的hash slot ./redis-cli --cluster rebalance --cluster-threshold 1 192.168.189.16:9900
![]()
查看结果:
++++++++++++++++++++++ END +++++++++++++++++++++++++++