Redis集群搭建

## 引言 > 段落引用各个Redis服务器之间的连接采用的是PING-PONG机制使每个服务器互相通信,检查一个节点是否挂掉采用的是节点间的相互检测(相互投票),当一个节点被该集群中超过半数的节点检测出有问题,即认为该节点挂掉,所以想要投票过半,节点数是少为3,(当然两个节点也可以搭建集群,但是这样高可用性不强,不能采用投票的方式检测节点是否正常工作),又因为一般服务器为了数据安全都会采用一个备用服务器(Slave),备用节点至少为1个,所以一般最少需要6台服务器,即3主3备。 >PS:两节点集群检测自身是否挂掉的方法。 当集群中有两个节点投票时,无法通过投票方式建设,这时候可以借助另外的参考点,如ping网关(可以是一个节点),可以和测试点ping通,但不可以和对方通,说明对方节点有问题,或本节点有问题,还有就是通过仲裁设备,如仲裁磁盘,每个节点都间隔一定时间不停往磁盘写数据,若检测到对方不再写入的时候,可能对方节点出故障。 >由于目前资源受限,测试集群搭建,现在ES服务器上进行,当前ES内存使用并不大,集群搭建成功后,将放大记录下来,然后将测试集群删除。然后购买服务器,在一台服务器上,构建6节点的伪集群。 >d**++集群搭建Redis版本以6.0为例。++** **++此步骤说明是中创建文件夹步骤是伪集群中需要操作的,若有足够的服务器,不用这么做。++** Redis安装完成后。 进入安装目录下,建立对应的几个目录。 配置文件目录:conf 存放配置文件 数据目录:data 存放持久化数据 日志目录:logs 存放日志 运行目录:run 存放运行pid --- 创建完成后,将原本的配置文件,复制一份,放到conf文件夹中。 然后下载,或使用`vim`指令打开配置文件,修改几个参数 1.port -> 修改为自己使用的端口 2.daemonize -> 默认为`no`, 将其改为`yes` 作为守护进程启动 3.pidfile -> 修改为自己的路径 此处我的配置为`/home/Redis/redis/run/redis_6006.pid` 4.logfile -> 修改为自己的路径 此处我的配置为`"/home/Redis/redis/logs/refis_6006.log"` 5.dir -> 修改为自己的路径 此处我的配置为`/home/Redis/redis/data/6006` 6.cluster-config-file -> 集群配置文件,这个文件是Redis建立的,但是名称要我们来定,此处我的配置为`nodes-6006.conf` >i以上6项,为每个配置文件必须修改的配置,可能大家已经注意到了,所有文件或目录路径的结尾,我都是用端口号来结尾,这么做的目的是为了区分节点的,避免忘记那些文件是哪个节点的。当然如果是每个节点都分布在不同的服务器上,就没有这个必要了。 以上配置修改完成后,重命名文件,以端口号结尾,再将其复制出来5份,文件名末尾也分别用端口号区分。 复制完后,修改复制配置文件的以上几个参数。 都做完后,创建启动脚本 ``` #!/bin/bash ./bin/redis-server ./config/redis_6001.conf ./bin/redis-server ./config/redis_6002.conf ./bin/redis-server ./config/redis_6003.conf ./bin/redis-server ./config/redis_6004.conf ./bin/redis-server ./config/redis_6005.conf ./bin/redis-server ./config/redis_6006.conf ``` 然后修改脚本文件权限,不然可能没法执行,也可以先执行以下试试,不行再加权限。 执行脚本,启动这几个节点。若节点散布在不同服务器,需要将它们全都启动。 由于本次集群安装的Redis版本是6.0。所以我直接使用命令进行集群创建了。5.0以前的版本需要进入节点创建 ``` ./bin/redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1 ``` --cluster-replicas 1 : 这句的意思是,让每个主节点(master),都有一个从节点(slave) 执行后,会出现以下提示 ![image.png](https://cos.easydoc.net/85829285/files/krd82r49.png) 键入`yes`即可。 创建成功,如下图所示 ![image.png](https://cos.easydoc.net/85829285/files/krd83nr1.png) 使用`./bin/redis-cli -c -h 127.0.0.1 -p 6001 cluster info`指令可以查看集群信息 使用`./bin/redis-cli -c -h 127.0.0.1 -p 6001 cluster nodes`指令可以查看集群节点信息 集群创建成功后,使用`set`和`get`指令,添加或查询数据测试。 >w**++创建集群时。不要设置密码,否则会提示`NOAUTH Authentication required.`验证不通过。++** **++在集群创建完毕后,使用`config set`指令为集群动态创建密码。\<requirepass>,\<masterauth>++** 集群至少要保证有三个主节点。在其中一个发生故障下线后,剩余的两个节点可以通过majority,让它们,从其从节点中选出一个成为主节点。但是我们这里建的是伪集群,也没什么多大关系了。反正服务器出问题,整个集群就完犊子了。。 添加从节点 ``` ./bin/redis-cli --cluster add-node 118.178.241.234:6605 47.94.42.253:6600 --cluster-slave --cluster-master-id 9c86ac7a09ea7cd593b0e9e883b7618196480e71 ./bin/redis-cli --cluster add-node slaveIP:slavePort masterIP:masterPort --cluster-slave --cluster-master-id masterId ``` 删除节点 ``` ./bin/redis-cli --cluster del-node 127.0.0.1:6603 e662bb7ba309e807ce998b8605351d5112bc48fb ./bin/redis-cli --cluster del-node 节点IP:节点端口 节点id ```