工具的简单使用VMware版本号:12.0.0CentOS版本:7.0三台虚拟机(IP):192.168.1.8、192.168.1.9、192.168.1.10安装Redis下载、解压、编译:$cd/usr/local/$wgethttp://download.redis.io/releases/redis-3.2.6.tar.gz$tarxzfredis-3.2.6.tar.gz$cdredis-3.2.6$make创建Redis节点首先在192.168.1.8机器上的/usr/local/redis-3.2.6目录下创建redis_cluster目录。$mkdir/usr/local/redis-3.2.6/redis_cluster 在redis_cluster目录下,创建目录分别命名为7000、7001、7002目录,将redis.conf复制到这三个目录下$mkdir700070017002$cp/usr/local/redis-3.2.6/redis.conf/usr/local/redis-3.2.6/redis_cluster/7000$cp/usr/local/redis-3.2.6/redis.conf/usr/local/redis-3.2.6/redis_cluster/7001$cp/usr/local/redis-3.2.6/redis.conf/usr/local/redis-3.2.6/redis_cluster/7002分别修改这三个配置文件,修改如下内容port7000//端口7000,7002,7003bindlocalip//默认ip为127.0.0.1,访问ip需要改为其他节点机器,否则创建集群时无法访问对应端口,无法创建集群。daemonizeyes//redis后台运行pidfile/var/run/redis_7000.pid//pidfile对应7000,7001,7002cluster-enabledyes//开启集群,把注释#Removecluster-config-filenodes_7000.conf//集群配置,配置文件***开始自动生成7000,7001,7002cluster-node-timeout15000//请求超时,默认15秒,可以设置appendonlyyes//开启Aof日志,如果有需要,会为每次写操作记录一个日志 然后在其他2在每台机器(192.168.1.9、192.168.1.10)上重复以上三个步骤,将目录改为7003、7004、7005、7006、7007、7008即可。对应的配置文件也可以按照这个规则修改为启动每个节点##***执行$/usr/local/redis-3.2.6/src/redis-server/usr/local/redis-3.2.6/redis_cluster/7000/redis.conf$/usr/local/一台机器上的redis-3.2.6/src/redis-server/usr/local/redis-3.2.6/redis_cluster/7001/redis.conf$/usr/local/redis-3.2.6/src/redis-server/usr/local/redis-3.2.6/redis_cluster/7002/redis.conf##执行$/usr/local/redis-3.2.6/src/redis-server/usr/local/redis-3.2.6/redis_cluster/第二台机器上的7003/redis.conf$/usr/local/redis-3.2.6/src/redis-server/usr/local/redis-3.2.6/redis_cluster/7004/redis.conf$/usr/local/红色的is-3.2.6/src/redis-server/usr/local/redis-3.2.6/redis_cluster/7005/redis.conf##执行$/usr/local/redis-3.2.6/src/redis-server/在第三台机器上usr/local/redis-3.2.6/redis_cluster/7006/redis.conf$/usr/local/redis-3.2.6/src/redis-server/usr/local/redis-3.2.6/redis_cluster/7007/redis.conf$/usr/local/redis-3.2.6/src/redis-server/usr/local/redis-3.2.6/redis_cluster/7008/redis.conf查看各个Redis的启动状态##***$ps-ef|grepredis//redis启动成功$netstat-tnlp|grepredis//监听redis端口注意:确保各节点没有配置错误,启动时关闭防火墙$firewall-cmd--state##ViewFirewallstatusrunningrunning表示防火墙开启$systemctlstopfirewalld##closefirewall$firewall-cmd--statenotrunning注意:CentOS7关闭防火墙和CentOS6不同安装Ruby$yum-yinstallrubyruby-develrubygemsrpm-build$geminstallredis注意:创建集群时需要安装Ruby并运行redis-trib.rb来创建集群。Redis官方提供了redis-trib.rb工具,在解压目录$/usr/local/redis-3.2.6/src/redis-trib.rbcreate--replicas1192.168.1.8:7000192.168的src目录下。1.8:7001192.168.1.8:7002192.168.1.9:7006192.168.1.9:7004192.168.1.9:7005192.168.1.10:7006192.162.168.1.1.10.1.10:70077192.168.168.168.168.1.168.1.100:是第二台机器,最后三个是第三台机器,输入yes,然后出现如下内容,说明集群安装成功,集群验证连接到第一台机器上的集群7000节点,连接到7004节点另外一个,连接方式是:##加参数-C连接集群,因为redis.conf改了bindtoip地址,所以-h参数不能省略,-p参数是端口号.$/usr/local/redis-3.2.6/src/redis-cli-h192.168.1.8-c-p7000在节点7004上执行命令:192.168.1.8:7000>getname然后在另外两个7000和7007端口,查看key的内容为name192.168.1.8:7000>getname192.168.1.10:7007>getname说明集群运行正常考虑去中心化和中间件去除,也就是说集群中的每个节点都是平等的关系,是平等的,每个节点保存自己的数据和整个集群的状态。所有其他节点都连接上了,并且这些连接保持活跃,这保证了我们只需要连接到集群中的任何一个节点就可以从其他节点获取数据。Redis集群并没有使用传统的一致性哈希来分配数据,而是使用另一种称为哈希槽(hashslot)的方法来分配数据。Redis集群默认分配16384个槽。当我们设置一个key时,我们会使用CRC16算法取模得到它所属的slot,然后将key分配给hashslot区间内的节点。具体算法为:CRC16(key)%16384。所以我们在测试的时候看到set和get,就直接跳转到7000端口的节点,Redis集群会将数据存储在一个master节点,然后master和它对应的slave进行数据同步。在读取数据时,也会根据一致性哈希算法从对应的主节点获取数据。只有当一个master挂了,才会启动一个对应的slave节点充当master。需要注意的是,master节点必须有3个或更多,否则集群创建失败,当存活的master节点数量少于节点总数的一半时,整个集群将无法创建提供服务。
