mongodb副本集部署

Monogdb从4.0版本以上不支持主从结构,因此需要通过副本集的形式实现主从,其中需要至少三台机器,一台作为主节点,一台以上作为从节点,一台作为仲裁节点,其中仲裁节点没有任何数据,只是用来做调度使用,当主节点失效的时候,自动将从节点切换为主节点。

Replica Set是mongod的实例集合,它们有着同样的数据内容。包含三类角色:

1、主节点( Primary ):

接收所有的写请求,然后把修改同步到所有Secondary。一个Replica Set只能有一个Primary节点,当Primary挂掉后,其他Secondary或者Arbiter节点会重新选举出来一个主节点。默认读请求也是发到Primary节点处理的,需要转发到Secondary需要客户端修改一下连接配置。

2、副本节点(Secondary):

与主节点保持同样的数据集。当主节点挂掉的时候,参与选主

3、 仲裁者(Arbiter):

不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter跑起来几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器上

注意,一个自动failover的Replica Set节点数必须为奇数

环境准备:

主节点ip:192.168.170.132

从节点:ip 192.168.170.133

仲裁节点:192.168.170.134

开通端口:27017

主节点部署:

1、首先将mongodb安装包上传到主节点机器上,解压缩,将解压后的文件夹移动到/usr/local/ 并重命名为mongodb,如图:

2、 将monogdb添加到系统环境变量中,编辑文件vim  /etc/profile,在文件末尾添加内容如下:

添加完成后执行命令source  /etc/profile让命令即时生效。

3、验证是否配置成功,执行命令mongod –help,结果如图:

从图中可以看到glibc版本依赖或者过低造成,需要重新安装glibc

4、将glibc安装包上传到服务器中,解压到/usr/local目录下,进入glibc目录,创建build文件夹,进入文件夹,执行编译命令(可能需要安装gcc,执行yum –y install gcc),如图:

编译完成后,执行make && make install 或者make –j 2 && make install安装

说明:在多cpu服务器编译Linux时通过make –j 可以加快安装速度,格式为make –j n其中n等于cpu个数的时候速度最快。

安装完成后再次执行mongod –help可以看到配置成功,如图:

5、创建配置文件、数据库目录、日志文件目录,执行命令如图:

6、进入conf目录,编辑配置文件mongodb.cnf,添加内容如下:

7、启动mongodb,执行命令如下:

8、登录mongodb,执行命令如下:

9、登录成功后执行命令初始化副本集,按回车可以看到显示PRIMARY,表示主服务器,如图:

10、接下来添加从节点,执行命令如下:ok后面显示1表示成功,如图:

11、执行命令rs.status()查看集群状态,如图:

12、查看主节点以及从节点的优先级,执行命令如图:

上图中的priority表示优先级信息,可以通过手动设置主的优先级高于从,命令如下:

再次执行rs.conf()命令,可以看到已经修改了主的优先级高于从,如图:

13、登录从节点,看到如下告警消息,按照需求优化即可,如图:

在命令行位置显示SECONDARY表示从节点,如图:

14、在主库中创建数据库并写入数据,测试从库是否有数据,首先在主库中执行命令如下:

15、登录到备库中,查看数据库情况,可以看到报错信息如图:

在从库中开启读操作rs.slaveOk(),并查询数据库信息,如图:

16、创建用户并设置认证,执行命令如下:

首先执行命令use mydb进入到mydb数据库,然后执行命令创建管理此数据库的用户名和密码,如图:

db.createUser({user:”guan”,pwd:”8856769″,roles:[{role:”readWrite”,db:”guan”}]})

创建完成后,执行命令show users可以看到用户的信息,如图:

上述创建的用户gong只是对数据库mydb具有读写权限,还需要创建一个管理员用户,此用户具有所有数据库的访问权限,执行命令use  admin 进入admin数据库,执行命令db.createUser({user:”root”,pwd:”12345678″,roles:[“clusterAdmin”,”dbAdminAnyDatabase”,”userAdminAnyDatabase”,”readWriteAnyDatabase”]})

17、创建登录认证文件:

注意:副本集和单节点不同,单节点直接在配置文件中添加auth=true 即可,但是副本集需要通过keyfile来进行认证

keyfile文件需要通过openssl生成随机数得来,执行命令如下:

将此文件keyfile拷贝到其他节点服务器上,执行命令如下:

18、配置登录认证文件:

先停止掉所有从节点服务,在停止掉主节点的服务,不可以直接通过kill杀死,可通过命令mongod –f  /usr/local/mongodb/mongodb.conf  –shutdown来进行关闭

编辑配置文件,添加认证文件信息,如图:

配置完成后再次启动mongodb,执行命令如下:

19、登录测试:

首先执行命令mongo 192.168.170.132登录主节点,登录后执行查询数据库信息,可以看到报错,如图:

报错的原因是因为没有进行安全认证,此时我们通过命令进行登录,然后查询,可以看到已经能看到数据库mydb了,认证结果返回1表示认证成功,如图:

登录从节点,切换到数据库,执行命令认证,然后查询数据库,如图:

注意:在创建完认证后,如果还想添加用户并关联此用户对应的数据库,此时创建用户之前,需要先进入管理用户admin(上面已经创建),进行认证后,切换到相应的数据库,然后在此数据库创建用户,并设定权限,插入完数据后才可以看到此数据库,下次再次登录此数据库的时候就需要进行认证了(如果不行就将mongodb重启即可)

20、添加仲裁节点:

上图中的主节点以及备节点已经可以实现数据同步,但是当主节点挂掉后,备节点无法主动提供服务,此时需要仲裁节点,仲裁节点的主要作用是当主节点挂掉后,可以自动从备用节点中选举一个节点成为主节点来提供服务。

注意:仲裁节点也需要安装mongodb并启动,上面的认证文件也需要拷贝到仲裁节点上来,修改配置文件后重新启动节点。

在主节点位置执行如下命令,添加仲裁节点,ok位置显示1表示添加成功,注意前面的是rs.addArb如图:

添加完成后,执行命令rs.status()可以看到节点已经添加成功(health显示1),同时名字显示为ARBITER表示为仲裁节点,如图:

在仲裁节点服务器上登录mongodb,可以看到显示已经变成仲裁的名字,如图:

21、模拟主节点挂掉(把主节点关闭),登录备用节点,在备节点执行命令,看下备节点是否会变成主节点,如图:

从上图可以看到备用节点已经成功切换为主节点(显示为primary),执行用户认证,然后查询用户和数据库,如图:

再次启动主节点,可以发现备节点已经由PRIMARY变回SECONDARY, 如图:

由此可以证明仲裁节点配置成功。

备注:

Mongodb用户、权限:

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root  
  7. 还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)

标签