./redis-cli shutdow 正常关闭redis
主服务器master配置 centos6.9 最小化安装
1.先安装以来环境和网络yum源
yum install -y epel-release
yum install -y gcc gcc-c++ lrzsz make openssh-clients
2.tar fx redis-4.0.8.tar.gz -C /usr/src
cd /usr/src/redis-4.0.8/
cd /usr/local/redis
配置文件可以之间编译一个 或者cp /usr/src/redis-4.0.8/redis.conf /usr/local/redis/
配置文件内容
bind 0.0.0.0
所有网段可以来访问
protected-mode no
port 7000 监听端口 默认6379
daemonize yes
后台启动
pidfile /var/run/redis_7000.pid
PID文件位置
dir /7000/data 数据库目录位置
slave-read-only yes slave只读模式
slave-priority 100优先级
appendonly yes
附加
appendfilename “appendonly_7001.aof”
appendfsync everysec
以上是最简单配置文件内容
daemonize yes #是否以后台进程运行,默认为no
pidfile /var/run/redis.pid #如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid
bind 127.0.0.1 #绑定主机IP,默认值为127.0.0.1(注释)
port 6379 #监听端口,默认为6379
timeout 300 #超时时间,默认为300(秒)
loglevel notice #日志记slave-serve-stale-data yes:在master服务器挂掉或者同步失败时,从服务器是否继续提供服务。录等级,有4个可选值,debug,verbose(默认值),notice,warning
logfile /var/log/redis.log #日志记录方式,默认值为stdout
databases 16 #可用数据库数,默认值为16,默认数据库为0
save 900 1 #900秒(15分钟)内至少有1个key被改变
save 300 10 #300秒(5分钟)内至少有300个key被改变
save 60 10000 #60秒内至少有10000个key被改变
rdbcompression yes #存储至本地数据库时是否压缩数据,默认为yes
dbfilename dump.rdb #本地数据库文件名,默认值为dump.rdb
dir ./ #本地数据库存放路径,默认值为 ./
slaveof 10.0.0.12 6379 #当本机为从服务时,设置主服务的IP及端口(注释)
masterauth elain #当本机为从服务时,设置主服务的连接密码(注释)
slave-serve-stale-data yes #在master服务器挂掉或者同步失败时,从服务器是否继续提供服务。
requirepass elain #连接密码(注释)
maxclients 128 #最大客户端连接数,默认不限制(注释)
maxmemory #设置最大内存,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。(注释)
appendonly no #是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no
appendfilename appendonly.aof #更新日志文件名,默认值为appendonly.aof(注释)
appendfsync everysec #更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。
really-use-vm yes
vm-enabled yes #是否使用虚拟内存,默认值为no
vm-swap-file /tmp/redis.swap #虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-max-memory 0 #vm大小限制。0:不限制,建议60-80% 可用内存大小。
vm-page-size 32 #根据缓存内容大小调整,默认32字节。
vm-pages 134217728 #page数。每 8 page,会占用1字节内存。
vm-page-size #vm-pages 等于 swap 文件大小
vm-max-threads 4 #vm 最大io线程数。注意: 0 标志禁止使用vm
hash-max-zipmap-entries 512
hash-max-zipmap-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
activerehashing yes
以上是名词解释
3.启动redis
./bin/redis-server redis_slave.conf
4.哨兵配置选择三个哨兵
配置文件位置跟主服务器配置文件位置存放在同一个地方
protected-mode no
port 27002 哨兵的运行端口
dir “/7002/data/temp” 哨兵的工作目录
sentinel monitor redis-server 192.168.10.146 7002 1 数字1 是至少有一个报警的就切换master
sentinel down-after-milliseconds redis-server 10000
sentinel failover-timeout redis-server 60000
以上是最简单的哨兵配置文件
Example sentinel.conf
哨兵sentinel实例运行的端口 默认26379
port 26379
哨兵sentinel的工作目录
dir /tmp
哨兵sentinel监控的redis主节点的 ip port
master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。
quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
sentinel monitor
sentinel monitor mymaster 127.0.0.1 6379 2
当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供密码
设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
sentinel auth-pass
sentinel auth-pass mymaster MySUPER–secret-0123passw0rd
指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
sentinel down-after-milliseconds
sentinel down-after-milliseconds mymaster 30000
这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,
这个数字越小,完成failover所需的时间就越长,
但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。
可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
sentinel parallel-syncs
sentinel parallel-syncs mymaster 1
故障转移的超时时间 failover-timeout 可以用在以下这些方面:
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#3.当想要取消一个正在进行的failover所需要的时间。
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
默认三分钟
sentinel failover-timeout
sentinel failover-timeout mymaster 180000
SCRIPTS EXECUTION
#配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。
#对于脚本的运行结果有以下规则:
#若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
#若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。
#如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
#一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
#通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,
这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,
一个是事件的类型,
一个是事件的描述。
如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。
#通知脚本
sentinel notification-script
sentinel notification-script mymaster /var/redis/notify.sh
客户端重新配置主节点参数脚本
当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息。
以下参数将会在调用脚本时传给脚本:
目前总是“failover”,
是“leader”或者“observer”中的一个。
参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的
这个脚本应该是通用的,能被多次调用,不是针对性的。
sentinel client-reconfig-script
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
然后其他slave的哨兵配置 只有端口跟 哨兵的工作目录 是自己的 其他项目都一样
port 27001
dir “/7001/data/temp”
然后其他slave 的主服务配置文件跟master唯一的区别是
多了两行
slaveof 172.19.105.188 7001
slave-priority 90 master 挂了之后优先谁当master 值越小越优先
4.启动哨兵
./bin/redis-server sentinel.conf --sentinel &
./bin/redis-cli -p 7002 登陆到数据库 创建键值对
127.0.0.1:7002> set tt 777
OK
127.0.0.1:7002> get tt
“777”
127.0.0.1:7002> quit
[root@localhost redis]#
然后登陆到其他机器查看
断开master 查看其他机器是否切换了
以下是redis安装脚本:[root@master redis]# cat redis.sh
#!/bin/bash
/usr/bin/yum repolist > /dev/null
if [ $? -ne 0 ];then
echo "yum 源未安装"
else
yum list installed | grep epel-release
if [ $? -ne 0 ];then
yum install -y epel-release > /dev/null
yum install -y gcc gcc-c++ lrzsz make openssh-clients vim > /dev/null
else
yum install -y gcc gcc-c++ lrzsz make openssh-clients vim > /dev/null
fi
if [ $? -ne 0 ];then
echo "依赖包安装未成功"
else
tar fx redis-4.0.8.tar.gz -C /usr/src/
cd /usr/src/redis-4.0.8
make PREFIX=/usr/local/redis install
if [ $? -ne 0 ];then
echo "redis 没有安装成功,请检查报错信息"
else
cat redis.conf | egrep -v '^$|\s*#' > /usr/local/redis/redis_master.conf
echo " #请按照一下配置文件,修改redis.conf
#配置文件内容
#bind 0.0.0.0
#所有网段可以来访问
# protected-mode no
# port 7000 监听端口 默认6379
# daemonize yes
# 后台启动
# pidfile /var/run/redis_7000.pid
# PID文件位置
#dir /7000/data 数据库目录位置
#slave-read-only yes slave只读模式
#slave-priority 100优先级
#appendonly yes 是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失
#appendfilename appendonly_7001.aof 更新日志文件名,默认值为appendonly.aof(注释
#appendfsync everysec no表示等操作系统进行数据缓存同步到磁盘,
#always表示每次更新操作后手动调用fsync()将数据写到磁盘,
#everysec表示每秒同步一次(默认值)。"
fi
fi
fi
[root@master redis]#