1.Redis部署
1.1解压redis安装包
[root@mongo1 ~]# tar -zxvf redis-5.0.14.tar.gz -C /usr/local/
redis-5.0.14/
redis-5.0.14/.gitignore
redis-5.0.14/00-RELEASENOTES
redis-5.0.14/BUGS
redis-5.0.14/CONTRIBUTING
redis-5.0.14/COPYING
redis-5.0.14/INSTALL
redis-5.0.14/MANIFESTO
redis-5.0.14/Makefile
redis-5.0.14/README.md
redis-5.0.14/deps/
redis-5.0.14/deps/Makefile
................................
1.2编译安装
[root@mongo1 redis-5.0.14]# make && make install
cd src && make all
make[1]: 进入目录“/usr/local/redis-5.0.14/src”
CC Makefile.dep
make[1]: 离开目录“/usr/local/redis-5.0.14/src”
.............................................
Hint: It's a good idea to run 'make test' ;)
make[1]: 离开目录“/usr/local/redis-5.0.14/src”
cd src && make install
make[1]: 进入目录“/usr/local/redis-5.0.14/src”
CC Makefile.dep
make[1]: 离开目录“/usr/local/redis-5.0.14/src”
make[1]: 进入目录“/usr/local/redis-5.0.14/src”
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
1.3修改配置文件
[root@localhost redis]# vim redis.conf
#修改如下内容
69行:注释掉bind 127.0.0.1
88行:protected_mode yes #将yes改为no ,防止远程访问
136行:daemonize no #将no改为yes ,表明需要后台运行
171行:logfile "/var/log/redis/reids.log" #定义日志位置
508行:requirepass ..... #设置密码
1.4启动redis
[root@mongo1 redis-5.0.14]# ./src/redis-server ./redis.conf
[root@mongo1 redis-5.0.14]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1383/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1598/master
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 6283/./src/redis-se
tcp6 0 0 :::22 :::* LISTEN 1383/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1598/master
tcp6 0 0 :::6379 :::* LISTEN 6283/./src/redis-se
2.redis主从部署
2.1主从复制概述
-
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。
-
主从复制的原理:
刚配置完主从关系,slave节点会进行全量复制。这时slave节点会发送一个SYNC命令,master收到这个命令后,会开启一个后台进程用于将redis中的数据生成一个rdb文件,与此同时,服务器会缓存所有接收到的来自客户端的写命令(包含增、删、改),当后台保存进程处理完毕后,会将该rdb文件传递给slave服务器,而slave服务器会将rdb文件保存在磁盘并通过读取该文件将数据加载到内存,在此之后master服务器会将在此期间缓存的命令通过redis传输协议发送给slave服务器,然后slave服务器将这些命令依次作用于自己本地的数据集上最终达到数据的一致性。
完成全量同步后,会继续进行增量同步,master会继续将收集到的修改命令一次传给slave,实现数据的同步效果。 -
主从复制的作用
- 数据冗余:主从复制实现数据的热备份,是持久化之外的一种数据冗余方式。
- 故障恢复:当主节点出现问题的时候,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
- 负载均衡:主从复制,并且配合读写分离,由master节点提供写服务,slave节点提供读服务。尤其是在写少读多的场景下,可以通过多个从节点来分担读的负载,可以大大提高redis服务器的并发量。
2.2部署一主一从
2.2.1修改配置文件并重启服务
#redis部署主从非常简单,只需要在对应的从服务器中,修改redis的配置文件即可。
#在redis的配置文件中添加主服务器的信息即可
slaveof 192.168.36.133 6379 #ip和端口都是master节点的ip和端口
masterauth 123456 #写入master节点的requirepass密码
#重启服务
[root@mongo2 redis-5.0.14]# ps -ef | grep redis
root 6087 1 0 11:33 ? 00:00:04 ./src/redis-server *:6379
root 6489 6052 0 13:15 pts/1 00:00:00 grep --color=auto redis
[root@mongo2 redis-5.0.14]# kill -9 6087
[root@mongo2 redis-5.0.14]# ./src/redis-server ./redis.conf
2.2.2验证是否生效
#登录slave节点,发现已经连接上master节点了
[root@mongo2 redis-5.0.14]# ./src/redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.36.133
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:56
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:1dfac8ace2bce4a407eed200dc08f79e6fefcaf4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:56
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:56
#在master节点上也能查询到salve节点
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.36.136,port=6379,state=online,offset=14,lag=1
master_replid:1dfac8ace2bce4a407eed200dc08f79e6fefcaf4
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14
#在master节点建一个key试试
127.0.0.1:6379> set key k2
OK
#在从节点查询一下,可以查到,说明成功了
127.0.0.1:6379> get key
"k2"
2.3部署一主多从
与部署一主一从的方式一样,只需在slave节点的配置文件中写入master节点的ip port requirepass即可。然后重启服务。
3.开启哨兵模式
3.1哨兵的任务
-监控: 哨兵会不断地检查你的master和slave节点是否正常运作。
-提醒: 当被监控的某个redis出现问题时,哨兵可以通过API向管理员或者其他应用程序发送通知。
-故障迁移: 若一台master节点出现问题时,哨兵会自动将master节点下的某个slave节点设置为新的master节点,并让其他的节点与其建立主从关系。
3.2部署一主两从三哨兵
3.2.1配置sentinel.conf文件
#三个节点的配置都是一样的
#sentinel端口
port 26379
#工作路径,注意路径不要和主重复
dir "/tmp"
# 守护进程模式
daemonize yes
#关闭保护模式
protected-mode no
# 指明日志文件名
logfile "/var/log/redis/sentinel.log"
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态
sentinel down-after-milliseconds mymaster 5000
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout mymaster 18000
#哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数。
sentinel monitor mymaster 192.168.36.133 6379 2
#设置master和slaves验证密码
sentinel auth-pass mymaster 123456
# 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes
# 如果master重新选出来后,其它slave节点能同时并行从新master同步数据的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保守的设置为1,同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
sentinel parallel-syncs mymaster 1
3.2.2启动服务
#启动三台节点的服务,先启动主节点
[root@mongo3 redis-5.0.14]# ./src/redis-sentinel ./sentinel.conf
#查看日志,两外两台节点都进来了。
[root@mongo3 redis-5.0.14]# tail -f /var/log/redis/sentinel.log
1555:X 24 Apr 2024 20:31:00.315 # Sentinel ID is dfa3ff68d272563b754ba3aaa347c09d0c5b1097
1555:X 24 Apr 2024 20:31:00.315 # +monitor master mymaster 192.168.36.133 6379 quorum 2
1555:X 24 Apr 2024 20:31:00.316 * +slave slave 192.168.36.137:6379 192.168.36.137 6379 @ mymaster 192.168.36.133 6379
1555:X 24 Apr 2024 20:31:00.316 * +slave slave 192.168.36.136:6379 192.168.36.136 6379 @ mymaster 192.168.36.133 6379
1555:X 24 Apr 2024 20:31:19.264 * +sentinel sentinel 13ab48d697cfa427741c161359c96bd1b8479afa 192.168.36.137 26379 @ mymaster 192.168.36.133 6379
1555:X 24 Apr 2024 20:31:33.797 * +sentinel sentinel 72a8d87befa775d14c9acb8bdbf5e6430a23ec48 192.168.36.136 26379 @ mymaster 192.168.36.133
3.2.3可行性测试
#模拟宕机,让主节点的redis宕机
[root@mongo3 redis-5.0.14]# ps -ef | grep redis
root 1555 1 0 20:30 ? 00:00:07 ./src/redis-sentinel *:26379 [sentinel]
root 1693 1 0 21:02 ? 00:00:03 ./src/redis-server *:6379
root 1762 1459 0 21:34 pts/0 00:00:00 grep --color=auto redis
[root@mongo3 redis-5.0.14]# kill -9 1693
#查看日志,可以发现137被选为了master节点
[root@mongo3 redis-5.0.14]# tail -f /var/log/redis/sentinel.log
1985:X 24 Apr 2024 21:34:30.494 # +sdown master mymaster 192.168.36.133 6379
1985:X 24 Apr 2024 21:34:30.594 # +new-epoch 3
1985:X 24 Apr 2024 21:34:30.594 # +vote-for-leader 72a8d87befa775d14c9acb8bdbf5e6430a23ec48 3
1985:X 24 Apr 2024 21:34:31.510 # +config-update-from sentinel 72a8d87befa775d14c9acb8bdbf5e6430a23ec48 192.168.36.136 26379 @ mymaster 192.168.36.133 6379
1985:X 24 Apr 2024 21:34:31.510 # +switch-master mymaster 192.168.36.133 6379 192.168.36.137 6379
1985:X 24 Apr 2024 21:34:31.510 * +slave slave 192.168.36.136:6379 192.168.36.136 6379 @ mymaster 192.168.36.137 6379
1985:X 24 Apr 2024 21:34:31.510 * +slave slave 192.168.36.133:6379 192.168.36.133 6379 @ mymaster 192.168.36.137 6379
1985:X 24 Apr 2024 21:34:36.590 # +sdown slave 192.168.36.133:6379 192.168.36.133 6379 @ mymaster 192.168.36.137 6379
#进入137节点查看,确实变成了master节点,并salve节点仅剩136了
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.36.136,port=6379,state=online,offset=833775,lag=1
master_replid:2927b1fbc186537d909ce48f7b8b85b22a07cd5a
master_replid2:41c6cbc69f95d9fcf6a3f6d1aec52e54cbd67dda
master_repl_offset:833918
second_repl_offset:801797
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
3.2.4 恢复133节点的redis服务
#可以发现现在的133变成了slave节点
27.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.36.136,port=6379,state=online,offset=873652,lag=1
slave1:ip=192.168.36.133,port=6379,state=online,offset=0,lag=1
master_replid:2927b1fbc186537d909ce48f7b8b85b22a07cd5a
master_replid2:41c6cbc69f95d9fcf6a3f6d1aec52e54cbd67dda
master_repl_offset:873818
second_repl_offset:801797
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:873818
标签:slave,14,部署,Redis,redis,192.168,6379,集群,master
From: https://www.cnblogs.com/ellison123/p/18154655