- 部署结构
- redis安装
一、安装GCC编译环境
yum install gcc gcc-c++ kernel-devel
yum install tcl
二、安装redis2.8.18
#下载redis2.8.18
wget http://download.redis.io/releases/redis-2.8.18.tar.gz
#解压 redis-2.8.18.tar.gz
tar xzf redis-2.8.18.tar.gz
#进入redis-2.8.18文件
Øcd redis-2.8.18
#安装redis到 /usr/local/redis-2.8.18文件夹下
make PREFIX=/usr/local/redis-2.8.18
make install PREFIX=/usr/local/redis-2.8.18
#复制redis-2.8.18下的redis-sentinel 到usr/local/redis-2.8.18/bin目录下
cp src/redis-sentinel /usr/local/redis-2.8.18/bin
#创建redis日志文件redis-2.8.18,在var/log下
Ømkdir /usr/local/redis-2.8.18/log
#创建redis配置目录
mkdir /usr/local/redis-2.8.18/conf
#创建redis rdb目录
mkdir /usr/local/redis-2.8.18/rdb
#创建redis run目录
mkdir /usr/local/redis-2.8.18/run
#复制根目录redis-2.8.18下的redis.conf文件到 usr/local/redis-2.8.8/conf目录下
cp /root/redis-2.8.18/redis.conf /usr/local/redis-2.8.18/conf
#复制根目录redis-2.8.18下的sentinel.conf文件到 usr/local/redis-2.8.18/conf目录下
cp /root/redis-2.8.18/sentinel.conf /usr/local/redis-2.8.18/conf
常见安装问题: zmalloc.h:51:31: error: jemalloc/jemalloc.h: No such file or directory
异常原因:一些编译依赖或原来编译遗留出现的问题
解决方案:make distclean。清理一下,然后再make。
- 配置redis
三、配置redis.config
# 打开redis-2.8.18下的redis.conf
vi /usr/local/redis-2.8.18/conf/redis.conf
# 配置reids.config文件
#是否以后台进程运行,默认为no,如果需要以后台进程运行则改为yes
daemonize yes
#接受连接的端口号,如果端口是0则redis将不会监听TCP socket连接 #在不同的实例上端口不能相同,如主服务器是6379,从服务器可以是6479,1234
port 6379
logfile /var/log/redis-2.8.18/redis.log
# maxmemory <bytes>,1048576000为1G,可根据实际情况调整
maxmemory 1048576000
# The default is: 默认策略:
#内存清理策略:如果达到了maxmemory,你可以采取如下动作:
# volatile-lru → 使用LRU算法来删除过期的set
# allkeys-lru → 删除任何遵循LRU算法的key
# volatile-random →随机地删除过期set中的key
# allkeys→random → 随机地删除一个key
# volatile-ttl → 删除最近即将过期的key(the nearest expire time (minor TTL))
# noeviction → 根本不过期,写操作直接报错
maxmemory-policy allkeys-lru
#注意:如果你需要,你可以同时开启‘append only’模式和异步dumps模式(你需要注释掉上面的‘save’表达式来禁#止dumps),这种情况下,Redis重建数据集时会优先使用appendonly.aof而忽略dump.rdb
appendonly yes
#如果是从服务器:使用slaveof把一个 Redis 实例设置成为另一个Redis server的从库(热备)。请把ip port修改为实际的主服务器的IP和端口。
# slaveof <masterip> <masterport>主服务器不需要配置
slaveof ip port
- 配置sentinel
四、Redis.sentinel(故障转移)
1.配置sentinel.conf
#配置指示 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 #而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)
sentinel monitor mymaster 127.0.0.1 6379 2
#选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
sentinel down-after-milliseconds mymaster 3000
#sentinel failover-timeout给另外一个Sentinel的master的故障恢复投票它会等待这个master的故障恢复一段的时间
sentinel failover-timeout mymaster 9000
#选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长
sentinel parallel-syncs mymaster 1
#后台启动
daemonize yes
2.开放服务端口
#打开iptables
vi /etc/sysconfig/iptables
#输入i编辑,6379,26379对应当前的redis.conf和redis.sentinel端口
-A INPUT -m state –state NEW -m tcp -p tcp –dport 6379 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 26379 -j ACCEPT
#按Esc退出编辑,输入 :wq 退出保存
#重启服务
service iptables restart
3.运行redis.conf 和redis sentinel
#启动主从reids,先启动redis.conf后启动redis.sentinel,
cd /usr/local/redis-2.8.8/bin
#启动redis.conf
./redis-server /usr/local/redis-2.8.18/conf/redis.conf
#启动sentinel.conf
./redis-sentinel /usr/local/redis-2.8.18/conf/sentinel.conf
- sentinel相关命令
port 26379
daemonize no
logfile "/data/app/redis/logs/sentinel_26379.log"
sentinel monitor mymaster 192.168.56.11 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
# 不急,先介绍 redis sentinel 相关命令
[plain] view plain copy
127.0.0.1:26379> SENTINEL masters #列出所有master状态信息
127.0.0.1:26379> SENTINEL master myredis222 #列出某个master状态信息(myredis222为例)
127.0.0.1:26379> SENTINEL slaves myredis222 #列出某个master的所有slave和状态信息(myredis222为例)
127.0.0.1:26379> SENTINEL sentinels myredis222 #列出某个master的sentinels((myredis222为例)
127.0.0.1:26379> SENTINEL get-master-addr-by-name myredis222 #通过某个master获取其IP及port(myredis222为例)
127.0.0.1:26379> SENTINEL ckquorum myredis222 #检查某个master是达到投票及故障转移条件(myredis222为例)
127.0.0.1:26379> SENTINEL flushconfig #强制重写 SENTINEL 配置到磁盘文件中
127.0.0.1:26379> SENTINEL failover myredis222 #这个操作就注意了!强制进行故障转移!慎操作!!!!!!!!!
动态修改Sentinel配置
以下是一些修改sentinel配置的命令:
SENTINEL MONITOR <name> <ip> <port> <quorum>这个命令告诉sentinel去监听一个新的master
SENTINEL REMOVE <name> 命令sentinel放弃对某个master的监听
SENTINEL SET <name> <option> <value> 这个命令很像Redis的CONFIG SET命令,用来改变指定master的配置。支持多个
增加和移除Sentinel
增加新的Sentinel实例非常简单,修改好配置文件,启动即可,其他Sentinel会自动发现该实例并加入集群。如果要批量启动一批Sentinel节点,最好以30秒的间隔一个一个启动为好,这样能确保整个 Sentinel集群的大多数能够及时感知到新节点,满足当时可能发生的选举条件。
移除一个Sentinel实例会相对麻烦一些,因为Sentinel不会忘记已经感知到的Sentinel实例,所以最好按照下列步骤来处理:
停止将要移除的sentinel进程。
给其余的sentinel进程发送SENTINEL RESET *命令来重置状态,忘记将要移除的sentinel,每个进程之间间隔30秒。
确保所有sentinel对于当前存货的sentinel数量达成一致,可以通过SENTINEL MASTER <mastername>命令来观察,或者查看配置文件。
删除旧master或者不可达slave
sentinel永远会记录好一个Master的slaves,即使slave已经与组织失联好久了。这是很有用的,因为sentinel集群必须有能力把一个恢复可用的slave进行重新配置。
并且,failover后,失效的master将会被标记为新master的一个slave,这样的话,当它变得可用时,就会从新master上复制数据。
然后,有时候你想要永久地删除掉一个slave(有可能它曾经是个master),你只需要发送一个SENTINEL RESET master命令给所有的sentinels,它们将会更新列表里能够正确地复制master数据的slave。
- Redis命令:(热更新)
http://www.redis.net.cn/order/3682.html