Back to home

常见存储服务的数据同步

日常项目中经常涉及到mysql,redis,nfs,ldap等存储服务,这些服务可能都会面临需要对数据进行同步的问题。笔者用docker的方式集中进行了摸索验证,部分内容引自互联网,这儿把关键的步骤整理分享出来,供有需要的同学自取。
Mysql

1.获取mysql docker镜像(主从相同操作)

2. 启动mysql容器

3.允许远程访问和设置同步账(mysql_slave同样)
进入容器
进入数据库
退出mysql和容器,从外部尝试连接mysql
修改mysql的配置(容器内没有文本编辑器,需要把/etc/mysql/my.cnf拷贝至外部可访问的目录,从外部修改完成再覆盖回去,再重启容器)

4. 配置主主同步
master
slave
换个方向,再来一遍

5. 验证
在master上创建库、表,增改数据
在slave上能查到上面创建的库、表和数据
反之亦然
直接copy数据文件的方式只适用于MyISAM引擎和关闭服务的innodb引擎。
由于我们的数据一般都会适用innodb引擎,所以真正的热备需要使用其它方案:
如上面的主主同步,也可以借助其它工具,原理类似:
Xtrabackup
Redis
  • 思路一:两个redis做master-master部署(redis不支持)
  • 思路二:redis以master-slave部署,结合至少3个节点的sentinel(sentinel太多,麻烦)
  • 思路三:通过其它方式,同步redis数据文件*.rdb和*.aof(redis重启生效)

1. 获取reis docker镜像和准备配置文件

2. 启动redis容器
lsyncd
准实时同步磁盘文件(适用于数据文件copy就能用的存储服务,比如redis,nfs等)

1.获取lsyncd镜像

2.准备配置文件

3.在远端服务器上开启ssh无密码登录
把id_rsa私钥拷贝到执行lsyncd的机器上
测试能否无密码登录

4.启动容器

5.校验
在远端服务器查看 ls -al /var/storage/
近端服务器对文件做增删改,再次查看
ldap
ldap协议,openldap是ldap的一个开源实现

1.获取openldap镜像

2.主主复制
为了测试方便,用create.sh一个脚本搞定

3. 验证
为了方便,这儿使用了phpldapadmin镜像,通过图形界面操作完成(登陆的账号:cn=admin,dc=example,dc=org,密码:admin)