启动源redis
连接查看信息
[root@localhost bin]# redis-cli 连接客户端
127.0.0.1:6379> info replication
NOAUTH Authentication required.
127.0.0.1:6379> auth 123456 #认证
OK
127.0.0.1:6379> info replication 查看redis的信息
# Replication
role:master #当前位主节点
connected_slaves:0 #没有从节点
master_replid:32128903c20911483fef0c990175fc21c4139fac
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
127.0.0.1:6379> config set requirepass "" # 设置密码为空,老麻烦了,老需要认证
OK
127.0.0.1:6379>
打开四个窗口,从左到右称为A B C D,上面的操作是A完成的
全部切换到 /usr/local/bin 目录下
A,关闭redis,因为刚才连接查看信息,后还在连接中,执行shutdown就可以了
A,查看服务已经关闭
A进入到redisConfig目录下,拷贝三份配置文件,拷贝redis.conf为 redis-6379.conf redis-6380.conf redis-6381.conf,因为默认的端口是6379,我是端口号直接往上加的,不用原来的配置文件,防止修改错误
A,修改redis-6379.conf redis-6380.conf redis-6381.conf三个配置文件
vi redis-6379.conf
logfile "" 修改为 logfile "6379.log"
dbfilename dump.rdb 修改为 dbfilename dump-6379.rdb
vi redis-6380.conf
port 6379 修改为 port 6380
pidfile /var/run/redis_6379.pid 修改为 pidfile /var/run/redis_6380.pid
logfile "" 修改为 logfile "6380.log"
dbfilename dump.rdb 修改为 dbfilename dump-6380.rdb
vi redis-6381.conf
port 6379 修改为 port 638
pidfile /var/run/redis_6379.pid 修改为 pidfile /var/run/redis_6381.pid
logfile "" 修改为 logfile "6381.log"
dbfilename dump.rdb 修改为 dbfilename dump-6381.rdb
A运行redis-6379.conf
B运行redis-6380.conf
C 运行redis-6381.conf
D 执行查看服务
默认情况下,每台服务器都是主节点
只需要配置从机就可以了
规划:6379为主,80 81为从
A B C 都连接自己的redis进入cli界面
A:
B:
C:
只需要配置从节点就可以了,主节点不用动
B:执行设置主节点
命令:slaveof ip port
A:查看自己节点信息
C:执行设置主节点
A:查看自己的节点状态
一主二从搭建完成
# replicaof <masterip> <masterport> 删除前面的井号, 然后 后面的两个标签 分别是写 ip 和 端口的
# masterauth <master-password> 如果主节点有密码,删除前面的井号,后面的标签 写主节点的密码就可以了
刚才的命令也是在配置replicaof获取一下就看见了
B 获取从机配置文件中的replicaof
可以看到 就是IP 和端口
测试:
主机断开后,丛机依旧能获取到数据,但是这个时候没有了写操作,并且丛机不能自动提升为主机
主机重启成功后,从节点会自动连接到主节点,这个时候丛机依旧可以从主节点同步
如果丛机是采用命令行配置的主从,那么丛机宕机后重启就会自动变回原来的主节点,需要重新设置为从节点,并且在第一次连接主节点的时候,做全量数据复制,之后做增量复制
这种是默认的一主二从
6379为主节点,他的子节点是6380,6380的子节点是6381,所以他是从节点也是主节点,当然在6379还活着的时候他是从节点,如果6379宕机了,那么6380可以通过 slaveof no one使自己变成主节点,当然是手动的,但是层层链路有个问题,那就是中间节点宕机了,那么需要手动将他的下级节点指向他的上级节点,也就是说将6381指向6379,来完善链路
这里就可以有我想到了一个解决方案:
因为这个层层链路本省就是一个链表我们可以在,内存中维护这个链表,一旦中间的节点宕机,我们将这个链拿出来,等待重启之后添加到最后面,并指定他的主节点为最后一个层节点
类似于 1->2->3->4->5
在这个时候3宕机了,那么4直接指定自己的父节点为2
等3重启之后,直接指定自己的父节点为5就变成了
1->2->4->5->3
当然在工作中这些都是不用的[那我在学什么[手动滑稽]]
通过执行slaveof命令设置slaveof选项,当写操作导致数据变化时会自动将数据同步给从数据库,一个主库可以有多个从库,而一个从库只能有一个主库。
作者:彼岸舞
时间:2021\05\05
内容关于:Redis
本文属于作者原创,未经允许,禁止转发