1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| #准备三台主机 * 安装 yum install -y redis
* 配置 vim /etc/sudoers #Defaults requiretty #注释上面一行 vim /etc/sudoers.d/redis redis ALL=(ALL) NOPASSWD:/sbin/ip,NOPASSWD:/sbin/arping #这是为了让redis用户使用sudo命令时不用密码也可执行ip和arping命令。因为redis-sentinel进程是以redis身份运行的,所以执行脚本时也是redis用户,但redis用户是不能设置本机地址的,所以要给它权限。 vim /opt/notify_mymaster.sh #!/bin/bash # MASTER_IP=${6} LOCAL_IP='192.168.2.65' VIP='192.168.2.183' NETMASK='24' INTERFACE='ens160' if [ ${MASTER_IP} = ${LOCAL_IP} ];then sudo /usr/sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE} sudo /usr/sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE} exit 0 else sudo /usr/sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE} exit 0 fi exit 1 chmod +x /opt/notify_mymaster.sh # /sbin是/usr/sbin的软链接 # 因为如果没有脚本或脚本没有执行权限,redis-sentinel服务就不能启动,所以提前设置。
* redis1 vim /etc/redis.conf bind 0.0.0.0 #监听所有地址 systemctl start redis redis-cli CONFIG SET requirepass redisqwer1234 AUTH redisqwer1234 CONFIG GET requirepass CONFIG SET masterauth redisqwer1234 CONFIG REWRITE #设置并查看认证密码
* redis2&3 vim /etc/redis.conf bind 0.0.0.0 systemctl start redis redis-cli SLAVEOF 192.168.2.65 6379 #指明主节点地址与端口 CONFIG SET masterauth redisqwer1234 #设置主节点的认证信息 CONFIG SET requirepass redisqwer1234 CONFIG REWRITE #这里的三个节点都应该设置masterauth和requirepass的值,requirepass的值是自己作为主节点时,别人请求要用的认证密码。masterauth是与主节点通信时要用到的认证密码。也就是说,masterauth指向的密码就是requirepass设置的密码。因为三个节点都可以做主节点,所以都要设置。如果只设置一个,那么在主节点查看从节点信息时,有可能只显示一个。 #可在从节点查看/var/log/redis/redis.conf日志,日志中会显示不能加入集群的信息
* redis1 INFO replication #查看状态信息,有slave0的信息,也就是从节点的信息。如: slave0:ip=192.168.2.62,port=6379,state=online,offset=212225,lag=1 slave1:ip=192.168.2.65,port=6379,state=online,offset=212225,lag=1
* redis2&3 redis-cli CONFIG SET requirepass redisqwer1234 AUTH redisqwer1234 CONFIG REWRITE #设置两个节点的认证信息与主节点一样,这是为了在从节点提升为主节点时的准备
* redis1 vim /etc/redis-sentinel.conf port 26379 bind 0.0.0.0 #这一项一定要加上,不然不能通过认证 sentinel monitor mymaster 10.5.5.235 6379 2 #sentinel监听主节点的地址和端口,2表示至少有几个sentinel进行选举才能通过 sentinel auth-pass mymaster ccjd.redis.com #认证mymaster的主节点的密码,建议用随机字符串。如果不写此项就无法用sentinel slaves mymaster命令查看到从节点的信息 sentinel down-after-milliseconds mymaster 5000 #多久连接不到主节点就认为它宕机了,这是主观宕机。这里定义是30秒,可改为5000 sentinel parallel-syncs mymaster 1 #一次只给几个从节点同步。并行同步的数量 sentinel failover-timeout mymaster 60000 #故障转移多久完成不了,就进行新的转移。这个时间不要太短。这里是3分钟 sentinel client-reconfig-script mymaster /opt/notify_mymaster.sh #故障转移时执行notify_mymaster.sh脚本。加入这一行,sentinel的client-reconfig-script在每次执行时会传递出7个参数,第6个就是主redis的地址 scp /etc/redis-sentinel.conf redis2:/etc scp /etc/redis-sentinel.conf redis3:/etc systemctl start redis-sentinel ss -tln #监听26379端口 tail -f /var/log/redis/sentinel.log
* redis2&3 systemctl start redis-sentinel
* redis1 redis-cli -h 10.5.5.21 -p 26379 SENTINEL master mymaster #查看主节点状态 SENTINEL slaves mymaster #查看从节点状态 SENTINEL failover mymaster #切换主节点 SENTINEL master mymaster SENTINEL failover mymaster #当再次切换时就很慢,停掉主节点的服务后还要等一会。可能与设置中的failover-timeout的时间是3分钟有关。 SENTINEL get-master-addr-by-name mymaster #获得现在名称为mymaster主redis的IP和端口
|