Redis主备搭建且自动切换

系统版本:centos7.9
redis版本:6.2.5
主机:192.168.101.132
备机:192.168.101.133

1、主机配置

1.1、关闭防火墙和selinux

firewall-cmd --state //查看防火墙状态
systemctl stop firewalld.service //关闭防火墙
systemctl disable firewalld.service //设置永久关闭防火墙

[root@node1 ~]# vim /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing   				//将enforcing改为disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

1.2、安装gcc

yum -y install gcc

1.3、安装redis

-rw-r--r--. 1 root root 2465302 Sep  9 11:25 redis-6.2.5.tar.gz

[root@node1 ~]# tar -zxvf redis-6.2.5.tar.gz 
[root@node1 ~]# cd redis-6.2.5
[root@node1 redis-6.2.5]# make -j 4 && make install
[root@node1 redis-6.2.5]# mkdir -p /usr/local/redis/etc //创建配置文件目录
[root@node1 redis-6.2.5]# mkdir -p /usr/local/redis/log //创建日志文件目录
//将需要的配置文件拷贝到创建的目录下
[root@node1 redis-6.2.5]# pwd
/root/redis-6.2.5
[root@node1 redis-6.2.5]# cp /root/redis-6.2.5/redis.conf /usr/local/redis/etc
[root@node1 redis-6.2.5]# cp /root/redis-6.2.5/sentinel.conf /usr/local/redis/etc

1.4、修改配置文件

[root@node1 redis-6.2.5]# vim /usr/local/redis/etc/redis.conf
//定位到这两处
bind 0.0.0.0
daemonize yes
[root@node1 redis-6.2.5]# vim /usr/local/redis/etc/sentinel.conf 
//定位这三处
daemonize yes
logfile "/usr/local/redis/log/sentinel.log" //存放到创建好的日志目录下
sentinel monitor mymaster 127.0.0.1 6379 1 //有1台备机,改成1
[root@node1 redis-6.2.5]# grep -Ev ^# /usr/local/redis/etc/sentinel.conf | grep -v ^$ > sentinel.conf //将注释和空白行删除

1.5、启动服务

[root@node1 redis-6.2.5]# redis-server /usr/local/redis/etc/redis.conf
[root@node1 redis-6.2.5]# redis-sentinel /usr/local/redis/etc/sentinel.conf

2、备机配置

2.1、关闭防火墙和selinux

firewall-cmd --state //查看防火墙状态
systemctl stop firewalld.service //关闭防火墙
systemctl disable firewalld.service //设置永久关闭防火墙
[root@node2 ~]# vim /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing   				//将enforcing改为disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

2.2、安装gcc

yum -y install gcc

2.3、安装redis

-rw-r--r--. 1 root root 2465302 Sep  9 11:25 redis-6.2.5.tar.gz

[root@node2 ~]# tar -zxvf redis-6.2.5.tar.gz 
[root@node2 ~]# cd redis-6.2.5
[root@node2 redis-6.2.5]# make -j 4 && make install
[root@node2 redis-6.2.5]# mkdir -p /usr/local/redis/etc //创建配置文件目录
//将需要的配置文件拷贝到创建的目录下
[root@node2 redis-6.2.5]# pwd
/root/redis-6.2.5
[root@node2 redis-6.2.5]# cp /root/redis-6.2.5/redis.conf /usr/local/redis/etc

2.4、修改配置文件

[root@node2 redis-6.2.5]# vim /usr/local/redis/etc/redis.conf
//定位到这两处
bind 0.0.0.0
daemonize yes
//指定主服务器的IP地址和端口
slaveof 192.168.101.132 6379

2.5、启动服务

[root@node2 redis-6.2.5]# redis-server /usr/local/redis/etc/redis.conf

3、主机信息

[root@node1 redis-6.2.5]# redis-cli -c -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.101.133,port=6379,state=online,offset=1115,lag=0
master_failover_state:no-failover
master_replid:fa1a60e4b2ae6707c334a16ac7156187b02aaa57
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1115
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1115
127.0.0.1:6379>

4、备机信息

[root@node2 redis-6.2.5]# redis-cli -c -p 6379
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.101.132
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:2340
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:fa1a60e4b2ae6707c334a16ac7156187b02aaa57
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2340
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2340
127.0.0.1:6379>

5、切换测试

//模仿主机宕机
[root@node1 redis-6.2.5]# redis-cli -c -p 6379 shutdown
//查看日志输出信息
[root@node1 redis-6.2.5]# tail -f /usr/local/redis/log/sentinel.log
6058:X 24 Sep 2021 14:02:12.383 # -odown master mymaster 127.0.0.1 6379
6186:X 24 Sep 2021 14:02:16.867 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
6186:X 24 Sep 2021 14:02:16.867 # Redis version=6.2.5, bits=64, commit=00000000, modified=0, pid=6186, just started
6186:X 24 Sep 2021 14:02:16.867 # Configuration loaded
6186:X 24 Sep 2021 14:02:16.909 * Increased maximum number of open files to 10032 (it was originally set to 1024).
6186:X 24 Sep 2021 14:02:16.909 * monotonic clock: POSIX clock_gettime
6186:X 24 Sep 2021 14:02:16.909 # Warning: Could not create server TCP listening socket *:26379: bind: Address already in use
6186:X 24 Sep 2021 14:02:16.910 # Failed listening on port 26379 (TCP), aborting.
6058:X 24 Sep 2021 14:04:52.097 * +reboot slave 192.168.101.133:6379 192.168.101.133 6379 @ mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:05:02.122 * +reboot slave 192.168.101.133:6379 192.168.101.133 6379 @ mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:06:19.083 # +sdown master mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:06:19.083 # +odown master mymaster 127.0.0.1 6379 #quorum 1/1
6058:X 24 Sep 2021 14:06:19.083 # +new-epoch 2
6058:X 24 Sep 2021 14:06:19.083 # +try-failover master mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:06:19.085 # +vote-for-leader 77d8bdf8657529ac76f71f91884bd10dd3417c3e 2
6058:X 24 Sep 2021 14:06:19.085 # +elected-leader master mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:06:19.085 # +failover-state-select-slave master mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:06:19.153 # +selected-slave slave 192.168.101.133:6379 192.168.101.133 6379 @ mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:06:19.153 * +failover-state-send-slaveof-noone slave 192.168.101.133:6379 192.168.101.133 6379 @ mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:06:19.237 * +failover-state-wait-promotion slave 192.168.101.133:6379 192.168.101.133 6379 @ mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:06:19.365 # +promoted-slave slave 192.168.101.133:6379 192.168.101.133 6379 @ mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:06:19.365 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:06:19.435 # +failover-end master mymaster 127.0.0.1 6379
6058:X 24 Sep 2021 14:06:19.436 # +switch-master mymaster 127.0.0.1 6379 192.168.101.133 6379
6058:X 24 Sep 2021 14:06:19.436 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 192.168.101.133 6379

//这里就可以看到备机已经变成主机了
[root@node2 redis-6.2.5]# redis-cli -c -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:752feffa388a45b10f64c6574bc2c031a6087b7d
master_replid2:eeab5732868470be4ad0e1e67a47977c735ba729
master_repl_offset:15164
second_repl_offset:3832
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:157
repl_backlog_histlen:15008
127.0.0.1:6379> 	

//重新启动原来的主机,就可以看机主机变成了备机
[root@node1 redis-6.2.5]# redis-server /usr/local/redis/etc/redis.conf 
[root@node1 redis-6.2.5]# redis-cli -c -p 6379
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.101.133
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:80016
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:752feffa388a45b10f64c6574bc2c031a6087b7d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:80016
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:79545
repl_backlog_histlen:472
127.0.0.1:6379> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值