1.关闭selinux
vi /etc/selinux/config
SELINUX=disabled
setenforce 0
2.配置mongodb源
#yum安装mongodb
vi /etc/yum.repos.d/mongodb.repo
[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
3.yum安装mongodb
yum install mongodb-org (目前安装的版本是3.6.7)
4.关闭这三台机器的防火墙
service iptables stop
chkconfig iptables off
service firewalld stop
chkconfig firewalld off
5.分别配置三台机器的/etc/mongod.conf
vi /etc/mongod.conf 添加如下内容
replication: # 取消这行的注释
oplogSizeMB: 20 # 增加这一行配置定义oplog的大小,注意前面需要有两个空格
replSetName: zero # 定义复制集的名称,同样的前面需要有两个空格
在每台机器的/etc/mongod.conf中配置各自ip地址,如下面的0.0.0.0
vi /etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1, 0.0.0.0
6.集群初始化
systemctl start mongod.service #分别启动三台机器的MongoDB服务
进入到其中一台机器,执行下面的命令
mongo
use admin
config={_id:"zero",members:[{_id:0,host:"0.0.0.0:27017"},{_id:1,host:"0.0.0.0:27017"},{_id:2,host:"0.0.0.0:27017"}]}
rs.initiate(config) # 初始化
rs.status() # 查看状态
注意:如果在slave上出现show dbs报错,not master and slaveOk=false
rs.slaveOk() # 如果出现以上错误,需要执行这条命令
7. 创建具有集群管理权限的用户
mongo
use admin
db.createUser({user:"root",pwd:"123456", roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"clusterAdmin",db:"admin" }]})
clusterAdmin具有管理集群的权限
db.auth("root", "123456") #如果返回1,则表示成功。
8. 给集群添加安全keyfile安全认证
#生成key
mkdir -p /var/lib/mongo/authkey/ #在每个节点创建该文件夹
#在主节点上执行以下命令
openssl rand -base64 745 > /var/lib/mongo/authkey/mongodb-keyfile
chmod 600 /var/lib/mongo/authkey/mongodb-keyfile
cd /var/lib/mongo/authkey/
chown mongod:mongod mongodb-keyfile
# 该key的权限必须是600,且所有者是mongod
# 将该key放到集群中机器的每一台上,记住必须保持一致,权限设置成600;
scp mongodb-keyfile [email protected]:/var/lib/mongo/authkey/
scp mongodb-keyfile [email protected]:/var/lib/mongo/authkey/
登录修改/var/lib/mongo/authkey/,修改权限
chmod 600 /var/lib/mongo/authkey/mongodb-keyfile
cd /var/lib/mongo/authkey/
chown mongod:mongod mongodb-keyfile
9. 分别配置三台机器的/etc/mongod.conf,添加keyfile认证
取消security的注释,并在下面添加
keyFile: /var/lib/mongo/authkey/mongodb-keyfile
10. 重新启动集群节点的mongodb服务
systemctl restart mongod.service
11. 登录mongodb
mongo admin -u root -p
输入密码,登录mongo后执行
rs.status() # 查看状态,如没有unauth字样,则说明安全认证添加成功
12. 测试副本集群
db.printSlaveReplicationInfo() #查看副本同步状态
use testdb # 创建库
switched to db testdb
zero:PRIMARY> db.test.insert({AccountID:1,UserName:"zero"})
#创建集合,并且插入一条数据
WriteResult({ "nInserted" : 1 })
zero:PRIMARY> show dbs # 查看所有的库
zero:PRIMARY> show tables # 查看当前库的集合
test
在slave上查看数据集,是否已经有新加的数据
如果在slave上出现show dbs报错,not master and slaveOk=false
rs.slaveOk() # 如果出现以上错误,需要执行这条命令
添加配置
echo never >> /sys/kernel/mm/transparent_hugepage/enabled
echo never >> /sys/kernel/mm/transparent_hugepage/defrag
添加到/etc/rc.local
#disable transparent_hugepage
echo never >> /sys/kernel/mm/transparent_hugepage/enabled
echo never >> /sys/kernel/mm/transparent_hugepage/defrag
重启后仍然好用
编辑 /etc/default/grub,在GRUB_CMDLINE_LINUX加入选项 transparent_hugepage=never
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/swap rd.lvm.lv=fedora/root rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"
2.重新生成grub配置文件
On BIOS-based machines, issue the following command as root:
# grub2-mkconfig -o /boot/grub2/grub.cfg
systemctl status mongod.service
6. 查看是否启动成功
$ sudo systemctl status mongod.service
若显示 active(running)则启动成功!或者
$ sudo cat /var/log/mongodb/mongod.log
如出现
[thread1] waiting for connections on port
其中的默认为27017,在 /etc/mongod.conf中配置,则启动成功
3)开机自启动
systemctl start mongod.service
systemctl enable mongod.service
systemctl status mongod.service