redis 默认都是master
redis集群中,必须使用相同版本的redis,最好精确到小版本
一、开启redis服务,并使用redis客户端连接redis服务
1 redis-server 2 redis-cli
二、使用SLAVEOF 将角色转换为slave,并指向redis 主服务器的IP和对应的端口(redis 中不区分大小写)
SLAVEOF 192.168.1.4 6379
输入:SLAVEOF ,后面会自动显示灰色的host 和port表示对方的主机和端口
三、INFO查看
127.0.0.1:6379> info
# Replication role:slave master_host:192.168.1.4 master_port:6379 master_link_status:down
1、查看当前的redis中都有哪些key
127.0.0.1:6379> keys * 1) "a"
如果和master建立了连接,就会清空当前redis上的所有数据库,以master为准
四、配置连接密码
127.0.0.1:6379> CONFIG SET masterauth 12345678 OK
CONFIG SET masterauth 后面跟上的12345678就是master redis的密码
如果版本不一样,就会提示错误,我这里使用的是redis5.0.12
slave 模式下是不能写数据的,只能从master那边同步过来
五、永久有效,直接写到配置中
低版本redis 修改slaveof <masterip> <masterport>
高版本redis修改replicaof <masterip> <masterport>
replicaof 192.168.1.4 6379
2、修改master认证密码
# masterauth <master-password> 修改为: masterauth 123456
注意:在redis 5.0版本中IP地址和对应的端口,密码,两边的<>符号必须去掉,否则会导致连不上对应的端口,密码无效。
六、手动提升slave服务器为master服务器
1、在需要提升的从服务器上执行slaveof no one
127.0.0.1:6379> slaveof no one
2、info查看状态
# Replication role:master connected_slaves:0 master_replid:ec04796a5c4f1edf3a76cb6cb63e1fd3410fae85 master_replid2:b77f70eeb9f8b8837e146ad0bb0991eeeedbee0e master_repl_offset:120
这里就变成了master redis了这个时候之前作为从服务器的redis机器才能开始写东西
3、修改配置文件,注释下面两行
vim /apps/redis/etc/redis.conf
replicaof 192.168.1.4 6379 masterauth 123456
避免重启服务器后,还是做为slave角色去尝试连接master,版本不一样这里的replicaof 也可能是slaveof
七、实现从1服务器同步主1 服务器,从2服务器同步从1服务器,
主1 服务器IP地址:192.168.1.4
从1 服务器IP地址:192.168.1.6
从2 服务器IP地址:192.168.1.7
1.1、修改从2服务器的redis配置文件,使其同步主1 服务器的数据
vim /apps/redis/etc/redis.conf
replicaof 192.168.1.4 6379 masterauth 123456
1.2、手动杀掉进程,重启redis服务,并指定对应的配置文件
1 kill -9 `ps -ef |grep redis|grep 6379|tr -s " "|cut -d' ' -f2` 2 redis-server /apps/redis/etc/redis.conf
1.3、使用info查看信息
127.0.0.1:6379> info
显示如下则表示成功,自动开始同步主服务器上的数据
# Replication role:slave master_host:192.168.1.4 master_port:6379 master_link_status:up
2、修改从2 服务器实现同步从1 服务器数据
vim /apps/redis/etc/redis.conf
replicaof 192.168.1.6 6379 masterauth 123456
注意:此处从服务器必须设置密码,否则也会连接不上的
以上就完成了,主服务器同步数据至从服务器,从服务器在同步数据至从服务器
在有 slave 的”master”查看状态:
# Replication role:slave #当前服务器角色,slave表示从服务器,master表示主服务器 master_host:192.168.1.4 #主服务器IP地址 master_port:6379 #主服务器端口 master_link_status:up #当前连接状态, down表示没连接成功 master_last_io_seconds_ago:9 #最近一次与master 通信已经过去多少秒。
master_sync_in_progress:0 #是否正在与master 通信。 ,0表示没有,1表示正在同步 slave_repl_offset:5334 #当前同步的偏移量。 slave_priority:100 #slave 优先级,master 故障后值越小越优先同步。
slave_read_only:1 #slave 开启只读状态,表示slave服务器不能直接写数据 connected_slaves:1 #当前有几个节点连接进来
slave0:ip=192.168.1.6,port=6379,state=online,offset=4223,lag=1 #连接的slave的机器地址,端口,状态,偏移量
master_replid:b77f70eeb9f8b8837e146ad0bb0991eeeedbee0e #第一个masterID(当前的master ID)
master_replid2:0000000000000000000000000000000000000000 #第二个master ID(如果机器切换过master,之前的master ID值就会被移动到这)
报错解决办法:
1、(error) READONLY You can't write against a read only replica
因为连接的是从节点,从节点只有读的权限,没有写的权限
解决办法:
进入redis.conf配置文件,修改配置文件的slave-read-only为no,
那么从节点也就可以进行写的操作了
2、编译失败之后可以试着清理下残留试试看
make distclean
3、日志错误如下
1117:S 15 Jul 2021 10:09:59.963 * Connecting to MASTER 192.168.1.6:6379 1117:S 15 Jul 2021 10:09:59.963 * MASTER <-> REPLICA sync started 1117:S 15 Jul 2021 10:09:59.963 # Error condition on socket for SYNC: Connection refused
3.1、解决办法
排查redis主服务器监听的端口是否是0.0.0.0
vim /apps/redis/etc/redis.conf
bind 0.0.0.0
4、输入密码