linux下redis的集群搭建,节点的增加和删除,sentinel主从切换

来源:互联网 发布:od矩阵的作用 编辑:程序博客网 时间:2024/05/17 23:35

redis 3.0以上支持集群,由于集群需要ruby支持,需要先安装ruby环境并下载通信管理包

ruby环境安装


redis命令参考:http://doc.redisfans.com/


ruby处理好后,开始实现集群的搭建

1、新建cluster文件夹,并在里面再新建10010、10020、10030、10040、10050、10060文件夹

(主10010,从10020;主10030,从10040;主10050,从10060)


2、把redis安装目录下的redis.conf文件,cp到10010文件夹

修改redis.conf配置文

A、修改bind 127.0.0.1的ip为你服务器ip

B、修改port的端口为10010

C、修改daemonize的no为yes;启动守护进程,生成pid文件

D、修改pidfile值,pid文件存放路径

E、修改loglevel值,log等级,可改为debug

F、修改logfile值,log文件存放路径

G、修改appendonly值,启动aof持久化。不过搭建主从的话,考虑禁用主redis持久化,从redis进行持久化就行了

H、启动cluster-enabled yes;启动集群

I、启动cluster-conf-file nodes-10010.conf;存放哈希槽

J、启动cluster-node-timeout 15000;节点超时时间

修改并保存文件后,再分别把该redis.conf文件,cp到10020、10030、10040、10050、10060文件夹,并做相应修改



3、分别启动各节点


启动后,连接redis客户端

命令:redis-cli -c -h [IP] -p [port];连接集群客户端,命令加-c。


连接上,查看集群状态信息

命令:cluster info

可以看到状态是fail,哈希槽数量也是0;


4、通过redis提供的redis-trib.rb集群管理工具进行管理(redis-trib.rb使用ruby写的,所以需要安装ruby环境,并下载相关redis包)。

在redis安装目录下,进入src目录,可以看到redis-trib.rb


执行命令:./redis-trib.rb  create --replicas 1 [IP]:[port] [IP]:[port] [IP]:[port] [IP]:[port] [IP]:[port] [IP]:[port] 

--replicas 1,标识设置从节点数1个

[IP]:[port],前面三个是主节点,后面三个是从节点



5、以上操作,通过集群管理器实现了集群的管理和主从的实现。再次连接集群客户端查看集群信息

可以看到状态ok,并且有16384个哈希槽。這16384个哈希槽被平均分配到三个主节点上

(看上图中10010节点是0-5460(5461 slots),10030节点是5461-10922(5462 slots),10040节点是10923-16383(5461 slots))



6、redis通过对key使用crc16 算法算出一个结果,然后把结果对16384求余数,对应在哪个节点就数据就会存入哪个节点



-----------------------------------------------------------------------------------------------------------

集群关闭,我的方法

1、kill -9 所遇redis集群相关进程

2、清理redis集群相关文件夹下的nodexxx.conf文件

3、重启redis并创建redis集群管理节点

-----------------------------------------------------------------------------------------------------------


集群节点的动态增加

1、增加节点,新建10070文件夹,并且cp配置文件redis.conf到该目录下,修改配置文件再启动

命令:./redis-trib.rb add-node [ip]:[port] [ip]:[port];redis安装目录下src目录下执行

前面一个[ip]:[port]是刚才新建需要加入的服务节点,后面一个是目标服务



2、查看集群节点信息,连接集群客户端后执行命令

命令:cluster nodes;可以看到10070已经加入集群,但是还没有分配哈希槽



3、分配哈希槽

命令:./redis-trib.rb reshard [ip]:[port];redis安装目录下src目录下执行

执行命令后,需要确认分哈希槽数量,确认后需再次确认目标节点的ID,确认后需再次确认是否节点均分(#1:all);所有确认完成开始节点调整



4、再次查看集群节点信息,连接集群客户端后执行命令

命令:cluster nodes;可以看到10070已经加入集群,并且分配哈希槽



-----------------------------------------------------------------------------------------------------------


集群节点的动态删除

1、回收哈希槽

命令:./redis-trib.rb reshard [ip]:[port];redis安装目录下src目录下执行

执行命令后,需要确认接收哈希槽的节点ID,确认后需再次确认会被回收哈希槽的节点ID,确认后(#1:done);所有确认完成开始节点调整



2、查看集群节点信息,连接集群客户端后执行命令

命令:cluster nodes;可以看到10070节点的哈希槽已经被分配到10010节点



3、删除节点

命令:./redis-trib.rb del-node [ip]:[port] [nodeid];需要删除节点的ip和端口,nodeid是该节点的id



4、再次查看集群节点信息,连接集群客户端后执行命令

命令:cluster nodes;可以看到10070节点已经被删除了


命令:cluster nodes;可以看到10070节点的哈希槽已经被分配到10010节点

-----------------------------------------------------------------------------------------------------------

sentinel高可用,实现主从自动切换

sentinel.conf在redis安装目录下


修改文件配置

1、除sentinel默认端口26379可以不用修改,其它没有注释的选项都注释掉


2、修改配置文件


sentinel monitor [自定义需要监控主节点名称] [主节点IP] [主节点端口] [定义多少sentinel认为master节点挂了才切换主从]
sentinel down-after-milliseconds [和自定义名称保持一致] [超时时间,单位毫秒]
sentinel failover-timeout [和自定义名称保持一致] [超时时间,单位毫秒]
sentinel parallel-syncs [和自定义名称保持一致] [进行sync的slave个数]

3、启动sentinel,在redis安装目录下的src目录下执行命令
命令:./redis-sentinel ../sentinel.conf


* 可以测试当10010节点shutdown后,10020会变成主节点,并继承10010的哈希槽。再次启动10010,会发现10010变成了10020的从节点。并且sentinel.conf会自动修改

0 0
原创粉丝点击