riserdb存储介绍(二)主从复制

汪雨田,现就职于暴风影音,负责后端的研发工作,平时专注于nosql,分布式的研究,热爱传统文化以及中医学, 热爱工作在代码的田间地头。

  1. 主从复制
    对于一个存储系统来说,数据存在多个副本的功能应该是必须提供的,数据的安全性,扩展性,读写分离都是有好处。

  2. riser主从复制简述
    在2015年6月份的时候我就已经开发完成了riser的主从主体功能,但是没经过大量的数据实践和验证,还不成熟还算不上真正的产品,都已经过去一年时间了,由于公司有个业务需要支持主从复制来跨机房的多台服务器读数据,所以我硬着头皮开始琢磨着riser的主从功能,大量数据的测试后,bug一个接一个的出现,经过几个星期的主从复制大量数据测试和bug修复,现在终于稳定了,各种内存泄漏等问题,搞得焦头乱耳,在这首先得谢谢婷婷同学一起帮忙修复bug。现已经在公司的大量数据下,主从复制稳定运行1个多月了。

  3. riser主从复制配置
    riser主从复制配置比较简单,只用在riser的从服务器端的配置文件中,增加2行配置项:
    slaveof_ip=127.0.0.1 //主服务器的IP地址
    slaveof_port=3555 //主服务器的端口号
    slave_sync_all=true //true:同步所有数据,false:只同步现在的增量
    master_auth=xxxxxx //主从同步认证

  4. 复制过程
    1). slave端启动时候,检查配置文件的slaveof_ip和slaveof_port配置项,如果二项目已经打开,slave会启动一个复制线程,复制线程会主动connect到master服务器;

    2). 如链接成功,slave会发送自己的ID号(在安装时生成一个唯一ID)到master服务,master会检查该slave认证情况,和注册情况,如没注册,会给slave启动一个数据队列。如果slave_sync_all=true,master会加载所有的数据到该slave的队列中,如果一切就绪,开始从队列中取得数据,传给slave端;

    3). 在传递每项数据时,会给该数据项打上正在同步给slave的标记,一旦同步到slave后,slave会发一条ack消息,确定成功或失败情况,如成功,会把同步的数据从队列中清除掉;

    4). 经过(3)数据的不断传递后,数据会同步完成,完成后,slave是不知道已经完成,这时候slave会主动向master要数据,master发现没数据,为了减少网络开销,master暂时hold住slave的链接,一旦有了数据,master会把数据发送给从;

  5. 增量同步
    master会记录每个slave的同步时间和对应slave的队列写入时间,一旦master有重启,只要slave的同步时间和对应slave的队列写入时间一致,就不会进行全量同步;如果是slave服务重启,增量队列还是存在的,所以slave一旦启动还会是从增量队列中取得数据;

  6. 查看同步情况
    在master的命令行中用 info rep命令查看
    同步
    其中参数含义:
    name:slave的name,唯一标识,
    ip: slave的IP地址,
    start:slave开始链接时间
    last:最后一次同步时间
    status:当前同步状态
    need_sync: 需要同步数量

  7. 清除队列的命令

    如果一个slave不需要,这个时候master还保留着该slave的队列,为了不浪费内存,需要把该slave从master中摘除掉,需要用到: slave name clear
    如: slave BFG-OSER-2387-1471315241_6385 clear

  8. master/slave同步原理

    为了不影响数据的写入和读取的性能,master会启动一个单独线程来处理slave的同步复制,一旦有slave有请求,主线程会把slave的该请求转交给同步复制线程,每次同步实际的命令为mset,相当于可以同步多条;

    slave端也会接受完成,回复ok。slave端启动的复制线程会每隔1秒钟检查当前slave同步的状态,状态包括: init:初始化,auth:认证阶段,wait:等待master回复,transmit:数据传输。

  9. 总结
    代码还有些乱,需要重构,底层库leveldb还存在一些不足的地方,需要好的库来替换,发现rockdb有存在环境兼容问题。需要进一步研究。这次主要是总结一下我独特设计的主从同步的实现方式,和redis主从同步差别很大。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL主从复制是一种常见的据库复制技,用于实现据的冗余备份和读写分离。在主从复制中,一个主据库(Master)负责处理写操作,而一个或多个从据库(Slave)则负责接收主据库的变更并进行复制。 以下是PostgreSQL主从复制的基本原理和步骤: 1. 配置主据库:在主据库上,需要修改postgresql.conf文件和pg_hba.conf文件。其中,postgresql.conf文件中需要设置wal_level为replica,max_wal_senders为允许的最大连接,以及设置archive_mode为on。pg_hba.conf文件中需要添加允许从据库连接的配置。 2. 创建复制用户:在主据库上,创建一个用于复制的用户,并赋予REPLICATION角色。 3. 备份主据库:在主据库上执行pg_basebackup命令,将主据库的据目录备份到从据库。 4. 配置从据库:在从据库上,同样需要修改postgresql.conf文件和pg_hba.conf文件。其中,postgresql.conf文件中需要设置standby_mode为on,并指定recovery.conf文件的位置。pg_hba.conf文件中需要添加允许主据库连接的配置。 5. 创建recovery.conf文件:在从据库上创建recovery.conf文件,并设置primary_conninfo参为主据库的连接信息。 6. 启动从据库:在从据库上启动PostgreSQL服务,它将自动连接到主据库并开始复制据。 7. 监控复制状态:可以使用pg_stat_replication视图来监控主从复制的状态,包括复制延迟和连接状态等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值