提示:在搭建redis主从复制和哨兵模式,先学会搭建单个redis
搭建单个redis 可以参照博客:https://blog.csdn.net/weixin_42338444/article/details/99708038
1. VMware准备三台虚拟机(不会安装的自行百度,再次不做赘述),我的配置如图。三台虚拟机(centos 7),IP分别为192.168.74.129,192.168.74.130,192.168.74.131,其中129作为master(主服务器)。130和131为slave(从服务器)。主服务器可以读写,从服务器只读不能写
2. 分别在三台主机上安装redis,安装过程可以参考上面步骤,安装之后按照以下步骤进行
3. 主从集群配置
3.1 修改主机文件redis.conf
vi /opt/redis/redis-5.0.3/redis.conf
以下是文件内容的修改
#是否把redis-server启动在后台,默认是“否”。若改成yes,会生成一个pid文件。
daemonize no --> daemonize yes
#日志文件路径
logfile /var/log/redis/redis.log
#redis版本低
#主从服务器的地址和端口。例如:slaveof 192.168.1.1 6379 如果是主服务器不需要开启此项
#slaveof <masterip> <masterport>
#redis版本高
#主从服务器的地址和端口。例如:replicaof 192.168.1.1 6379 如果是主服务器不需要开启此项
# replicaof <masterip> <masterport>
# 把保护模式设置为no,如果这里是yes,那么修改为no
protected-mode no
#从服务器只读选项,默认是yes,只读模式
slave-read-only no
#服务器密码:如果主服务设置了密码,从服务需要配置masterauth这个选项
requirepass 123456
#主服务访问密码:从服务器设置,主服务器不需要设置
# masterauth <master-password>
cluster-enabled no
3.2 修改从机 redis.conf ,另一台从机配置一样的配置
vi /opt/redis/redis-5.0.3/redis.conf
以下是文件内容的修改
#是否把redis-server启动在后台,默认是“否”。若改成yes,会生成一个pid文件。
daemonize no --> daemonize yes
#日志文件路径
logfile /var/log/redis/redis.log
#redis版本低
#主从服务器的地址和端口。例如:slaveof 192.168.1.1 6379 如果是主服务器不需要开启此项
slaveof 192.168.74.129 6379
#redis版本高
#主从服务器的地址和端口。例如:replicaof 192.168.1.1 6379 如果是主服务器不需要开启此项
replicaof 192.168.74.129 6379
# 把保护模式设置为no,如果这里是yes,那么修改为no
protected-mode no
#从服务器只读选项,默认是yes,只读模式
slave-read-only no
#服务器密码:如果主服务设置了密码,从服务需要配置masterauth 这个选项,从服务器也可以设置自己的密码
requirepass 67890
#主服务访问密码:从服务器设置,主服务器不需要设置
masterauth 123456
4. 然后记得修改主从防火墙或者关闭防火墙
5. 启动主从服务器:先启动主服务器,在启动从服务器
5.1 测试主从是否连接
[root@localhost redis]# redis-cli
#如果上面命令找不到情况,相当于在/usr/bin/创建一个快捷键
ln -s /opt/redis/redis-5.0.3/src/redis-cli /usr/bin/redis-cli
#登录redis客户端输入密码
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info
#如果出现一下类似信息主机连接成功
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.74.130,port=6379,state=online,offset=3542,lag=1
master_replid:d53eac5645191c35cb69e82c33b882f08ba43e30
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3542
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3542
# CPU
used_cpu_sys:4.012400
used_cpu_user:2.732725
used_cpu_sys_children:0.030838
used_cpu_user_children:0.000000
5.2 从机测试
[root@localhost redis]# redis-cli
#如果上面命令找不到情况,相当于在/usr/bin/创建一个快捷键
ln -s /opt/redis/redis-5.0.3/src/redis-cli /usr/bin/redis-cli
#登录redis客户端输入密码
127.0.0.1:6379> auth 67890
OK
127.0.0.1:6379> info
#如果出现一下信息,从机连接成功
# Replication
role:slave
master_host:192.168.74.129
master_port:6379
#这说明主服务状态正在运行,这里如果为down,那可能是主机的防火墙的原因
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:3822
slave_priority:100
slave_read_only:0
connected_slaves:0
master_replid:d53eac5645191c35cb69e82c33b882f08ba43e30
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3822
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3822
redis的主从复制已经搭建完成
6. 哨兵 其实哨兵也就是一个进程,用来监视这个redis集群。这里遵从一主二从三哨兵模式。这里有三台主机192.168.74.129,192.168.74.130,192.168.74.131,可以在这上面分别启动一个哨兵进程。注意:哨兵进程和redis进程没有关系,可以在一台主机上面启动。三个哨兵监控这个redis集群,如果主服务器挂了,那么三个哨兵就从从服务器里选一台作为主服务器,选举机制一会在配置文件里面表明。
6.1 分别在三台主机上做一下操作
#把redis安装下的哨兵配置文件复制到/etc/redis/文件下
cp /opt/redis/redis-5.0.3/sentinel.conf /etc/redis/sentinel.conf
#编辑/etc/redis/sentinel.conf文件
vi /etc/redis/sentinel.conf
以下为编辑/etc/redis/sentinel.conf内容
protected-mode no #关闭保护模式
port 26379 #端口号
dir /tmp #目录
sentinel parallel-syncs mymaster 1 #故障迁移的时候,复制的从服务器的个数
sentinel failover-timeout mymaster 180000 #故障迁移所需时间,也就是主服务器挂了之后,选举新服务器的时间,如果这个时间还没能选举出来,那么就算选举失败
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 192.168.74.129 6379 2 #这个是指哨兵监视哪个redis集群,这里监视的是192.168.124.20,6379是端口号,最后的2表示,如果主服务器挂了,3个哨兵中有2个投票选新的服务器,那么就可以进行故障迁移,选出了新的服务器
sentinel down-after-milliseconds mymaster 3000 #sentinel认为“主线下线”的一个阀值。
7. 挨个启动哨兵模式,哨兵之间也是相互监控的
redis-server /etc/redis/sentinel.conf --sentinel &
8. 这是,哨兵模式就已经启动了,这时候就可以监视redis集群了,如果主服务器挂了之后就可进行故障转移了,现在模拟主服务器挂掉,在129上执行,手动挂掉主服务器,可以查看日志看到,+switch,选了一个新的主服务器
redis-cli shutdown
#如果上面命令报错一下错误信息,有密码需要登录
[root@localhost redis-5.0.3]# redis-cli shutdown
(error) NOAUTH Authentication required.
#按照下面步骤
[root@localhost redis-5.0.3]# redis-cli
127.0.0.1:6379> auth "123456"
OK
127.0.0.1:6379> shutdown
not connected>