发布于2021-06-14 01:49 阅读(1033) 评论(0) 点赞(12) 收藏(3)
wget http://download.redis.io/releases/redis-6.0.6.tar.gz
yum -y install gcc-c++
升级gcc #这里要升级一下,否则编译时候会报错
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
tar -zxvf redis-6.0.6.tar.gz -C /opt/local
cd /usr/local/redis-6.0.6/
make
cd src/
make install
cp /usr/local/redis-6.0.0/redis.conf /etc/redis/
# 修改redis配置文件
vi /etc/redis/redis.conf
--------------------------------------------------------------------------------
#不限制远程连接
bind 0.0.0.0
#设置连接密码
requirepass "123456"
#允许后台启动redis
daemonize yes
--------------------------------------------------------------------------------
/usr/local/redis-6.0.0/src/redis-server /etc/redis/redis.conf /etc/redis/redis.conf
[root@iZ2zejaz33icbod2k4cvy6Z redis-5.0.0]# redis-cli
--------------------------------------------------------------------------------
127.0.0.1:6379> auth 123456
OK
--------------------------------------------------------------------------------
主从结构+哨兵(sentinel),实现容灾的自动切换,如下图所示:
一个主节点(master)可拥有多个从节点(slave),从节点实现对主节点的复制,保证数据同步。而哨兵(sentinel)则对各节点进行监控,主要包括主节点存活检测、主从运行情况检测等,一旦主节点宕机,哨兵可自动进行故障转移 (failover)、主从切换。接下来就开始搭建这样一个集群,首先是主从结构,然后是哨兵模式。
#存放主节点配置
mkdir -p /etc/redis/master
#存放slave1节点配置
mkdir -p /etc/redis/slave1
#存放slave2节点配置
mkdir -p /etc/redis/slave2
#存储日志
mkdir -p /usr/local/redis-6.0.0/log
cp /etc/redis/redis.conf /etc/redis/master/
cp /etc/redis/redis.conf /etc/redis/slave1/
cp /etc/redis/redis.conf /etc/redis/slave2/
vi /etc/redis/master/redis.conf
---------------------------------------------------------------------------------
bind 0.0.0.0
port 6379
daemonize yes
requirepass "123456"
logfile "/usr/local/redis-6.0.0/log/redis1.log"
dbfilename "master.rdb"
appendonly yes
appendfilename "master.aof"
masterauth "123456"
--------------------------------------------------------------------------------
vi /etc/redis/slave1/redis.conf
---------------------------------------------------------------------------------
bind 0.0.0.0
port 6380
daemonize yes
requirepass "123456"
logfile "/usr/local/redis-6.0.0/log/redis2.log"
dbfilename "slave1.rdb"
appendonly yes
appendfilename "slave1.aof"
replicaof 47.91.232.xxx 6379
masterauth "123456"
--------------------------------------------------------------------------------
vi /etc/redis/slave2/redis.conf
---------------------------------------------------------------------------------
bind 0.0.0.0
port 6381
daemonize yes
requirepass "123456"
logfile "/usr/local/redis-6.0.0/log/redis3.log"
dbfilename "slave2.rdb"
appendonly yes
appendfilename "slave2.aof"
replicaof 47.91.232.xxx 6379
masterauth "123456"
--------------------------------------------------------------------------------
/usr/local/redis-6.0.0/src/redis-server /etc/redis/master/redis.conf
/usr/local/redis-6.0.0/src/redis-server /etc/redis/slave1/redis.conf
/usr/local/redis-6.0.0/src/redis-server /etc/redis/slave2/redis.conf
/usr/local/redis-6.0.0/src/redis-cli -p 6379
------------------------------------------------------------------------------------
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master #角色:主节点
connected_slaves:2 #两个从节点链接上来了
slave0:ip=47.91.232.223,port=6380,state=online,offset=266,lag=1 #从节点1信息
slave1:ip=47.91.232.223,port=6381,state=online,offset=266,lag=1 #从节点2信息
master_failover_state:no-failover
master_replid:3eeab8b1fff922f61ea0cb259d830128ba53b0e2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:266
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:266
----------------------------------------------------------------------------------
主从复制分两种(主从刚连接的时候,进行全量同步;全同步结束后,进行增量同步)
全量复制
1、master服务器会开启一个后台进程用于将redis中的数据生成一个rdb文件
2、主服务器会缓存所有接收到的来自客户端的写命令,当后台保存进程 处理完毕后,会将该rdb文件传递给slave服务器
3、slave服务器会将rdb文件保存在磁盘并通过读取该文件将数据加载到内存
在此之后master服务器会将在此期间缓存的命令通过redis传输协议发送给slave服务器
4、然后slave服务器将这些命令依次作用于自己本地的数据集上最终达到数据的一致性
增量复制
1、Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程
2、服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令
特点
1、主从复制对于 主/从 redis服务器来说是非阻塞的,所以同步期间都可以正常处理外界请求
2、一个主redis可以含有多个从redis,每个从redis可以接收来自其他从redis服务器的连接
3、从节点不会让key过期,而是主节点的key过期删除后,成为del命令传输到从节点进行删除
加速复制
1、完全重新同步需要在磁盘上创建一个RDB文件,然后加载这个文件以便为从服务器发送数据
2、在比较低速的磁盘,这种操作会给主服务器带来较大的压力
3、新版支持无磁盘的复制,子进程直接将RDB通过网络发送给从服务器,不使用磁盘作为中间存储
4、repl-diskless-sync yes (默认是no)
主从断开重连
1、如果遭遇连接断开,重新连接之后可以从中断处继续进行复制,而不必重新同步
2、2.8版本后 部分重新同步这个新特性内部使用PSYNC命令,旧的实现中使用SYNC命令
背景
哨兵模式介绍
Sentinel三大工作任务
监控(Monitoring)
Sentinel 会不断地检查你的主服务器和从服务器是否运作正常
提醒(Notification)
当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知
自动故障迁移(Automatic failover)
当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器
当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器
核心流程
配置3个哨兵,每个哨兵的配置都是一样的
mkdir -p /var/log/redis
mkdir -p /etc/redis/sentinel
port 26379
bind 0.0.0.0
daemonize yes
pidfile "/var/run/redis-sentinel-1.pid"
logfile "/var/log/redis/sentinel_26379.log"
dir "/tmp"
sentinel monitor mymaster 47.91.232.xxx 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 30000
port 26380
bind 0.0.0.0
daemonize yes
pidfile "/var/run/redis-sentinel-2.pid"
logfile "/var/log/redis/sentinel_26380.log"
dir "/tmp"
sentinel monitor mymaster 47.91.232.xxx 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 30000
port 26381
bind 0.0.0.0
daemonize yes
pidfile "/var/run/redis-sentinel-3.pid"
logfile "/var/log/redis/sentinel_26381.log"
dir "/tmp"
sentinel monitor mymaster 47.91.232.xxx 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster 123456
sentinel failover-timeout mymaster 30000
/usr/local/redis-6.0.0/src/redis-server /etc/redis/sentinel/sentinel-1.conf --sentinel
/usr/local/redis-6.0.0/src/redis-server /etc/redis/sentinel/sentinel-2.conf --sentinel
/usr/local/redis-6.0.0/src/redis-server /etc/redis/sentinel/sentinel-3.conf --sentinel
[root@nodec sentinel]# ps -ef|grep redis
---------------------------------------------------------------------------------
root 9593 1 0 16:16 ? 00:00:00 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:26379 [sentinel]
root 9685 1 0 16:16 ? 00:00:00 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:26380 [sentinel]
root 9691 1 0 16:16 ? 00:00:00 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:26381 [sentinel]
root 9697 5569 0 16:16 pts/0 00:00:00 grep --color=auto redis
root 24717 1 0 14:29 ? 00:00:12 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:6379
root 24889 1 0 14:30 ? 00:00:11 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:6380
root 24979 1 0 14:30 ? 00:00:11 /usr/local/redis-6.0.0/src/redis-server 0.0.0.0:6381
----------------------------------------------------------------------------------------
[root@nodec sentinel]# /usr/local/redis-6.0.0/src/redis-cli -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1 # 1主
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=47.91.232.223:6379,slaves=2,sentinels=3 # 主节点地址,从节点数量、哨兵数量等信息
#杀死主节点
[root@nodec sentinel]# /usr/local/redis-6.0.0/src/redis-cli -p 6379
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> shutdown
not connected>
sentinel日志信息查看
6380节点查看集群信息
[root@nodec sentinel]# /usr/local/redis-6.0.0/src/redis-cli -p 6380
127.0.0.1:6380> auth 123456
OK
127.0.0.1:6380> info replication
# Replication
role:master #6380变成主节点
connected_slaves:1 #从节点还剩一个
slave0:ip=47.91.232.223,port=6381,state=online,offset=235362,lag=1 #从节点信息
master_failover_state:no-failover
master_replid:7388cf73f23fe27959694460831602caf8aadde2
master_replid2:3eeab8b1fff922f61ea0cb259d830128ba53b0e2
master_repl_offset:235517
second_repl_offset:167212
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:235517
重启6379节点,查看节点信息
[root@nodec sentinel]# /usr/local/redis-6.0.0/src/redis-server /etc/redis/master/redis.conf
[root@nodec sentinel]# /usr/local/redis-6.0.0/src/redis-cli -p 6379
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:slave #6379变成从节点
master_host:47.91.232.223
master_port:6380 #6380是主节点
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:284084
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:7388cf73f23fe27959694460831602caf8aadde2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:284084
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:279522
repl_backlog_histlen:4563
至此,测试完成。
原文链接:https://blog.csdn.net/han949417140/article/details/117811078
作者:天上飘来一个字
链接:http://www.phpheidong.com/blog/article/96564/60834d7eff7a49c816b5/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!