mongodb的安装和常用配置项的含义

测试环境为centos7系统,mongodb版本为4.0

安装
  • 禁用大内存页面
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" >  /sys/kernel/mm/transparent_hugepage/defrag
  • 配置yum源并安装启动
cat > /etc/yum.repos.d/mongodb-org-4.0.repo <<EOF
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
EOF
yum install -y mongodb-org
systemctl start mongod
systemctl enable mongod
‘/etc/mongod.conf’常用配置项的含义
  • 系统日志
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
名称 说明
verbosity: 0 日志级别,0:默认值,包含“info”信息,1~5,即大于0的值均会包含debug信息
quiet: true “安静”,此时mongod/mongos将会尝试减少日志的输出量。不建议在production环境下开启,否则将会导致跟踪错误比较困难。
traceAllExceptions: true 打印异常详细信息。
path: /var/log/mongodb/mongod.log 日志路径
logAppend: false 如果为true,当mongod/mongos重启后,将在现有日志的尾部继续添加日志。否则,将会备份当前日志文件,然后创建一个新的日志文件;默认为false。
logRotate: rename 日志“回转”,防止一个日志文件特别大,则使用logRotate指令将文件“回转”,可选值:1)rename:重命名日志文件,默认值。2)reopen:使用linux日志rotate特性,关闭并重新打开此日志文件,可以避免日志丢失,但是logAppend必须为true。
destination: file 日志输出目的地,可以指定为“ file”或者“syslog”,表述输出到日志文件,如果不指定,则会输出到标准输出中(standard output)
  • 存储
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
名称 说明
dbPath mongod进程存储数据目录,此配置仅对mongod进程有效
indexBuildRetry 当构建索引时mongod意外关闭,那么再次启动是否重新构建索引;索引构建失败,mongod重启后将会删除尚未完成的索引,但是否重建由此参数决定。默认值为true.
repairPath 配合–repair启动命令参数,在repair期间使用此目录存储临时数据,repair结束后此目录下数据将被删除,此配置仅对mongod进程有效。不建议在配置文件中配置,而是使用mongod启动命令指定。
engine 存储引擎类型,mongodb 3.0之后支持“mmapv1”、“wiredTiger”两种引擎,默认值为“mmapv1”;官方宣称wiredTiger引擎更加优秀。
journal 是否开启journal日志持久存储,journal日志用来数据恢复,是mongod最基础的特性,通常用于故障恢复。64位系统默认为true,32位默认为false,建议开启,仅对mongod进程有效。
directoryPerDB 是否将不同DB的数据存储在不同的目录中 默认值为false
syncPeriodSecs mongod使用fsync操作将数据flush到磁盘的时间间隔,默认值为60(单位:秒)强烈建议不要修改此值 mongod将变更的数据写入journal后再写入内存,并间歇性的将内存数据flush到磁盘中,即延迟写入磁盘,有效提升磁盘效率
mmapv1 仅对MMAPV1引擎
quota: enforced:false 配额管理,是否限制每个DB所能持有的最大文件数量 默认值为false;maxFilesPerDB:8 如果enforce开启,每个DB所持有的存储文件不会超过此阀值
smallFiles: false 是否使用小文件存储数据;如果此值为true mongod将会限定每个数据文件的大小为512M(默认最大为2G),journal降低到128M(默认为1G)。如果DB的数据量较大,将会导致每个DB创建大量的小文件,这对性能有一定的影响。在production环境下,不建议修改此值,在测试时可以设置为true,节约磁盘。
  • 进程管理
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo
名称 说明
fork 运行在后台
pidFilePath PID文件路径
  • 网络接口
net:
  port: 27017
  bindIp: 127.0.0.1
名称 说明
port 端口
bindIp 绑定外网IP 多个用逗号分隔
maxIncomingConnections 进程允许的最大连接数 默认值为65536
wireObjectCheck 当客户端写入数据时 检测数据的有效性(BSON) 默认值为true
ipv6 默认值为false
  • 安全
security:
    authorization: enabled
    clusterAuthMode: keyFile
    keyFile: keyfile_path
    javascriptEnabled: true
名称 说明
authorization disabled或者enabled,仅对mongod有效;表示是否开启用户访问控制(Access Control),即客户端可以通过用户名和密码认证的方式访问系统的数据,默认为“disabled”,即客户端不需要密码即可访问数据库数据。(限定客户端与mongod、mongos的认证)
clusterAuthMode 集群中members之间的认证模式,可选值为“keyFile”、“sendKeyFile”、“sendX509”、“x509”,对mongod/mongos有效;默认值为“keyFile”,mongodb官方推荐使用x509,不过我个人觉得还是keyFile比较易于学习和使用。不过3.0版本中,mongodb增加了对TLS/SSL的支持,如果可以的话,建议使用SSL相关的配置来认证集群的member,此文将不再介绍。(限定集群中members之间的认证)
keyFile 当clusterAuthMode为“keyFile”时,此参数指定keyfile的位置,mongodb需要有访问此文件的权限。
javascriptEnabled true或者false,默认为true,仅对mongod有效;表示是否关闭server端的javascript功能,就是是否允许mongod上执行javascript脚本,如果为false,那么mapreduce、group命令等将无法使用,因为它们需要在mongod上执行javascript脚本方法。如果你的应用中没有mapreduce等操作的需求,为了安全起见,可以关闭javascript。
一个conf配置示例
systemLog:
    quiet: false
    path: /data/mongodb/logs/mongod.log
    logAppend: false
    destination: file
processManagement:
    fork: true
    pidFilePath: /data/mongodb/mongod.pid
net:
    bindIp: 127.0.0.1
    port: 27017
    maxIncomingConnections: 65536
    wireObjectCheck: true
    ipv6: false 
storage:
    dbPath: /var/lib/mongo
    indexBuildRetry: true
    journal:
        enabled: true
    directoryPerDB: false
    engine: mmapv1
    syncPeriodSecs: 60 
    mmapv1:
        quota:
            enforced: false
            maxFilesPerDB: 8
        smallFiles: true
        journal:
            commitIntervalMs: 100
    wiredTiger:
        engineConfig:
            cacheSizeGB: 8
            journalCompressor: snappy
            directoryForIndexes: false
        collectionConfig:
            blockCompressor: snappy
        indexConfig:
            prefixCompression: true
operationProfiling:
    slowOpThresholdMs: 100
    mode: off

参考文章:
https://docs.mongodb.com/manual/reference/configuration-options/index.html
https://www.jianshu.com/p/f9f1454f251f

Linux vsftp快速使用

  • 本系统测试为centos6.x系统,直接使用yum安装vsftpd以及依赖软件
yum install -y db4 db4-devel db4-utils vsftpd
  • 快速添加一个用户
echo "user_name" >> /root/user.txt
echo "password" >> /root/user.txt
db_load -T -t hash -f /root/user.txt /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db
echo "auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login" > /etc/pam.d/vsftpd
echo "account required pam_userdb.so db=/etc/vsftpd/vsftpd_login" >> /etc/pam.d/vsftpd
  • 主配置文件
cat > /etc/vsftpd/vsftpd.conf <<EOF
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_world_readable_only=NO
chroot_local_user=YES
guest_enable=YES
guest_username=apache
pam_service_name=/etc/pam.d/vsftpd
user_config_dir=/etc/vsftpd/user_conf
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
listen=YES
listen_port=21
use_localtime=YES
pasv_min_port=30000
pasv_max_port=30120
EOF
  • 用户路径配置文件
mkdir /etc/vsftpd/user_conf
cat > /etc/vsftpd/user_conf/user_name <<EOF
local_root=/opt/web/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF
  • 最后重启服务
service vsftpd restart

添加第二个ftp用户的方法:1.在“user.txt”中依次添加用户名和密码; 2.重新载入db “db_load -T -t hash -f /root/user.txt /etc/vsftpd/vsftpd_login.db”; 3.在“/etc/vsftpd/user_conf”中复制原来的文件,这儿需要注意的是ftp的用户名和user的文件名一定要相同。并修改路径,最后重启vsftpd

Linux计划任务crond

  • 概要:cron的作用是计划任务;需要安装的软件:crontabs、vixie;启动的服务:crond
  • 下面是一些CENTOS6.X系列的示例
例一:每晚十点钟重启mysql
0   22  *   *   *   service mysql restart

例二:每月5、10、15日的1:50重启mysql
50  1   5,10,15 *   *   service mysql restart

例三:每月1到20日的1:50重启mysql
50  1   1-20    *   *   service mysql restart

例四:每隔两分钟重启mysql服务
*/2 *   *   *   *   service mysql restart
1-59/2  *   *   *   *   service mysql restart

例五: 晚上11点到早上八点之间,每隔一个小时重启mysql
0   23-7/1  *   *   *    service mysql restart

例六:每天17:00到22:00之间每隔30分钟重启mysql
0,30        17-22       *   *   *   service mysql restart
0-59/30 17-22       *   *   *   service mysql restart

例七:五月的第一个星期日早晨1点59分重启mysql
59  1   1-7 5   *   test    `date +\%w` -eq 0 && service mysql restart

例八:每隔两个小时重启mysql
0   */2 *   *   *       service mysql restart

例九:每隔30s重新启动mysql
*/1 *   *   *   *   service mysql restart   &&  sleep 30s   &&   service mysql restart

PS: 以上例子可以使用crontab -e创建,也可以写入/etc/cron.d/下面自己创建的文件中比如test,然后进入该目录(/etc/cron.d)使用命令”crontab test”使文件生效,这儿需要注意的是使用crontab -e创建的文件是保存在/var/spool/cron目录下面相应的用户文件当中的,使用 crontab test会破坏/var/spool/cron目录下面相应的用户文件,当然的使用crontab -e却不会破坏/etc/cron.d自己创建的文件,因为crond只会读取/var/spool/cron的文件

Linux之SELINUX

  • 身份识别(Identify)
root        --- 表示root的账号身份
system_u    --- 表示系统程序方面的识别,通常就是程序
user_u      --- 代表一般用户账号相关的身份
  • 角色(Role)
object_r    --- 代表的是文件或目录等文件资源,这是最常见的
system_r    --- 代表的就是程序,不过一般用户也会被指定为system_r
  • 类型(Type)
Type        --- 在文件资源(object)中称为类型(Type)
Domain      --- 在主体程序(Subject)中则称为域(Domain)
  • 当你在单纯地复制时,SELinux的Type字段会继承自目标目录,如果是移动的话就会连同SELinux的类型也会被移动过去
  • 常用命令以及一些参数:
chcon       --- 改变SELinux的状态
    -R              --- 连同该目录下的子目录也同时修改
    -t              --- 后面接安全性环境的类型字段
    -u              --- 后面接身份识别
    -r              --- 后面接角色
    --reference     --- 拿某个文件当范例来修改后续接的文件类型
restorecon [-Rv] file|dir   --- 恢复成原有的SELinux Type类型
    -R          --- 连同子目录一起修改
    -v          --- 将过程显示到屏幕上 
semanage fcontext -l -{a|d|m} [-frst] file_spec --- 如果没有semanage这个命令,需要先用"yum install policycoreutils-python"
    -l      --- 表示查询的意思
    -a      --- 增加一个默认类型
    -m      --- 修改一个默认配置
    -d      --- 删除一个默认的配置
seinfo [-Atrub]         --- 查看策略提供的规则,如果没有这个命令,需要使用命令"yum  install setools-console"安装
    -A      --- 列出SELinux的状态、规则布尔值、身份识别、角色。类别等所有信息
    -t      --- 列出SELinux的所有类别(type)的种类
    -r      --- 列出SELinux的所有角色(role)种类
    -u      --- 列出SELinux的所有身份识别(user)种类
    -b      --- 列出所有规则的种类(布尔值)
    sesearch [--all] [-s 主体类别] [-t 目标类型] [-b 布尔值]   --- 查询详细的规则
    --all   --- 列出该类别或布尔值的所有相关信息
getsebool -a        --- 查询系统内所有的布尔值设置状况
setsebool [-P] 布尔值=[0|1]        --- 设置布尔值
    -P      --- 直接将设置写入配置文件,重启后依然有效
setrouobleshoot ---这个服务会将关于SELinux的错误信息与解决方法记录到/var/log/messages与/var/log/setroubleshoot/*中,使用以下命令进行安装:yum install setroubleshoot setroubleshoot-server.排错的步骤就是根据/var/log/messages中的setroubleshoot错误信息,按照提示进行就可以了
/etc/init.d/auditd restart
  • 一些示例
semanage fcontext -l | grep '/var/www'      --- 查询/var/www目录下的默认类型有哪些
mkdir /opt/web  --- 我们在/srv下创建了一个目录并且通过下面这个命令把他的默认类型设置为public_content_t类型
semanage fcontext -a -t public_content_t "/opt/web(/.*)?"

PS:如果从disable转到启动SELinux的模式时,由于系统必须要针对文件写入安全性环境的信息,因此开机过程会花费不少时间来等待重新写入SELinux安全性环境(有时候也称为SELinux Label),而且在写完之后还需要再次重新启动一次,这需要等待很长一段时间;如果在重新写入SELinux Type(Relable)时出错,可以使用”restorecon -Rv /”重新还原SELinux的类型,就可以处理了

MAC OS安装virtualenv

pip3 install --upgrade pip  ## 升级pip
pip3 install virtualenv
pip3 install virtualenvwrapper
which virtualenvwrapper.sh ## 查找virtualenvwrapper.sh位置,下面需要写入到.bash_profile文件中
which python3  ## ## 查找python3位置,下面需要写入到.bash_profile文件中
vi ~/.bash_profile  ## 将下面三行写入到.bash_profile中,第二行和第三行的路径是通过前面两个命令找到的
export WORKON_HOME='~/.virtualenvs'
export VIRTUALENVWRAPPER_PYTHON='/Library/Frameworks/Python.framework/Versions/3.7/bin/python3'
source /Library/Frameworks/Python.framework/Versions/3.7/bin/virtualenvwrapper.sh
## 一些常用的命令
workon   会列出所有的虚拟环境
workon  [name]  会进入指定的虚拟环境
deactivate   退出当前的虚拟环境
mkvirtualenv  [name] 创建虚拟环境
rmvirtualenv  [name] 删除虚拟环境