Mongodb安装配置及热备集群
1. 单一集群
1.1 安装
1.下载mongodb ,官方下载地址https://www.mongodb.com/download-center。选择安装的环境平台,下载对应的安装文件。这里已下载zip文件为例。
2.将下载的安装文件,拷贝到服务器。并解压。解压命令为unzip 文件名
3.因为mongodb不需要像别的数据库那样繁琐的配置解压后放到惯例的/usr/local目录下面,当然你可以放到任何地方,放到/usr/local下面方便管理。
命令:mv 文件名 /usr/local/
4.然后为mongodb创建数据库存放的位置和日志文件,默认是在/data/db下面,同样为了方便就在mongodb下面建立了相应的目录.
1.2 配置
配置mongodb.conf,将相关的启动参数的进行配置。
配置内容如下:
port=27017 #端口
dbpath=/home/mongodb/data/ #数据库
logpath=/home/mongodb/logs/mongodb.log # 日志
fork=true #后台运行
logappend=true #写日志的模式:设置为true为追加。
auth=true #开启权限验证
maxConns=100 #连接最大数,防止宕机。
注:其他配置属性,可以参考相关网站再配置文件中进行配置
1.3 启动/停止
启动:进入mongodb的bin文件夹。
命令:./mongod-f mongodb.conf
停止:查看mongodb的进程号
命令:ps-ef|grep mongodb
通过进程号,杀死进程。
命令:kill -9 进程号
1.4 安全认证
创建admin 数据库
use admin
-- 系统管理员(密码验证算法是:SCRAM-SHA-1,所以应用程序连接请注意连接算法)
db.createUser(
{
user : "root",
db : "admin",
pwd: ‘123456’
credentials : {
"SCRAM-SHA-1" : {
"iterationCount" : 10000,
"salt" :"ASx2XTL3GpQ0sEjxvaaW6Q==",
"storedKey" :"9CsfOG+T6Ju9YJVvdS4rGgIOHPc=",
"serverKey" :"epCXddFBLuWq6km7K9Q854VTWpY="
}
},
roles: [
{
role: "__system",
db: "admin"
},
{
role:"userAdminAnyDatabase",
db: "admin"
}
]
}
)
--指定数据库的访问权限配置
db.createUser(
{
user : "test",
db : "test",
pwd: ‘123456’
credentials : {
"SCRAM-SHA-1" : {
"iterationCount" : 10000,
"salt" :"ASx2XTL3GpQ0sEjxvaaW6Q==",
"storedKey" :"9CsfOG+T6Ju9YJVvdS4rGgIOHPc=",
"serverKey" :"epCXddFBLuWq6km7K9Q854VTWpY="
}
},
roles: [
{
role: "readWrite",
db: "test"
}
]
}
)
2. 单机热备集群(双机配置一样)
2.1 安装(多个)
主要是安装一个主服务器、一个从服务器、一个仲裁服务器,双机热备集群就可以实现。分别安装三个mongodb。注意初始化的时候,数据库需一致。
1.下载mongodb ,官方下载地址https://www.mongodb.com/download-center。选择安装的环境平台,下载对应的安装文件。这里已下载zip文件为例。
2.将下载的安装文件,拷贝到服务器。并解压。解压命令为unzip 文件名
3.因为mongodb不需要像别的数据库那样繁琐的配置解压后放到惯例的/usr/local目录下面,当然你可以放到任何地方,放到/usr/local下面方便管理。
命令:mv 文件名 /usr/local/
4.然后为mongodb创建数据库存放的位置和日志文件,默认是在/data/db下面,同样为了方便就在mongodb下面建立了相应的目录.
注意:三个mongodb的分别命名为1、2、3。1:主服务器 2:从服务器 3:仲裁服务器。
2.2 配置(多个Mongodb)
主服务器的mongodb_1.conf的配置:
#master.conf
dbpath=/usr/local/mongodb/1/data/ #数据库目录
logpath=/usr/local/mongodb/1/logs/mongodb.log #日志目录
directoryperdb=true #设置为true,修改数据目录存储模式,每个数据库的文件存储在DBPATH指定目录的不同的文件夹中。使用此选项,可以配置的MongoDB将数据存储在不同的磁盘设备上,以提高写入吞吐量或磁盘容量。默认为false。
logappend=true #写日志的模式:设置为true为追加
replSet=testrs #使用此设置来配置复制副本集。指定一个副本集名称作为参数,所有主机都必须有相同的名称作为同一个副本集。
bind_ip=192.168.174.129 #指定IP
port=27017 #端口
fork=true #后台运行
noprealloc=true #预分配方式。
从服务器的mongodb_2.conf的配置:
#slaver.conf
logpath=/usr/local/mongodb/2/logs/mongodb.log
dbpath=/usr/local/mongodb/2/data
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=192.168.174.129
port=27018
fork=true
noprealloc=true
注意:属性含义查看主服务器
仲裁服务器的mongodb_3.conf的配置:
#arbiter.conf
logpath=/usr/local/mongodb/3/logs/mongodb.log
dbpath=/usr/local/mongodb/3/data
directoryperdb=true
logappend=true
replSet=testrs
bind_ip=192.168.174.129
port=27019
fork=true
noprealloc=true
注意:属性含义查看主服务器
注意:暂时不考虑权限验证。
2.3 启动
分别启动服务器。启动顺序:主服务器、从服务器、仲裁服务器。
命令均是进入各自的bin目录下。
命令:./mongod -f 配置文件名.conf
2.4 配置集群
登录主服务。进入主服务器的bin 命令:./mongo 192.168.174.129:27017/
执行:初始化函数
_id : "testrs",
members : [
{_id : 0, host :"192.168.174.129:27017"},
{_id : 1, host :"192.168.174.129:27018"},
{_id : 2, host :"192.168.174.129:27019", arbiterOnly: true},
]
}
rs.initiate(config)
注:arbiterOnly 表示该服务器为仲裁者
到目前为热备集群已经配置完毕!可以通过rs.status()查看当前“主、从、仲裁”的分布情况。
2.5 测试热备集群(目前在命令行中测试,也可以robomongodb工具)
1.可以在主服务中插入数据,然后在从服务器查看是否能查看到新增的数据。
eg: use test
db.testdb.insert(‘test1’,’value1’);
2.停止主服务器,看从服务器是否能变成主服务。同时在新的主服务上新增数据。
eg: use test
db.testdb.insert(‘test2’,’value2’);
3.最后启动关闭的主服务,查看服务器状态。是否主服务是否又变成刚启动的服务器为主服务,同时看在第二步新增的数据,在刚启动的服务器上能否查看到。
eg: use test
db.testdb.insert(‘test3’,’value3’);
2.6 安全认证
1.配置玩副本集之后开始用户认证,安装单一集群的安全认证的方式配置,配置完之后,配置信息将同步到其他节点
然后逐一启动副本,只用经过密码文件认证的节点才能加入。数据库操作也需要密码认证,大大提高了安全性
2.配置完用户验证之后,停掉副本集,先用openssl生成密码文件,
openssl rand -base64741 > mongodb-keyfile
赋予权限600,文件才能被调用
chmod 600mongodb-keyfile
保存好文件,然后在节点配置文件加入启动调用认证文件参数,如:
keyFile =/usr/local/mongodb/etc/mongodb-keyfile
然后逐一启动副本,只用经过密码文件认证的节点才能加入。数据库操作也需要密码认证,大大提高了安全性
3.最后重启主服务器、从服务器、仲裁服务器
2.7 JAVA连接热备集群实例
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
public classTestMongoDBReplSet {
public static void main(String[] args) {
try {
MongoClientOptionsclientOptions =newMongoClientOptions.Builder().connectionsPerHost(50).maxWaitTime(2000).build();
List<MongoCredential>lstCredentials = Arrays.asList(MongoCredential.createScramSha1Credential("interface","interfaceLog","youzitang2016_interface0521".toCharArray()));
List<ServerAddress>addresses = new ArrayList<ServerAddress>();
ServerAddressaddress1 = new ServerAddress("192.168.174.129", 27017);
ServerAddressaddress2 = new ServerAddress("192.168.174.129", 27018);
ServerAddressaddress3 = new ServerAddress("192.168.174.129", 27019);
addresses.add(address1);
addresses.add(address2);
addresses.add(address3);
MongoClientclient = new MongoClient(addresses,lstCredentials,clientOptions);
DBdb = client.getDB("interfaceLog");
DBCollectioncoll =db.getCollection("logs"); // 插入 BasicDBObject
BasicDBObjectobject = new BasicDBObject();
object.append("test1","testval1s");
coll.insert(object);
DBCursordbCursor = coll.find();
while (dbCursor.hasNext()) {
DBObjectdbObject = dbCursor.next();
System.out.println(dbObject.toString()+"===========================================================");
}
}catch (Exception e) {
e.printStackTrace();
}
}
}