打赏

Redis入门

  1. 部署结构

 

  1. 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

  1. 配置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

 

#接受连接的端口号,如果端口是0redis将不会监听TCP socket连接 #在不同的实例上端口不能相同,如主服务器是6379,从服务器可以是6479,1234

 

port 6379

 

logfile /var/log/redis-2.8.18/redis.log

 

# maxmemory <bytes>10485760001G,可根据实际情况调整

 

maxmemory 1048576000

 

# The default is: 默认策略:

 

#内存清理策略:如果达到了maxmemory,你可以采取如下动作:

 

# volatile-lru → 使用LRU算法来删除过期的set

 

# allkeys-lru → 删除任何遵循LRU算法的key

 

# volatile-random →随机地删除过期set中的key

 

# allkeysrandom → 随机地删除一个key

 

# volatile-ttl → 删除最近即将过期的keythe 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

  1. 配置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给另外一个Sentinelmaster的故障恢复投票它会等待这个master的故障恢复一段的时间

 

sentinel failover-timeout mymaster 9000

 

#选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长

 

sentinel parallel-syncs mymaster 1

 

#后台启动

 

daemonize yes

 

2.开放服务端口

#打开iptables

 

vi /etc/sysconfig/iptables

 

#输入i编辑,6379,26379对应当前的redis.confredis.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

 

  1. 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   #列出某个mastersentinels((myredis222为例)  

127.0.0.1:26379> SENTINEL get-master-addr-by-name myredis222 #通过某个master获取其IPportmyredis222为例)  

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> 这个命令很像RedisCONFIG 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永远会记录好一个Masterslaves,即使slave已经与组织失联好久了。这是很有用的,因为sentinel集群必须有能力把一个恢复可用的slave进行重新配置。

 

并且,failover后,失效的master将会被标记为新master的一个slave,这样的话,当它变得可用时,就会从新master上复制数据。

 

然后,有时候你想要永久地删除掉一个slave(有可能它曾经是个master),你只需要发送一个SENTINEL RESET master命令给所有的sentinels,它们将会更新列表里能够正确地复制master数据的slave

 

  1. Redis命令:(热更新)

http://www.redis.net.cn/order/3682.html

 

posted @ 2018-05-10 17:33  刘奇云  阅读(236)  评论(0)    收藏  举报