Centos 7.4 部署 Redis 5.0.3 高可用分布式集群

根据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 +++++++++++++++++++++++++++