• 欢迎访问DBA的辛酸事儿,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 欢迎大家关注博主公众号:DBA的辛酸事儿
  • 博文中若有错误的地方,请大家指正,大家的指正是我前进的动力

Redis多实例及主从环境搭建

NoSQL数据库 SEian.G 6年前 (2019-03-13) 3464次浏览 已收录 0个评论
文章目录[隐藏]

Redis系列文章请参考:Redis系列文章

之前的文章《Redis介绍及CentOS 7安装redis 4.0详细步骤》介绍了Redis4.0单实例的安装,在实际的生产中,单实例存在的非常少,所以下面我们就在上述的基础上,部署Redis多实例及主从复制环境;

一、redis主从复制原理

和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。下图为级联结构:
Redis多实例及主从环境搭建

1、全量同步

Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:

1)从服务器连接主服务器,发送SYNC命令;

2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;

3)主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;

4)从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;

5)主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;

6)从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;
Redis多实例及主从环境搭建

完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求。

2、增量同步

Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。

增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

备注:redis2.8之前不支持增量,到2.8之后就支持增量了!

3、Redis主从同步策略

主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。

4、注意事项

如果多个Slave断线了,需要重启的时候,因为只要Slave启动,就会发送sync请求和主机全量同步,当多个同时出现的时候,可能会导致Master IO剧增宕机。

二、Redis单主机多实例部署

前提是之前已经安装了一个单实例的redis,详细可参考:《Redis介绍及CentOS 7安装redis 4.0详细步骤》

1、复制两份redis配置文件

[root@VM_2_13_centos ~]# cp /etc/redis/redis.conf /etc/redis/redis6311.conf  
[root@VM_2_13_centos ~]# cp /etc/redis/redis.conf /etc/redis/redis6322.conf   

[root@VM_2_13_centos ~]# ll /etc/redis/
total 192
-rw-r--r-- 1 root root 58976 May 29 20:37 redis6311.conf
-rw-r--r-- 1 root root 58976 May 29 20:37 redis6322.conf
-rw-r--r-- 1 root root 58976 May 29 20:33 redis.conf

2、修改配置文件redis6311.conf和redis6322.conf

[root@VM_2_13_centos ~]# vim /etc/redis/redis6311.conf 
# 监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。
port 6311
# 默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。
daemonize yes
# 当redis作为守护进程运行的时候,它会把 pid 默认写到 /var/run/redis.pid 文件里面
# 但是你可以在这里自己制定它的文件位置。
pidfile /var/run/redis/redis_6311.pid
# 指定日志文件的位置,不同的实例设置不同的日志文件,便于问题定位
logfile /var/log/redis/redis_6311.log
# 设置dump的文件名称,不同的实例设置不同的db文件,便于问题定位
dbfilename dump_6311.rdb
# 工作目录 # 例如上面的 dbfilename 只指定了文件名,但是它会写入到这个目录下。 # 这个配置项一定是个目录,而不能是文件名。
# 这个配置项默认值为“./”,最好改相对路径为绝对路径 
# 如果为相对路径,redis在哪里启动,dump.rdb文件就会产生在启动的目录,这也就是有些人重启redis后key值消失的原因
dir /var/lib/redis/6311
#配置密码
requirepass qXXXXXXXX

3、启动端口为6311的redis

[root@VM_2_13_centos ~]# redis-server /etc/redis/redis6311.conf 
[root@VM_2_13_centos ~]# 
[root@VM_2_13_centos ~]# ps -ef | grep redis                    
root      6938     1  0 21:14 ?        00:00:00 redis-server 127.0.0.1:6379
root      7001     1  0 21:15 ?        00:00:00 redis-server 127.0.0.1:6311
root      7009  1905  0 21:15 pts/1    00:00:00 grep --color=auto redis

4、客户端登录

[root@VM_2_13_centos ~]# redis-cli -p 6311
127.0.0.1:6311> 
127.0.0.1:6311> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6311> 
127.0.0.1:6311> auth qcloud@2018
OK
127.0.0.1:6311> keys *
(empty list or set)

按照上面的方式配置6322端口的redis,并启动

[root@VM_2_13_centos ~]# redis-server /etc/redis/redis6322.conf  
[root@VM_2_13_centos ~]# ps -ef | grep redis
root      6938     1  0 21:14 ?        00:00:00 redis-server 127.0.0.1:6379
root      7001     1  0 21:15 ?        00:00:00 redis-server 127.0.0.1:6311
root      7264     1  0 21:20 ?        00:00:00 redis-server 127.0.0.1:6322
root      7279  1905  0 21:20 pts/1    00:00:00 grep --color=auto redis

三、redis主从环境搭建

1、修改6311和6322的配置文件,主redis为6379端口的redis

[root@VM_2_13_centos ~]# vim /etc/redis/redis6311.conf 
slaveof localhost 6379
# masterauth 
masterauth qXXXXXXXX

注意:如果主实例配置了密码,那么从实例必须配置masterauth,否则同步不成功

2、查看配置是否成功

主库:

127.0.0.1:6379> info Replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6311,state=online,offset=179,lag=0
slave1:ip=127.0.0.1,port=6322,state=online,offset=179,lag=0
master_replid:d2450e24238b6612630368c6408fd4a9b098da16
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:179
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:179

从库:

127.0.0.1:6311> info Replication
# Replication
role:slave
master_host:localhost
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:277
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:d2450e24238b6612630368c6408fd4a9b098da16
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:277
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:277

127.0.0.1:6322> info Replication
# Replication
role:slave
master_host:localhost
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:319
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:d2450e24238b6612630368c6408fd4a9b098da16
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:319
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:319

3、主从同步测试:
主库:

127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> 
127.0.0.1:6379> set age 22
OK

从库:

[root@VM_2_13_centos ~]# redis-cli -p 6311
127.0.0.1:6311> auth qXXXXXXX
OK
127.0.0.1:6311> keys *
1) "name"
127.0.0.1:6311> get age
"22"

[root@VM_2_13_centos ~]# redis-cli -p 6322
127.0.0.1:6322> auth qXXXXXXXX
OK
127.0.0.1:6322> keys *
1) "name"
127.0.0.1:6322> get age
"22"

至此,redis多实例以及主从环境搭建完成了;

Redis多实例及主从环境搭建


如果您觉得本站对你有帮助,那么可以收藏和推荐本站,帮助本站更好地发展,在此谢过各位网友的支持。
转载请注明原文链接:Redis多实例及主从环境搭建
喜欢 (6)
SEian.G
关于作者:
用心去记录工作,用心去感受生活,用心去学着成长;座右铭:苦练七十二变,笑对八十一难
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址