Linux安装MongoDB双机热备份(主从复制)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux安装MongoDB双机热备份(主从复制)相关的知识,希望对你有一定的参考价值。
参考技术A 主从复制作用:数据备份、读写分离双机热备份:部署两个节点的MongoDB服务,配置一主一从,主节点添加数据,将自动备份到从节点上面,保证主机宕机后数据不丢失,同时可以继续提供数据读取服务(主服务挂掉,从服务将无法在进行写入数据,只能提供数据读取服务)
一主多从:部署多个节点的MongoDB服务,配置一主多从,数据也会自动备份到所有从节点上面,保证主机宕机后数据不丢失,同时可以根据从节点的优先级进行选取新的主节点,继续提供读写服务(主从关系跟服务设置的优先级有直接关系 优先级参数:priority 数字越大优先级越高)
使用上面的方式,在不同服务器上安装并启动MongoDB服务
将启动时使用的配置文件mongodb.conf中添加下面的副文本集名称配置,将权限控制参数改为false(auth=false),然后将服务进行重新启动即可(testrs是自定义的副本集名称)
#使用此设置来配置复制副本集。指定一个副本集名称作为参数,所有主机都必须有相同的名称作为同一个副本集
replSet=testrs
然后启动每个服务的客户端查看当前节点为主节点还是从节点;
1). 如果服务部署在不同服务器上,直接启动/bin目录下的mongo即可 命令:./ mongo
2). 如果服务部署在同一台服务器上,使用不同端口及配置文件进行启动的,启动客户端使用该命令 命令:./mongo 127.0.0.1:27018/
经过上面的一系列操作后,主从配置就完成了,接下来可以进行数据同步测试
第一步:在主库上面切换到admin,然后进行添加数据(命令:db.testdb1.insert(["name":"zs"]))
在从库上查询该数据(命令:db.testdb1.find(name:"zs")),会出现下面如图的错误,因为从库没有查询数据权限,所以需要设置查询权限
设置从库查询权限,使用命令:rs.secondaryOk()
然后在使用查询命令进行查询(命令:db.testdb1.find(name:"zs"))就会看到如下图的查询结果:
如上图所示,数据已经同步到从库上面了,这样双机热备份就已经实现了,上面的情况不包含权限控制
上面的情况已经完成了MongoDB的主从复制功能,但是我们把权限没有开放,启动时使用的配置中auth配置的值为false,说明没有添加权限,接下来就开放一下权限配置;
首先需要主从之间通信的一个keyFile文件,根据官网提供的说明,这个keyfile是可以任意内容的,只要保证所有集群中的机器都拥有同样的文件即可。
我这里将keyFile文件放到了MongoDB的bin目录下了,使用openssl rand -base64 1024 > /usr/local/mongodb-master/bin/mongodb.key 命令生成;
然后将mongodb.key文件复制到每台从服务上面,在每台服务的启动文件上添加 keyFile=/usr/local/mongodb-master/keyfile/mongodb.key 配置项 ,然后将auth属性值改为true,这样就完成了权限配置
重启主从两个节点,这样主机添加的数据,就会同步到从机上面了!!!
添加或删除从节点参考文章:
https://blog.csdn.net/weixin_44839444/article/details/105666163
Mysql/MariaDB配置主从复制备份
数据库安装配置好后,如果你的web项目对数据要求比较严谨,那就需要对数据进行备份。一般项目我们采用主从双机热备份机制来保证数据可靠性,当然也可以采用主主互备高可用机制。本文先介绍Mysql/MariaDB主从双机热备份的配置。
准备
1、主数据库使用CentOS7.2操作系统,MariaDB版本是10.2.12,IP是192.168.11.34。
2、从数据库也使用CentOS7.2操作系统,MariaDB版本也是10.2.12,IP是192.168.11.31。
两台机器环境都一样,保证可以互通,如果开启防火墙的一定记得将MariaDB的3306端口允许开放,如果还不会安装MariaDB的同学可以参考本站文章:《Linux下使用二进制格式安装MariaDB》和《CentOS7下源码编译安装MariaDB 10.2》。
配置主数据库Master
1、设置数据库配置文件
在主服务器(192.168.11.34)上打开MariaDB的配置文件:/etc/my.cnf,找到如下配置项,如果没有请自行添加。
server-id = 1log-bin = mysql-bin
server-id = 1
是指数据库的唯一ID号,默认从1开始。
log-bin = mysql-bin
启用二进制日志,备份复制其实就是根据日志来的。
2、重启MariaDB数据库
第1步设置好,需要重启数据库,输入命令/etc/init.d/mariadb restart
:
[root@localhost ~]# /etc/init.d/mariadb restartRestarting mariadb (via systemctl): [ 确定 ]
或者直接输入:
systemctl restart mariadb
3、建立账户并授权从数据库访问
进入MariaDB命令行模式下,输入:
grant replication slave on *.* to 'slave'@'%' identified by '123456x';
以上命令在主数据库中创建了一个专门用于数据备份的账号,账号名为slave,密码为123456x,允许从数据库访问。
如果只允许从数据库连接,可以将以上命令中的“%”改成从数据库的IP即可,参照:《MariaDB/MySQL安全配置以及账户管理》。
奖励好账户后,重载权限使之立即生效。
flush privileges;
4、检查主数据库的master状态
在MariaDB的命令行中输入show master status;
,会列出当前主数据库用户同步复制的关键参数:
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000004 | 2259 | | |+------------------+----------+--------------+------------------+1 row in set (0.00 sec)
我们需要记下File和Position两项的值,他们分别表示bin日志文件名和数据偏移量。
配置从数据库Slave
1、设置从数据库配置文件:/etc/my.cnf。
server-id = 2log-bin = mysql-bin
replicate-do-db = helloweba
以上选项中,server-id = 2
表示从数据库ID,一定不能和主数据库一样。
log-bin = mysql-bin
二进制日志。
replicate-do-db = helloweba
设置了允许同步复制的数据库为helloweba,如果不设置则可注释掉该行。
2、重启数据库
和主数据库一样,配置好后要重启数据库使配置生效。
[root@localhost ~]# /etc/init.d/mariadb restartRestarting mariadb (via systemctl): [ 确定 ]
3、执行复制命令
进入从数据库命令行模式,输入命令:
change master to master_host='192.168.11.34',master_port=3306,master_user='slave',master_password='123456x',master_log_file='mysql-bin.000004',master_log_pos=2259;
master_host是指主数据库服务器的IP(192.168.11.34),master_user是指登录连接主数据库的账号(slave),master_password是指账号对应的密码,master_port是指主数据库的端口号(3306),master_log_file就是主数据库master状态对应的File文件,master_log_pos就是主数据库master状态对应的Position参数。
4、启动slave同步
数据库命令行模式下,输入start slave;
命令:
MariaDB [(none)]> start slave;Query OK, 0 rows affected (0.01 sec)
5、查看slave同步的状态
输入show slave status\G;
命令:
MariaDB [(none)]> show slave status\G;*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.11.34 Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 2259 Relay_Log_File: mariadb-relay-bin.000004 Relay_Log_Pos: 555 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: helloweba Replicate_Ignore_DB:
查看Slave_IO_Running
和Slave_SQL_Running
是否都为yes(一定要全部为yes)。
验证
主从库配置好后,为了验证数据是否同步复制了,可以在主数据库中插入一条数据,然后到从数据库中查看是否也插入了一条数据。同样的,对主数据库的修改和删除操作,在从数据库中也自动进行了相应的操作。
Mysql的主从配置和MariaDB是一样的,接下来我们会有文章介绍Mysql/MariaDB的读写分离、主主互备高可用容灾机制,敬请关注。
以上是关于Linux安装MongoDB双机热备份(主从复制)的主要内容,如果未能解决你的问题,请参考以下文章
Linux安装mysql配置双机热备(主/主复制)+ Keepalived(故障转移)