redis主从复制 搭建
主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制 Master(主节点)以写为主,Slave(从节点)以读为主
1、主从复制能解决什么问题:
单点故障、高并发redis压力大, 读写分离,性能扩展、容灾快速恢复
2、 主从复制的原理
当从服务器连接上主服务器之后,从服务器向主服务器发送进行数据同步的消息。 主服务器接收到从服务器发送过来的同步消息,会把主服务器的数据进行持久化,会把数据存放到rdb文件中,之后把rdb文件发送给从服务器,从服务器拿到rdb文件进行读取 每次主服务器进行写操作之后,会和从服务器进行数据同步。
3、搭建流程(一主多从)
1、创建三个redis-server服务实例
[root@localhost utils]# ./install_server.sh 6379/6380/6381/..
./install_server.sh 指定一个端口号为6379 作为主节点
./install_server.sh 指定一个端口号为6380 从节点
./install_server.sh 指定一个端口号为6381 从节点
2、 修改主机配置文件
基本不需要修改
[root@bogon src]# vim /etc/redis/6379.conf
1)bind <ip-address>
2)port <port-number>
3)daemonize yes
4)pidfile /var/run/redis/redis-server-6379.pid
5)logfile /var/log/redis/redis-server-6379.log
6)appendonly yes
其中 <ip-address> 是服务器 IP 地址,<port-number> 是 Redis 监听端口。
3、 修改从机配置文件
[root@bogon src]# vim /etc/redis/6380.conf
[root@bogon src]# vim /etc/redis/6381.conf
1)bind <ip-address>
2)port <port-number>
3)daemonize yes
4)dbfilename 修改成自己的路径
5)pidfile /var/run/redis/redis-server.pid 修改成自己的路径
6)logfile /var/log/redis/redis-server.log 修改成自己的路径
7)slaveof <master-ip> <master-port>
8)logfile 修改成自己的路径
9)将appendonly 设置为 no
其中 <ip-address> 是服务器 IP 地址
<port-number> 是 Redis 监听端口
<master-ip> 和 <master-port> 是 Redis 主服务器的 IP 地址和端口。
4、启动三个实例
[root@bogon utils]# systemctl start redis_6379.service
[root@bogon utils]# systemctl start redis_6380.service
[root@bogon utils]# systemctl start redis_6381.service
确认 Redis 服务器已成功启动:
[root@bogon utils]# systemctl status redis_6379.service
[root@bogon utils]# systemctl status redis_6380.service
[root@bogon utils]# systemctl status redis_6381.service
5、启动三个客户端
[root@bogon src]# cd /redis/redis-6.0.8/src/
[root@bogon src]# ./redis-cli -p 6379
127.0.0.1:6379>
[root@bogon src]# cd /redis/redis-6.0.8/src/
[root@bogon src]# ./redis-cli -p 6380
127.0.0.1:6380>
[root@bogon src]# cd /redis/redis-6.0.8/src/
[root@bogon src]# ./redis-cli -p 6381
127.0.0.1:6381>
6、使用命令的方式设置主从节点
在从节点的客户端中执行如下命令即可设置当前节点为从节点,连接主节点的地址和端口号:
[root@bogon ~]# cd /redis/redis-6.0.8/src/
[root@bogon src]# ./redis-cli -p 6381
127.0.0.1:6381> REPLICAOF 127.0.0.1 6379 //当前从节点连接主节点
OK Already connected to specified master
127.0.0.1:6381>
在从节点的客户端中执行如下命令即可设置当前节点为从节点,连接主节点的地址和端口号:
REPLICAOF 127.0.0.1 6379 或者 slaveof 127.0.0.1 6379
7、如果从节点突然挂掉了,可以重新恢复
redis-server /etc/redis/6380.conf REPLICAOF 127.0.0.1 6379
8、如果主节点突然挂掉了,可以将从节点提升为主节点
在从节点的客户端连接中执行如下命令: REPLICAOF no one 或者slaveof no one 此时从节点变为主节点,其他从节点需要重新连接到新的主节点
9、查看当前redis实例的状态
在客户端中执行如下命令: info replication
9.1主从关系查看
[root@bogon src]# ./redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master // 主节点
connected_slaves:2 //有两个从节点
slave0:ip=127.0.0.1,port=6380,state=online,offset=28,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=28,lag=0
master_replid:20b476af41e6dd90ddc5bd8f8b3165a25d8ce0fa
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28
10、测试
主节点6379:
从6380和6381:从节点不能写只能读