redis一主两从三哨兵

./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]#

猜你喜欢

转载自blog.csdn.net/weixin_43231324/article/details/85273081