您的位置:首页 > 数据库 > Redis

redis主从、集群、哨兵者模式搭建与实践

2017-08-04 00:00 751 查看
本文所有红色部分为配置文件或代码可以直接复制使用,绿色部分是要替换成自己环境下的相关变量。有详细说明!

1.安装ruby基础环境,https://rubygems.org/pages/download
2.安装ruby对redis的支持,cmd执行 gem install redis
(1)ruby对redis的支持源国外,有可能被墙
(2)设置源 gem sources -a http://ruby.taobao.org/ (3)再次执行gem install redis
3.下载 redis http://download.redis.io/releases/redis-4.0.1.tar.gz (1)解压后,找到redis.conf 修改配置内容

安装redis为windows系统服务
在redis目录下,cmd执行:
redis-server.exe --service-install redis.conf --service-name 服务名
绿色部分为,redis的配置文件和要注册的服务名称。
示例:
redis-server.exe --service-install redis.conf --service-name redis

以服务名启动redis服务:
redis-server.exe --service-start --service-name 服务名

redis-server.exe --service-start --service-name redis
关闭redis服务,cmd执行:
redis-server.exe --service-stop --service-name 要关闭的redis服务名
redis-server.exe --service-stop --service-name redis

一、redis环境搭建主从配置:
复制2份redis.conf文件,分别命名为slaveof1.conf, slaveof2.conf。
修改其中的端口为不 同的端口,不能为server的端口重复。
在从服务器,增加配置内容为:
slaveof 主服务器 ip地址 端口 空格分隔,不是冒号!)
示例:
Slaveof 127.0.0.1 6379
slaveof意思是指定主服务器ip地址为127.0.0.1 ,端口为6379上的redis服务器为主服务器。

在cmd端口分别运行主服务与从服务:(指定配置文件运行redis实例)
Redis-server -redis.conf 运行主服务
Redis-server –slaveof1.conf 运行从服务1
Redis-server –slaveof2.conf 运行从服务2

如果需要配置密码,主从服务器密码必须保持一致。
配置密码,请增加如下配置:
requirepass 密码
示例:requirepass password123456
登录单个服务器时:需要输入:
redis-cli.exe –h 127.0.0.1 –p 6379 –a 密码
解释:使用redis-cli.exe工具登录,-h 为服务器Ip地址,-p为端口 -a 为密码
二、哨兵者模式(监控服务运行)
为主从服务器配置监控(哨兵者模式)
Redis目录找到sentinel.conf文件
修改配置文件为:

#vim sentinel-26379.conf
#监听服务运行在哪个端口,有多个监听时,要配置不同的端口
dir ./
port 26379
#监听的服务名,服务ip地址,服务端口, 几个sentinel进程判断主服务死掉,才替换
sentinel monitor 服务名 ip地址 端口 1
sentinel parallel-syncs 服务名 1
sentinel down-after-milliseconds 服务名 15000
sentinel failover-timeout 服务名 900000

替换配置文件中的服务名为你要的监听的服务名即可。
此处可以监听多个redis主服务,只需要复制上面配置。修改要监听的服务名,地址端口即可。

如果要监听的服务配置了密码,需要增加如下配置:
sentinel auth-pass 服务名 密码
示例:
sentinel auth-pass redismaster passwords

启动监听服务
在redis目录下,cmd执行如下命令:
redis-server.exe sentinel.conf –sentinel
解释:redis服务加载监控的配置文件,以监控模式运行

查看监控状态,cmd执行:
redis-cli.exe -p 端口

Cmd执行命令:Info sentinel

配置文件说明:
1. port :当前Sentinel服务运行的端口

2. dir : Sentinel服务运行时使用的临时文件夹

3.sentinel monitor master001 192.168.110.101 6379 2:Sentinel去监视一个名为master001的主redis实例,这个主实例的IP地址为本机地址192.168.110.101,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行

4.sentinel down-after-milliseconds master001 30000:指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行

5.sentinel parallel-syncs master001 1:指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长

6.sentinel failover-timeout master001 180000:如果在该时间(ms)内未能完成failover操作,则认为该failover失败

7.sentinel notification-script <master-name> <script-path>:指定sentinel检测到该监控的redis实例指向的实例异常时,调用的报警脚本。该配置项可选,但是很常用

三、Redis集群配置
Redis.conf配置文件
修改配置文件为:
port 7007
appendonly yes
appendfilename "appendonly.7007.aof"
cluster-enabled yes
cluster-config-file nodes-7007.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes

解释:
1.port 服务端口
2. 是否持久化。Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中
3.持久化的文件名
4.是否开启集群
5.集群节点配置文件
6. 节点互连超时的阀值
7. cluster-require-full-coverage yes 默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致

步骤:
1.复制6份配置文件,分别命名为
Redis-7000.config
Redis-7001.config
Redis-7002.config
Redis-7003.config
Redis-7004.config
Redis-7005.config

2.将配置文件中绿色部分,替换为配置文件对应的编号。
3.分别启动6个服务,redis目录cmd执行:
Redis-server.exe - Redis-7000.config
Redis-server.exe - Redis-7001.config
Redis-server.exe - Redis-7002.config
Redis-server.exe - Redis-7003.config
Redis-server.exe - Redis-7004.config
Redis-server.exe - Redis-7005.config
4.找到redis-trib.rb文件。这个文件是ruby对redis的支持的一个集群运行支持。

执行命令:
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 127.0.0.1:7007 127.0.0.1:7008
绿色的1,表示从节点的数量
根据提示,输入确定信息yes.

备注:执行以上命令有可能会出现
Node 127.0.0.1:7000 is not empty. Either the node already knows other node e错误。
删除生成的配置文件nodes.conf,如果不行则说明现在创建的结点包括了旧集群的结点信息,需要删除redis的持久化文件后再重启redis,
比如:appendonly.aof、dump.rdb,nodes-7000.conf等文件。

集群情况检查:
连接到任意一个节点:
执行redis-cli.exe –h ip地址 –p端口 ,如图

查看集群中主从节点信息:
连接上任意一个节点, Cluster nodes
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息