非安全认证
环境说明
Linux:CentOS7
MongoDB:mongodb-linux-x86_64-enterprise-rhel70-4.0.13
服务器IP:192.168.6.128、192.168.6.129、192.168.6.130、192.168.6.131
架构:一主两从一仲裁
解压Mongodb
- 解压文件并重命名为mongodb-4.0.13
创建日志及数据存放目录
- 目录结构如图 data和log目录.png
创建配置文件 参考官网说明
- 同一副本集的服务器replSetName相同。以128服务器为例:
processManagement:
fork: true
net:
bindIp: 192.168.6.128,127.0.0.1 #对应服务器填写自身对应IP地址
port: 27017
storage:
dbPath: /usr/local/mongodb-4.0.13/replica_set/data
systemLog:
destination: file
path: "/usr/local/mongodb-4.0.13/replica_set/log/mongodb.log"
logAppend: true
storage:
journal:
enabled: true
replication:
replSetName: set0
启动MongoDB
启动mongod客户端.png配置副本集 参考官网说明
- 这里配置不加入仲裁节点,稍候以命令方式加入。
- 登录任意一台服务器的mongo客户端,执行如下命令:
var rsconf = {
_id: "set0",
members:
[
{
_id: 1,
host: "192.168.6.128:27017"
},
{
_id: 2,
host: "192.168.6.129:27017"
},
{
_id: 3,
host: "192.168.6.130:27017"
}
]
}
- 副本集初始化
rs.initiate(rsconf)
添加仲裁节点
- 通过mongo登录主节点,将仲裁节点加入副本集。执行
rs.addArb("192.168.6.131:27017")
最后可通过rs.status()命令查看副本集状态信息
安全认证
其他步骤相同,不同点从配置文件开始
创建key 参考官方说明
- 每个服务器都需要执行下列命令,或通过scp拷贝文件到其他服务器对应目录
openssl rand -base64 756 > /usr/local/mongodb-4.0.13/replica_set/key/replicat_set.key
chmod 600 /usr/local/mongodb-4.0.13/replica_set/key/replicat_set.key
创建配置文件
processManagement:
fork: true
net:
bindIp: 192.168.6.128 #对应服务器填写自身对应IP地址
port: 27017
storage:
dbPath: /usr/local/mongodb-4.0.13/replica_set/data
systemLog:
destination: file
path: "/usr/local/mongodb-4.0.13/replica_set/log/mongodb.log"
logAppend: true
storage:
journal:
enabled: true
replication:
replSetName: set0
# 不同点在下面,指定key路径
security:
keyFile: /usr/local/mongodb-4.0.13/replica_set/key/replicat_set.key
启动MongoDB
- 启动mongodb
- 创建管理员
use admin
db.createUser(
{
user: "simon",
pwd: "123456",
roles: [{role:"userAdminAnyDatabase",db:"admin"}]
}
)
- 创建完成后,执行添加仲裁节点失败,查看官网文档,添加下列角色。之后在添加仲裁节点成功。
db.grantRolesToUser("simon", ["clusterAdmin"])
java客户端操作
- 创建test数据库
- 创建用户并授权
db.createUser(
{
user: "tester",
pwd: "123456",
roles: [{role:"readWrite",db:"test"}]
}
)
- 客户端插入数据
public static void main(String[] args) {
List<ServerAddress> list = new ArrayList<>(4);
ServerAddress s128 = new ServerAddress("192.168.6.128");
ServerAddress s129 = new ServerAddress("192.168.6.129");
ServerAddress s130 = new ServerAddress("192.168.6.130");
list.add(s128);
list.add(s129);
list.add(s130);
MongoCredential credential = MongoCredential.createCredential("tester", "test", "123456".toCharArray());
MongoClientOptions mongoClientOptions = MongoClientOptions.builder().build();
MongoClient mongoClient = new MongoClient(list,credential,mongoClientOptions);
MongoDatabase test = mongoClient.getDatabase("test");
MongoCollection<Document> simon = test.getCollection("simon");
for(int i = 21 ;i < 39;i++){
Document document = new Document();
document.append("name","张三" + i);
document.append("age",i);
document.append("sex",((i & 1) == 0 ? "男":"女"));
simon.insertOne(document);
}
}
网友评论