redis哨兵文档

redis整理文档

1.目录规划
/data/soft/	                                    #redis下载目录
/opt/redis_{PORT}/{conf,logs,pid}	#redis安装目录
/data/redis_{PORT}/redis_{PORT}.rdb	#redis数据目录
2.安装命令
###编辑hosts文件

[root@db01 ~]# tail -3 /etc/hosts
10.0.1.51 db01    
10.0.1.52 db02    
10.0.1.53 db03

###编译安装
yum install gcc -y
make distclean
mkdir -p /data/soft
mkdir -p /data/redis_6379
mkdir -p /opt/redis_6379/{conf,pid,logs}
cd /data/soft/
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar zxf redis-3.2.9.tar.gz -C /opt/
ln -s /opt/redis-3.2.9/ /opt/redis
cd /opt/redis
make && make install
3.配置文件
cat >/opt/redis_6379/conf/redis_6379.conf <<EOF
###以守护进程模式启动
daemonize yes
###绑定的主机地址
bind 10.0.0.51 127.0.0.1
###监听端口
port 6379
###pid文件和log文件的保存地址
pidfile /opt/redis_6379/pid/redis_6379.pid
logfile /opt/redis_6379/logs/redis_6379.log
###设置数据库的数量,默认数据库为0
databases 16
###本地数据库的目录
dir /data/redis_6379
###指定本地持久化文件的文件名,默认是dump.rdb
dbfilename redis_6379.rdb
EOF
4.启动redis
redis-server /opt/redis_6379/conf/redis_6379.conf

5.检查是否启动
ps -ef|grep redis
netstat -lntup|grep redis
6.进入redis
redis-cli
7.Redis持久化
1.RDB和AOF优缺点
RDB: 快照,把当前内存里的状态快照到磁盘上
优点: 恢复速度快
缺点: 可能会丢失数据

AOF: 类似于mysql的binlog,重写,1秒写一次 
优点: 安全,有可能会丢失1秒的数据
缺点: 文件比较大,恢复速度慢 

2.配置RDB
save 900 1
save 300 10
save 60 10000
dir /data/redis_6379/
dbfilename redis_6379.rdb

结论:
1.执行shutdown的时候,内部会自动执行bgsave,然后再执行shutdown
2.pkill kill killall 都类似于执行shutdown命令.会触发bgsave持久化
3.恢复的时候,rdb文件名称要和配置文件里写的一样
4.如果没有配置save参数,执行shutdown不会自动bgsave持久化 
5.如果没有配置save参数,可以手动执行bgsave触发持久化保存

常用命令:
ll /data/redis_6379/
cat /opt/redis_6379/conf/redis_6379.conf 
vim /opt/redis_6379/conf/redis_6379.conf 
pkill redis
redis-server /opt/redis_cluster/redis_6379/conf/redis_6379.conf 
redis-cli -h db01
redis-cli -h db01 shutdown
bash for.sh 

3.配置AOF
appendfilename "redis_6379.aof"
appendonly yes
appendfsync everysec

实验:
如果aof和rdb文件同时存在,redis会如何读取:

实验步骤:
1.插入一条数据
aof: 有记录
rdb: 没有记录 
2.复制到其他地方 
3.把redis停掉
4.清空数据目录
5.把数据文件拷贝过来
aof: 有记录
rdb: 没有记录
6.启动redis
7.测试,如果有新插入的数据,就表示读取的是aof,如果没有,就表示读取的是rdb

实验结论:
如果2种数据格式都存在,优先读取aof
8。Redis用户认证
1.配置文件
requirepass 123456

2.使用密码登录
两种方式:
第一种:
redis-cli -h db01
AUTH 123456

第二种:
redis-cli -h db01 -a 123456 get k_1
9.主从复制
方法1:临时生效
SLAVEOF 10.0.0.51 6379

方法2:写入配置文件
SLAVEOF 10.0.0.51 6379

取消同步命令:
SLAVEOF no one

主从复制流程:	
从库发起同步请求
11:55:12.686 * Connecting to MASTER 10.0.0.51:6379
11:55:12.687 * MASTER <-> SLAVE sync started
11:55:12.687 * Non blocking connect for SYNC fired the event.
11:55:12.687 * Master replied to PING, replication can continue...
11:55:12.688 * Partial resynchronization not possible (no cached master)
11:55:12.690 * Full resync from master: c63b80909e49adfa3880dcc87ccffb89d148a564:436

主库接收请求
11:55:12.694 * Slave 10.0.0.52:6379 asks for synchronization
11:55:12.694 * Full resync requested by slave 10.0.0.52:6379

主库开始BGSAVE
11:55:12.694 * Starting BGSAVE for SYNC with target: disk
11:55:12.695 * Background saving started by pid 13009
11:55:12.700 * DB saved on disk
11:55:12.700 * RDB: 6 MB of memory used by copy-on-write

从库接收主库的数据,清空自己的数据,然后将主库发送过来的RDB文件加载到内存中
11:55:12.780 * MASTER <-> SLAVE sync: receiving 12887 bytes from master
11:55:12.781 * MASTER <-> SLAVE sync: Flushing old data
11:55:12.781 * MASTER <-> SLAVE sync: Loading DB in memory
11:55:12.782 * MASTER <-> SLAVE sync: Finished with success

主库接收从库消息,主从复制成功
11:55:12.786 * Background saving terminated with success
11:55:12.786 * Synchronization with slave 10.0.0.52:6379 succeeded
10.Redis主从复制部署
快速创建第二台redis节点命令:
rsync -avz /opt/* db02:/opt/
rsync -avz /data db02:/
cd /opt/redis 
make install 
sed -i 's#51#52#g' /opt/redis_6379/conf/redis_6379.conf
rm -rf /data/redis_6379/* 
redis-server /opt/redis_6379/conf/redis_6379.conf

配置方法:
方法1: 临时生效
[root@db-02 ~]# redis-cli -h 10.0.1.52
10.0.0.52:6379> SLAVEOF 10.0.1.51 6379
OK

方法2: 写入配置文件
SLAVEOF 10.0.1.51 6379

主从复制流程:
1.从节点发送同步请求到主节点
2.主节点接收到从节点的请求之后,做了如下操作

   立即执行bgsave将当前内存里的数据持久化到磁盘上

   持久化完成之后,将rdb文件发送给从节点
3.从节点从主节点接收到rdb文件之后,做了如下操作

   清空自己的数据

   载入从主节点接收的rdb文件到自己的内存里
4.后面的操作就是和主节点实时的了

取消主从复制
SLAVEOF no one

注意!!!
1.从节点只读不可写
2.从节点不会自动故障转移,它会一直同步主
10.0.1.52:6379> set k1 v1
(error) READONLY You can't write against a read only slave.
3.主从复制故障转移需要人工介入

修改代码指向REDIS的IP地址

从节点需要执行SLAVEOF no one

注意!!!
1.从节点会清空自己原有的数据,如果同步的对象写错了,就会导致数据丢失
11.redis哨兵
Sentinel 介绍 Redis 的主从模式下,主节点一旦发生故障不能提供服务,需要人工干预,将从节点晋升为主节点, 同时还需要修改客户端配置。对于很多应用场景这种方式无法接受。 Sentinel(哨兵)架构解决了 redis 主从人工干预的问题。 Redis Sentinel 是 redis 的高可用实现方案,实际生产环境中,对提高整个系统可用性非常有帮助的。
1.部署redis节点
rsync -avz 10.0.0.51:/opt/* /opt/
mkdir /data/redis_6379 -p
cd /opt/redis 
make install 
sed -i 's#51#53#g' /opt/redis_6379/conf/redis_6379.conf
rm -rf /data/redis_6379/* 
redis-server /opt/redis_6379/conf/redis_6379.conf
redis-cli

2.安装部署3个哨兵节点
mkdir -p /data/redis_26379
mkdir -p /opt/redis_26379/{conf,pid,logs}

3.配置哨兵的配置文件
db01的配置:
cat >/opt/redis_26379/conf/redis_26379.conf << EOF
bind 10.0.0.51
port 26379
daemonize yes
logfile /opt/redis_26379/logs/redis_26379.log
dir /data/redis_26379
sentinel monitor mymaster 10.0.0.51 6379 2 
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 18000
EOF

db02的配置:
cat >/opt/redis_26379/conf/redis_26379.conf << EOF
bind 10.0.0.52
port 26379
daemonize yes
logfile /opt/redis_26379/logs/redis_26379.log
dir /data/redis_26379
sentinel monitor mymaster 10.0.0.51 6379 2 
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 18000
EOF

db03的配置:
cat >/opt/redis_26379/conf/redis_26379.conf << EOF
bind 10.0.0.53
port 26379
daemonize yes
logfile /opt/redis_26379/logs/redis_26379.log
dir /data/redis_26379
sentinel monitor mymaster 10.0.0.51 6379 2 
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 18000
EOF

4.启动所有的单节点
redis-server /opt/redis_6379/conf/redis_6379.conf 

5.配置主从复制
redis-cli -h db02 slaveof 10.0.0.51 6379
redis-cli -h db03 slaveof 10.0.0.51 6379

6.启动哨兵
redis-sentinel /opt/redis_26379/conf/redis_26379.conf

7.验证主节点
redis-cli -h db01 -p 26379 Sentinel get-master-addr-by-name mymaster
redis-cli -h db02 -p 26379 Sentinel get-master-addr-by-name mymaster
redis-cli -h db03 -p 26379 Sentinel get-master-addr-by-name mymaster

8.模拟故障转移
- 关闭主节点服务上的所有redis进程
- 观察其他2个节点会不会发生选举
- 查看配置文件里会不会自动更新
- 查看新的主节点能不能写入
- 查看从节点能否正常同步

验证选举结果:
redis-cli -h db01 -p 26379 Sentinel get-master-addr-by-name mymaster

哨兵节点常用命令
Info Sentinel 
Sentinel masters 
Sentinel master <master name> 
Sentinel slaves <master name> 
Sentinel sentinels <master name> 
Sentinel get-master-addr-by-name <master name> 
Sentinel failover <master name> 
Sentinel flushconfig
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值