环境配置
只配置从库,不用配置主库!
127.0.0.1:6379> info replication #查看当前库的信息
# Replication
role:master #角色 master
connected_slaves:0 #没有从机
master_replid:3eb9dce4127a81ab2991e3c26df4f5bd4efec166
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
复制3个配置文件,然后修改对应的信息
[root@root kconfig]# cp redis.conf redis80.conf
[root@root kconfig]# cp redis.conf redis81.conf
[root@root kconfig]# ls
redis79.conf redis80.conf redis81.conf redis.conf
[root@root kconfig]# vim redis79.conf
[root@root kconfig]# vim redis80.conf
[root@root kconfig]# vim redis81.conf
1、端口号
2、pid名字
3.log文件名
4、dump.rdp名字
修改完毕之后,启动我们的3个redis服务器,可以通过进程信息查看!
[root@root bin]# redis-server kconfig/redis79.conf
[root@root bin]# ls
6379.log redis-benchmark redis-cli
dump.rdb redis-check-aof redis-sentinel
kconfig redis-check-rdb redis-server
[root@root bin]# redis-server kconfig/redis80.conf
[root@root bin]# redis-server kconfig/redis81.conf
[root@root bin]# ps -ef|grep redis
root 8549 1 0 18:32 ? 00:00:00 redis-server 127.0.0.1:6379
root 8556 1 0 18:33 ? 00:00:00 redis-server 127.0.0.1:6380
root 8561 1 0 18:33 ? 00:00:00 redis-server 127.0.0.1:6381
root 8567 7821 0 18:33 pts/0 00:00:00 grep --color=auto redis
一主(79)二从(80,81)
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 #SLAVEOF host 6379 找谁当自己的老大
OK
127.0.0.1:6380> info replication
# Replication
role:slave #当前角色是从机
master_host:127.0.0.1 #可以看到主机的信息
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:42
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:e9c264360719d9c6a2c5cf12e56992c1dbdab2b5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42
#在主机中查看!
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1 #从机个数
slave0:ip=127.0.0.1,port=6380,state=online,offset=98,lag=0 #从机信息
master_replid:e9c264360719d9c6a2c5cf12e56992c1dbdab2b5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:98
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:98
细节:
主机可以写,从机不能写只能读!主机中的所有信息和数据,都会被从机保存!
从机只能读取内容!
测试:主机断开连接,从机依旧连接到主机,但是没有写操作,这个时候,主机如果回来了,从机依旧可以直接获取到主机的信息!
如果是使用命令行,来配置的主从,这个时候如果重启了,就会变回主机!只要变为从机。立马就会从主机中获取值!
复制原理:
Slave(从机)启动成功连接到master(主机)后会发送一个syn同步命令
Master接到命令。启动后台的存盘进程,同时手机所有接受到的用于修改数据集命令,在后台进程完毕之后,master将传送整个数据文件到slave,并完成一次同步。
全量复制:而slave服务在接受到数据库文件数据后,将期存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步但是只要重新连接master,一次完全同步(全量复制)将西东执行!我们的数据一定可以在从机中看到!
层层链路:
上一个M链路下一个是!
这时候也可以完成我们的主从复制!
如果主机关闭,第二个从机可以出来当主机,我们可以使用SLAVEOF no one让自己变成主机!其他的节点就可以手动连接到最新的这个主节点。
127.0.0.1:6380> SLAVEOF no one
OK
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=3046,lag=1
master_replid:e7050720d2d65675f5dba40913aee2f61dfaba4b
master_replid2:025477c179f1084d0538d319b6e2d169359ae554
master_repl_offset:3046
second_repl_offset:3033
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3046
127.0.0.1:6380>