CentOS7 静默安装 Oracle12c

环境

  • CentOS7.5 最小安装
  • 数据库软件
    • linuxx64_12201_database.zip

操作系统配置

  • 关闭 SELinux
    1
    
    sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
    
  • 关闭防火墙
    1
    2
    
    systemctl disable firewalld
    systemctl stop firewalld
    
  • 禁用 NetworkManager
    1
    2
    
    systemctl disable NetworkManager
    systemctl stop NetworkManager
    
  • 重启操作系统
    1
    
    reboot
    

安装依赖

  • 安装可能用到的工具
    1
    2
    3
    4
    
    yum install epel-release
    yum clean all
    yum makecache fast
    yum install vim unzip rlwrap
    
  • 安装 oracle 需要的包
    1
    2
    3
    4
    5
    6
    
    yum install binutils compat-libcap1 compat-libstdc++-33 \
    compat-libstdc++-33*i686 gcc gcc-c++ glibc glibc*.i686 \
    glibc-devel glibc-devel*.i686 ksh libaio libaio*.i686 libaio-devel \
    libgcc libgcc*.i686 libstdc++ libstdc++*.i686 libstdc++-devel \
    libXi libXi*.i686 libXtst libXtst*.i686 make sysstat unixODBC \
    unixODBC*.i686 unixODBC-devel unixODBC-devel*.i686
    

配置安装环境

  • 创建 oracle 用户
    1
    2
    3
    4
    
    groupadd oinstall
    groupadd dba
    groupadd oper
    useradd -g oinstall -G dba,oper oracle
    
  • 创建 oracle 安装目录
    1
    2
    3
    4
    5
    
    mkdir -p /opt/oracle/app/product/12.2.0
    mkdir -p /opt/oracle/app/oradata
    mkdir -p /opt/oracle/app/fast_recovery_area
    chown -R oracle:oinstall /opt/oracle
    chmod -R 775 /opt/oracle
    
  • 修改 sysctl.conf
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    cat << EOF >> /etc/sysctl.conf
    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    #物理内存一半和4G中的较大者,当前服务器16G
    kernel.shmmax = 8589934592
    #shmmax / 4k (getconf PAGESIZE)
    kernel.shmall = 2097152
    kernel.shmmni = 4096
    kernel.sem = 250 32000 200 200
    net.ipv4.ip_local_port_range = 9000 65500
    net.core.rmem_default = 262144
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048586
    net.core.rmem_max = 4194304
    EOF
    sysctl -p
    
  • 修改 limits.conf
    1
    2
    3
    4
    5
    6
    7
    
    cat << EOF >> /etc/security/limits.conf
    oracle soft nproc 2047
    oracle hard nproc 16384
    oracle soft nofile 1024
    oracle hard nofile 65536
    oracle soft stack 10240
    EOF
    
  • 修改 login
    1
    2
    3
    4
    
    cat << EOF >> /etc/pam.d/login
    session required  /lib64/security/pam_limits.so
    session required pam_limits.so
    EOF
    
  • 修改 profile
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    cat << EOF >> /etc/profile
    if [ \$USER = "oracle" ] ; then
        if [ \$SHELL = "/bin/ksh" ]; then
            ulimit -p 16384
            ulimit -n 65536
        else
            ulimit -u 16384 -n 65536
        fi
        umask 022
    fi
    EOF
    
  • 修改 oracle 用户的 .bash_profile
    1
    2
    3
    4
    5
    6
    7
    8
    
    cat << EOF >> /home/oracle/.bash_profile
    export ORACLE_BASE=/opt/oracle/app
    export ORACLE_HOME=\$ORACLE_BASE/product/12.2.0
    export ORACLE_SID=orcl
    export PATH=\$PATH:\$ORACLE_HOME/bin
    #export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
    #export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
    EOF
    

安装数据库

  • 上传数据库软件到 /root 下,解压
    1
    2
    
    unzip linuxx64_12201_database.zip -d /home/oracle/
    chown -R oracle.oinstall /home/oracle/database
    
  • 切换到 oracle 用户,后续操作都在该 oracle 用户下执行
    1
    
    su - oracle
    
  • 创建 response 文件
    1
    2
    
    cd /home/oracle
    cp database/response/*.rsp ./
    
  • 修改 db_install.rsp
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    sed -i \
        -e '/^oracle\.install\.option=/s#=.*$#=INSTALL_DB_SWONLY#' \
        -e '/^UNIX_GROUP_NAME=/s#=.*$#=oinstall#' \
        -e '/^INVENTORY_LOCATION=/s#=.*$#=/opt/oracle/oraInventory#' \
        -e '/^ORACLE_HOME=/s#=.*$#=/opt/oracle/app/product/12.2.0#' \
        -e '/^ORACLE_BASE=/s#=.*$#=/opt/oracle/app#' \
        -e '/^oracle\.install\.db\.InstallEdition=/s#=.*$#=EE#' \
        -e '/^oracle\.install\.db\.OSDBA_GROUP=/s#=.*$#=dba#' \
        -e '/^oracle\.install\.db\.OSOPER_GROUP=/s#=.*$#=oper#' \
        -e '/^oracle\.install\.db\.OSBACKUPDBA_GROUP=/s#=.*$#=dba#' \
        -e '/^oracle\.install\.db\.OSDGDBA_GROUP=/s#=.*$#=dba#' \
        -e '/^oracle\.install\.db\.OSKMDBA_GROUP=/s#=.*$#=dba#' \
        -e '/^oracle\.install\.db\.OSRACDBA_GROUP=/s#=.*$#=dba#' \
        -e '/^oracle.install.db.config.starterdb.type=/s#=.*$#=GENERAL_PURPOSE#' \
        -e '/^oracle\.install\.db\.config\.starterdb\.characterSet=/s#=.*$#=ZHS16GBK#' \
        -e '/^DECLINE_SECURITY_UPDATES=/s#=.*$#=true#' \
        /home/oracle/db_install.rsp
    
  • 无需修改 netca.rsp
  • 修改 dbca.rsp
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    sed -i \
        -e '/^gdbName=/s#=.*$#=orcl#' \
        -e '/^sid=/s#=.*$#=orcl#' \
        -e '/^createAsContainerDatabase=/s#=.*$#=true#' \
        -e '/^numberOfPDBs=/s#=.*$#=1#' \
        -e '/^pdbName=/s#=.*$#=pdborcl#' \
        -e '/^templateName=/s#=.*$#=General_Purpose.dbc#' \
        -e '/^pdbAdminPassword=/s#=.*$#=P@sswo2d#' \
        -e '/^sysPassword=/s#=.*$#=P@sswo2d#' \
        -e '/^systemPassword=/s#=.*$#=P@sswo2d#' \
        /home/oracle/dbca.rsp
    
  • 安装 oracle 软件
    1
    2
    3
    4
    5
    
    cd /home/oracle/database
    ./runInstaller -silent -responseFile /home/oracle/db_install.rsp -ignorePrereq
    #安装成功后,系统提示需要在 root 下执行两个脚本
    /opt/oracle/oraInventory/orainstRoot.sh
    /opt/oracle/app/product/12.2.0/root.sh
    
  • 配置监听
    1
    2
    3
    
    netca /silent /responseFile /home/oracle/netca.rsp
    #配置成功后,监听启动,查看监听状态
    lsnrctl status
    
  • 创建数据库
    1
    2
    
    dbca -silent -createDatabase -responseFile /home/oracle/dbca.rsp
    #查看屏幕输出的创建进度
    

简单使用

  • 登陆数据库,切换到 pdb 数据库
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    [oracle@fpManager2 ~]$ rlwrap sqlplus / as sysdba
    SQL*Plus: Release 12.2.0.1.0 Production on 星期一 6月 25 14:41:16 2018
    Copyright (c) 1982, 2016, Oracle.  All rights reserved.
    连接到:
    Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
    SQL> show con_name
    CON_NAME
    ------------------------------
    CDB$ROOT
    SQL> alter session set container=pdborcl;
    会话已更改。
    SQL> show con_name
    CON_NAME
    ------------------------------
    PDBORCL
    SQL> select file_name from dba_data_files;
    FILE_NAME
    --------------------------------------------------------------------------------
    /opt/oracle/app/oradata/orcl/pdborcl/system01.dbf
    /opt/oracle/app/oradata/orcl/pdborcl/sysaux01.dbf
    /opt/oracle/app/oradata/orcl/pdborcl/undotbs01.dbf
    /opt/oracle/app/oradata/orcl/pdborcl/users01.dbf
    SQL>
    

RockyLinux 安装 Ceph

环境

操作系统 主机名 公用地址 集群地址 数据裸盘 ceph 版本
Rocky Linux 8.4 ceph41 10.0.4.41 192.168.4.41 /dev/sdb, /dev/sdc 15.2.14
Rocky Linux 8.4 ceph42 10.0.4.42 192.168.4.42 /dev/sdb, /dev/sdc 15.2.14
Rocky Linux 8.4 ceph43 10.0.4.43 192.168.4.43 /dev/sdb, /dev/sdc 15.2.14

关闭防火墙,配置 host

  • 在全部节点上执行如下操作

  • 关闭 firewalld 和 SELinux

    1
    2
    3
    
    systemctl stop firewalld
    systemctl disable firewalld
    sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config # 重启操作系统生效
    
  • 配置各节点主机名解析

CentOS7 双网卡绑定

bond 概要

什么是 bond

  • 网卡bond是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡。在应用部署中是一种常用的技术。

bond的模式种类

  • Mode=0(balance-rr) 表示负载分担round-robin,和交换机的聚合强制不协商的方式配合
  • Mode=1(active-backup) 表示主备模式,只有一块网卡是active,另外一块是备的standby
    • 如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的
  • Mode=2(balance-xor) 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合(需要xmit_hash_policy)
  • Mode=3(broadcast) 表示所有包从所有interface发出,这个不均衡,只有冗余机制…和交换机的聚合强制不协商方式配合
  • Mode=4(802.3ad) 表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要xmit_hash_policy)
  • Mode=5(balance-tlb) 是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave
  • Mode=6(balance-alb) 在5的tlb基础上增加了rlb

CentOS7 配置 bond

环境

  • 操作系统 CentOS7.6,禁用 NetworkManager 服务
  • 物理网卡 eth0, eth1 绑定到 bond0
  • 物理网卡 eth2, eth3 绑定到 bond1

网卡 eth0 配置

  • 修改 /etc/sysconfig/network-scripts/ifcfg-eth0
    1
    2
    3
    4
    5
    6
    7
    
    TYPE=Ethernet
    BOOTPROTO=none
    DEVICE=eth0
    ONBOOT=yes
    USERCTL=no
    SLAVE=yes
    MASTER=bond0
    

网卡 eth1 配置

  • 修改 /etc/sysconfig/network-scripts/ifcfg-eth1
    1
    2
    3
    4
    5
    6
    7
    
    TYPE=Ethernet
    BOOTPROTO=none
    DEVICE=eth1
    ONBOOT=yes
    USERCTL=no
    SLAVE=yes
    MASTER=bond0
    

网卡 eth2 配置

  • 修改 /etc/sysconfig/network-scripts/ifcfg-eth2
    1
    2
    3
    4
    5
    6
    7
    
    TYPE=Ethernet
    BOOTPROTO=none
    DEVICE=eth2
    ONBOOT=yes
    USERCTL=no
    SLAVE=yes
    MASTER=bond1
    

网卡 eth3 配置

  • 修改 /etc/sysconfig/network-scripts/ifcfg-eth3
    1
    2
    3
    4
    5
    6
    7
    
    TYPE=Ethernet
    BOOTPROTO=none
    DEVICE=eth3
    ONBOOT=yes
    USERCTL=no
    SLAVE=yes
    MASTER=bond1
    

增加网卡 bond0 配置

  • 创建 /etc/sysconfig/network-scripts/ifcfg-bond0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=bond0
    DEVICE=bond0
    ONBOOT=yes
    IPADDR=192.168.1.101
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=114.114.114.114
    

增加网卡 bond1 配置

  • 创建 /etc/sysconfig/network-scripts/ifcfg-bond1
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=bond0
    DEVICE=bond0
    ONBOOT=yes
    IPADDR=192.168.1.102
    NETMASK=255.255.255.0
    #GATEWAY=192.168.1.1
    #DNS1=114.114.114.114
    

配置绑定模式

  • 创建 /etc/modprobe.d/bonding.conf,加入以下内容
    1
    2
    3
    
    alias bond0 bonding
    alias bond1 bonding
    options bonding miimon=100 mode=1
    

载入 bonding 模块,重启 network 服务

1
2
modprobe bonding
systemctl restart network

查看网卡绑定状态

1
2
cat /proc/net/bonding/bond0
cat /proc/net/bonding/bond1

CentOS8 配置 bond

  • 建立 bond 连接配置文件
    1
    
    nmcli c add con-name bond0 type bond ifname bond0 mode active-backup
    
  • 增加两个网卡都 bond0
    1
    2
    
    nmcli c add type bond-slave ifname eth1 master bond0
    nmcli c add type bond-slave ifname eth2 master bond0
    
  • 启动这两个 slave 连接
    1
    2
    
    nmcli c up bond-slave-eth1
    nmcli c up bond-slave-eth2
    

Mysql 二进制日志

MySQL 5.7 开启 binlog

  • 修改 my.cnf 文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    [mysqld]
    log-bin=[/存放目录/]mysql-bin #注意 mysql 可读写“存放目录”,默认数据存放目录
    expire-logs-days=7 #保留7天内修改过的 binglog 文件
    max-binlog-size=512M #单个 binlog 文件大小上限,默认1G
    #指定或忽略要复制的数据库,存在跨库问题
    binlog-do-db=db1
    binlog-db-db=db2
    #binlog-ignore-db=db1
    #binlog-ignore-db=db2
    

常用操作

  • 查看所有 binlog 文件列表
    1
    
    show master logs;
    
  • 查看 master 状态,包含最新 binlog 文件名和 position
    1
    
    show master status;
    
  • 清除过期 binlog 文件,并使用新编号的 binlog 文件开始记录日志
    1
    
    flush logs;
    
  • 删除 binlog 文件
    • 删除旧的 binlog 文件
      1
      2
      3
      
      purge master logs to 'mysql-bin.000573';
      purge master logs before '2018-04-18 06:00:00';
      purge master logs before DATE_SUB(NOW(), INTERVAL 2 DAY);
      
    • 清空所有 binlog 文件
      1
      
      reset master
      

使用 mysqlbinlog 命令查看 binlog 文件的内容

  • 使用
    1
    2
    3
    4
    
    # 查看日志
    mysqlbinlog [选项] binlog文件名
    # 恢复数据
    mysqlbinlog [选项] binlog文件名 | mysql -u用户名 -p密码 -D数据库 [-v]
    
  • 常用选项
    • –start-position=128 起始 pos
    • –stop-position=256 结束 pos
    • –start-datetime=“2018-08-08 00:00:00” 起始时间
    • –stop-datetime=“2018-08-09 12:00:00” 结束时间
    • –database=db_name 只恢复 db_name 数据库

使用 sql 查看 binlog 文件的内容

  • 查询语句
    1
    
    SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
    
  • 选项
    • log_name binlog文件名,默认第一个 binlog 文件
    • pos 查询起始 pos,默认 log_name 中的第一个 pos
    • offset 偏移 pos 个数
    • row_count 查询数量

调整 binlog_cache_size

  • 查看当前 binlog_cache_size 大小(byte),默认 32k
    1
    
    show variables like 'binlog_cache_size';
    
  • 查看当前 binlog_cache_use 和 binlog_cache_disk_use 次数
    1
    2
    3
    
    show status like 'binlog_cache%';
    -- binlog_cache_disk_use 使用临时文件写 binlog 文件的次数
    -- binlog_cache_use 使用缓存写 binlog 文件的次数
    

Mysql 缓存

MySQL 超时

  • connect_timeout 与客户端连接建立超时,默认10秒
  • interactive_timeout 交互终端超时断开,默认28800秒
  • wait_timeout 非交互终端超时断开,默认28800秒
  • net_read_timeout 从客户端读取数据超时,默认30秒
  • net_write_timeout 向客户端写入数据超时,默认60秒
  • innodb_lock_wait_timeout 锁等待超时,默认50秒
  • innodb_rollback_on_timeout 超时后回滚整个事务操作,默认OFF
  • slave_net_timeout 从库读取binlog失败后,等待指定秒后重新连接主库,默认60秒

查询缓存配置

** MySQL 8.0 已关闭该功能 **

CentOS7 笔记

常用初始配置

  • 系统更新
    1
    
    yum update
    
  • 禁用 firewalld
    1
    2
    
    systemctl stop firewalld
    systemctl disable firewalld
    
  • 禁用 NetworkManager
    1
    2
    
    systemctl stop NetworkManager
    systemctl disable NetworkManager
    
  • 禁用 postfix
    1
    2
    
    systemctl stop postfix
    systemctl disable postfix
    
  • 如果不用 NFS,可以禁用 rpcbind
    1
    2
    
    systemctl stop rpcbind
    systemctl disable rpcbind
    
  • 禁用 selinux,可能需要重启操作系统
    1
    2
    3
    
    sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
    setenforce 0
    # 可能需要重启
    
  • 配置网卡静态地址
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    cd /etc/sysconfig/network-scripts
    sed -i -e '/^BOOTPROTO/d' -e '/^ONBOOT/d' \
        -e '/^IPADDR/d' -e '/^NETMASK/d' -e '/^PREFIX/d' \
        -e '/^GATEWAY/d' -e '/^DNS/d' ${ifcfg}
    cat >> ${ifcfg} <<-END
    ONBOOT=yes
    BOOTPROTO=static
    IPADDR=${ip}
    PREFIX=${mask}
    GATEWAY=${gw}
    DNS1=${dns}
    END
    systemctl restart network
    
  • 修改 sysctl.conf
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    cat >> /etc/sysctl.conf <<-END
    # 防止一个套接字在有过多试图连接到达时引起过载
    net.ipv4.tcp_syncookies = 1
    # 连接队列的长度,默认值为128
    net.core.somaxconn = 1024
    # timewait的超时时间,设置短一些
    net.ipv4.tcp_fin_timeout = 10
    # os直接使用timewait的连接
    net.ipv4.tcp_tw_reuse = 1
    # 回收timewait连接
    net.ipv4.tcp_tw_recycle = 1
    END
    sysctl -p
    
  • 修改主机名
    1
    2
    3
    
    hostnamectl set-hostname ${hostname}
    sed -i "/[ \t]\+${hostname}[ \t]*$/d" /etc/hosts
    echo "${ip} ${hostname}" >> /etc/hosts
    
  • 禁用 sshd 域名解析
    1
    2
    
    sed -i '/UseDNS/d' /etc/ssh/sshd_config
    echo 'UseDNS no' >> /etc/ssh/sshd_config
    
  • 删除可能存在的 TMOUT 环境变量
    1
    
    sed -i '/^export[ \t]\+TMOUT=/d' /etc/profile
    
  • 配置 history 命令数量和执行时间
    1
    2
    
    echo 'export HISTSIZE=10000' > /etc/profile.d/history.sh
    echo 'export HISTTIMEFORMAT="[%F %T] "' >> /etc/profile.d/history.sh
    
  • 修改时间同步服务器地址
    1
    2
    
    sed -i '/^server /d' /etc/chrony.conf
    echo "server ${ip|domain} iburst" >> /etc/chrony.conf
    
  • 修改 rsyslog 服务的时间格式
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    cat > /etc/rsyslog.d/custom.conf <<EOF
    template(name="CustomTime" type="list"){
        property(name="timereported" dateformat="year")
        constant(value="-")
        property(name="timereported" dateformat="month")
        constant(value="-")
        property(name="timereported" dateformat="day")
        constant(value=" ")
        property(name="timereported" dateformat="hour")
        constant(value=":")
        property(name="timereported" dateformat="minute")
        constant(value=":")
        property(name="timereported" dateformat="second")
        constant(value=" ")
        property(name="hostname")
        constant(value=" ")
        property(name="syslogtag")
        constant(value=" ")
        property(name="msg" droplastlf="on")
        constant(value="\n")
    }
    $ActionFileDefaultTemplate CustomTime
    EOF
    
  • 其他检查
    • 卸载 ntpdate,换 chrony
    • 检查 /etc/rc.d/rc.local

安全设置

  • /etc/pam.d/sshd
    • 用户 ssh 登陆密码错误 3 次后锁住用户 10 分钟
      1
      
      auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root
      
  • /etc/login.defs
    • 密码过期天数
      1
      
      PASS_MAX_DAYS 60
      
    • 过期前警告天数
      1
      
      PASS_WARN_AGE 7
      
    • 最短使用天数
      1
      
      PASS_MIN_DAYS 1
      
    • 最短长度
      1
      
      PASS_MIN_LEN 8
      
  • /etc/pam.d/system-auth
    • 密码与前 5 次不同
      1
      
      password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
      
  • /etc/security/pwquality.conf
    • 密码最小长度 8 位
      1
      
      authconfig --passminlen=8 --update
      
    • 密码最少 2 种字符
      1
      
      authconfig --passminclass=2 --update
      
    • 最多 2 个连续相同字符
      1
      
      authconfig --passmaxrepeat=2 --update
      
    • 最多 4 个连续同类字符
      1
      
      authconfig --passmaxclassrepeat=4 --update
      
    • 至少 1 个小写字符
      1
      
      authconfig --enablereqlower --update
      
    • 至少 1 个大写字符
      1
      
      authconfig --enablerequpper --update
      
    • 至少 1 个数字
      1
      
      authconfig --enablereqdigit --update
      
    • 至少 1 个特殊字符
      1
      
      authconfig --enablereqother --update
      

Mongodb 笔记

数据迁移

导出集合数据到 json 或 csv 文件

  • 命令
    1
    
    mongoexport -d dbname -c collectionname -o file --type json/csv -f "field1,field2,...,fieldN"
    
  • 参数
    • -d 数据库名
    • -c 集合名
    • -o 输出文件名
    • –type 输出格式,默认 json
    • -f 输出字段,如果导出 csv,需指定字段名

导入数据到集合

  • 命令
    1
    
    mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f "field1,field2,...,fieldN"
    
  • 参数
    • -d 数据库名
    • -c 集合名
    • –type 导入格式,默认 json
    • -f 导入的字段名
    • –headerline 导入csv时,使用第一行的标题作为导入字段
    • –file 导入的文件

备份数据库

  • 命令
    1
    
    mongodump -h dbhost -d dbname -o backup_dir
    
  • 参数
    • -h ip[:port]
    • -d 数据库名
    • -o 备份数据存放目录,需提前建立

恢复数据库

  • 命令
    1
    
    mongorestore -h dbhost -d dbname --dir backup_dir
    
  • 参数 -h ip[:port] -d 数据库名 –dir 备份数据存放目录 –drop 恢复前,先删除当前数据

操作数据库

  • 默认数据库 test
  • 创建 use dbname
  • 查看当前选择的数据库 db
  • 查看数据库列表 show dbs,不显示空数据库
  • 删除数据库 use dbname; db.dropDatabase()

操作集合

创建

1
2
3
db.createCollection("集合名", {capped:false, autoIndexId:false, size:最大字节, max:文档最多数量})
## 或者在插入文档时自动创建
db.集合名.inert({})

删除

1
db.集合名.drop()

操作文档

insert

  • 插入一个文档
    1
    2
    3
    
    db.集合名.insert({})
    # 或者
    db.集合名.insertOne({})
    
  • 插入多个文档
    1
    2
    3
    
    db.集合名.insert([{},{},{},...,{}])
    # 或者
    db.集合名.insertMany([{},{},{},...,{}])
    

find

  • 查询匹配的文档
    1
    
    db.集合名.find({}).pretty()
    
  • 查询,只返回一个文档
    1
    
    db.集合名.findOne({})
    
    • 相等 {“key”:“value”}
    • 小于 {“key”:{$lt:“value”}}
    • 小于等于 {“key”:{$lte:“value”}}
    • 大于 {“key”:{$gt:“value”}}
    • 大于等于 {“key”:{$gte:“value”}}
    • 不等于 {“key”:{$ne:“value”}}
    • and {$and:[{},{}]}
    • or {$or:[{},{}]}
  • 投影
    1
    
    db.集合名.find({},{"key1":1,"key2":0 ...})
    
  • 限制返回文档数量
    1
    
    db.集合名.find({}).limit(N)
    
  • 跳过返回文档数量
    1
    
    db.集合名.find({}).limit(N).skip(N)
    
  • 排序,1升序,-1降序
    1
    
    db.集合名.find({}).sort({"key":1})
    

update

  • 更新一个文档
    1
    
    db.集合名.update({},{$set:{}})
    
  • 更新多个文档
    1
    
    db.集合名.update({},{$set:{},{multi:true}})
    

save

1
db.集合名.save({,...})

remove

  • 删除多条记录
    1
    
    db.集合名.remove({})
    
  • 删除一条记录
    1
    
    db.集合名.remove({},1)
    
  • 删除集合中的所有文档,相当于 truncate
    1
    
    db.集合名.remove()
    

索引

  • 创建索引,1升序,-1降序
    1
    
    db.集合名.createIndex({"key1":1,"key2":-1})
    

聚合

1
db.集合名.aggregate([{}])

用户

创建用户

  • 管理员权限
    1
    2
    3
    4
    5
    6
    7
    8
    
    use admin
    db.createUser(
        {
            user: "username",
            pwd: "password",
            roles: [{role: "root", db: "admin"}]
        }
    )
    
  • 测试库读写权限
    1
    2
    3
    4
    5
    6
    7
    8
    
    use testdb
    db.createUser(
        {
            user: "username",
            pwd: "password",
            roles: ["readWrite"]
        }
    )
    

验证身份

1
db.auth("username", "password")

列出所有用户

1
db.getUsers()

删除数据库用户

1
2
use testdb
db.dropUser("username")

更改用户密码

1
2
3
4
5
6
db.updateUser(
    "username",
    {
        pwd: "new_password"
    }
)

CentOS7 安装 zookeeper 集群

环境

主机名 eth0 IP eth1 IP 操作系统 ZK 版本 myid
zk221 192.168.1.221 192.168.16.221 CentOS7.5 3.4.14 221
zk222 192.168.1.222 192.168.16.222 CentOS7.5 3.4.14 222
zk223 192.168.1.223 192.168.16.223 CentOS7.5 3.4.14 223
  • 下载 zookeeper-3.4.14
  • eth0 网卡用于向客户端提供服务,eth1 网卡用于 zookeeper 集群内部通信

各节点初始配置

  • 关闭 selinux、防火墙
  • 部署 java 运行环境
  • 创建数据(快照日志)目录
    1
    
    mkdir -p /var/lib/zookeeper/data
    
  • 创建事物日志目录
    1
    
    mkdir -p /var/lib/zookeeper/dataLog
    
  • 创建服务日志目录
    1
    
    mkdir -p /var/log/zookeeper
    
  • 生成 myid 文件
    1
    2
    3
    4
    5
    6
    
    # zk221
    echo 221 > /var/lib/zookeeper/data/myid
    # zk222
    echo 222 > /var/lib/zookeeper/data/myid
    # zk223
    echo 223 > /var/lib/zookeeper/data/myid
    

部署 zookeeper

  • 登陆 zk221,下载 zookeeper,解压至 /opt/ 下
  • 生成配置文件
    1
    2
    
    cd /opt/zookeeper/conf/
    cp zoo_sample.cfg zoo.cfg
    
  • 修改 /opt/zookeeper/conf/zoo.cfg
    1
    2
    3
    4
    5
    6
    
    dataDir=/var/lib/zookeeper/data
    dataLogDir=/var/lib/zookeeper/dataLog
    # servers
    server.221=192.168.16.221:2888:3888
    server.222=192.168.16.222:2888:3888
    server.223=192.168.16.223:2888:3888
    
  • 修改 /opt/zookeeper/bin/zkEnv.sh
    1
    2
    
    # 找到 ZOO_LOG_DIR="." 一行,换成如下
    ZOO_LOG_DIR="/var/log/zookeeper"
    
  • 打包 zookeeper 目录,复制到 zk222 和 zk223 上

启动集群

  • 直接启动脚本
    • 在每个节点上启动 zookeeper 服务
      1
      
      /opt/zookeeper/bin/zkServer.sh start
      
  • systemd 启动
    • 创建 /usr/lib/systemd/system/zookeeper.service,内容如下
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      
      [Unit]
      Description=Zookeeper
      Requires=network.service
      After=network.service
      [Service]
      Environment=JAVA_HOME=/opt/jre
      ExecStart=/opt/zookeeper/bin/zkServer.sh start-foreground
      SuccessExitStatus=143
      [Install]
      WantedBy=multi-user.target
      
    • 启动 zookeeper 服务
      1
      2
      
      systemctl daemon-reload
      systemctl start zookeeper
      

查看集群状态

  • 查看节点状态
    1
    
    /opt/zookeeper/bin/zkServer.sh status
    

CentOS7 安装 Kafka 集群

环境

主机名 IP 操作系统 kafka 版本
kafka224 192.168.1.224 CentOS7.5 2.12
kafka225 192.168.1.225 CentOS7.5 2.12
kafka226 192.168.1.226 CentOS7.5 2.12
  • 下载 kafka_2.12-2.1.0.tgz
  • zookeeper 连接: 192.168.1.221:2181,192.168.1.222:2181,192.168.1.223:2181

各节点初始配置

  • 关闭 selinux、防火墙
  • 部署 java 运行环境
  • 创建数据目录
    1
    
    mkdir -p /var/lib/kafka
    
  • 创建日志目录
    1
    
    mkdir -p /var/log/kafka
    

部署 kafka

  • 登陆 kafka224,下载 kafka,解压至 /opt/ 下
  • 修改日志目录
    1
    2
    
    cd /opt/kafka/
    rm -rf logs && ln -s /var/log/kafka logs
    
  • 修改 /opt/kafka/config/server.properties
    1
    2
    3
    4
    
    broker.id=224
    listeners=PLAINTEXT://192.168.1.224:9092
    log.dirs=/var/lib/kafka
    zookeeper.connect=192.168.1.221:2181,192.168.1.222:2181,192.168.1.223:2181
    
  • 启动脚本(/opt/kafka/bin/kafka-server-start.sh)太繁琐,我精简了下
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    #!/bin/bash
    base_dir=$(dirname $0)
    if [ "x$KAFKA_LOG4J_OPTS" = "x" ]; then
        export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$base_dir/../config/log4j.properties"
    fi
    if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
        # jvm 堆内存根据实际情况修改
        export KAFKA_HEAP_OPTS="-Xmx2G -Xms2G"
        # 开启 jmx
        export JMX_PORT=1099
    fi
    EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc'}
    EXTRA_ARGS="-daemon "$EXTRA_ARGS
    exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$base_dir/../config/server.properties"
    
  • 打包 kafka 目录,复制到 kafka225 和 kafka226 上,并修改 server.properties
    1
    2
    3
    4
    5
    6
    
    # kafka225
    broker.id=225
    listeners=PLAINTEXT://192.168.1.225:9092
    # kafka226
    broker.id=226
    listeners=PLAINTEXT://192.168.1.226:9092
    

启动集群(两种启动方式)

  • 直接启动二进制
    • 在每个节点上启动 kafka 服务
      1
      
      /opt/kafka/bin/kafka-server-start.sh
      
  • systemd 启动
    • 创建 /usr/lib/systemd/system/kafka.service
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      
      [Unit]
      Description=Kafka
      Requires=network.service
      After=network.service
      [Service]
      Environment=JAVA_HOME=/opt/jre
      ExecStart=/opt/kafka/bin/kafka-server-start.sh
      ExecStop=/opt/kafka/bin/kafka-server-stop.sh
      Type=forking
      KillMode=none
      [Install]
      WantedBy=multi-user.target
      
    • 启动 kafka 服务
      1
      2
      
      systemctl daemon-reload
      systemctl start kafka
      

CentOS7 安装 elasticsearch 集群

环境

主机名 IP 操作系统 ES 版本
es227 192.168.1.227 CentOS7.5 6.5.4
es228 192.168.1.228 CentOS7.5 6.5.4
es229 192.168.1.229 CentOS7.5 6.5.4

各节点初始配置

  • 关闭 selinux、防火墙
  • 部署 java 运行环境
  • 创建 elastic 用户
    1
    
    useradd -m elastic
    
  • 创建数据目录
    1
    2
    3
    
    cd /var/lib
    mkdir elasticsearch
    chown elastic.elastic elasticsearch
    
  • 创建日志目录
    1
    2
    3
    
    cd /var/log
    mkdir -p elasticsearch
    chown elastic.elastic elasticsearch
    
  • 增加 sysctl.conf 配置,执行 sysctl -p 生效
    1
    
    vm.max_map_count = 262144
    
  • 增加 /etc/security/limits.conf 配置
    1
    2
    3
    4
    
    elastic soft nofile 65536
    elastic hard nofile 65536
    elastic soft memlock unlimited
    elastic hard memlock unlimited
    

部署 ELASTICSEARCH

  • 登陆 es227,下载 elasticsearch,解压至 /opt/ 下
  • 修改 elasticsearch 目录的权限
    1
    
    chown -R elastic.elastic /opt/elasticsearch
    
  • 修改 jvm 参数文件 /opt/elasticsearch/config/jvm.options
  • 修改 /opt/elsaticsearch/config/elasticsearch.yml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    cluster.name: TEST_ES_CLUSTER
    node.name: es227
    network.host: 192.168.1.227
    path.data: /var/lib/elasticsearch
    path.logs: /var/log/elasticsearch
    bootstrap.memory_lock: true
    discovery.zen.ping.unicast.hosts: ["192.168.1.227:9300", "192.168.1.228:9300", "192.168.1.229:9300"]
    discovery.zen.minimum_master_nodes: 2
    gateway.recover_after_nodes: 2
    
  • 打包 elasticsearch 目录,复制到 es228 和 es229 上,并修改 elasticsearch.yml
    1
    2
    3
    4
    5
    6
    
    # es228
    node.name: es228
    network.host: 192.168.1.228
    # es229
    node.name: es229
    network.host: 192.168.1.229
    

启动集群(两种启动方式)

  • 直接启动二进制
    • 在每个节点上启动 elasticsearch 服务
      1
      
      su - elastic -c '/opt/elasticsearch/bin/elasticsearch -d'
      
  • systemd 启动
    • 创建文件 /usr/lib/systemd/system/elasticsearch.service,内容如下
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      
      [Unit]
      Description=ElasticSearch
      Requires=network.service
      After=network.service
      [Service]
      User=elastic
      Group=elastic
      LimitNOFILE=65536
      LimitMEMLOCK=infinity
      Environment=JAVA_HOME=/opt/jre
      ExecStart=/opt/elasticsearch/bin/elasticsearch
      SuccessExitStatus=143
      [Install]
      WantedBy=multi-user.target
      
    • 启动 elasticsearch 服务
      1
      2
      
      systemctl daemon-reload
      systemctl start elasticsearch
      

查看集群状态

  • 查看集群节点状态
    1
    2
    3
    4
    
    # 查看节点状态
    curl http://192.168.1.228:9200/_cat/nodes?pretty
    # 查看集群状态
    curl http://192.168.1.228:9200/_cluster/state?pretty
    

安装分词插件

  • 登陆 es227,下载插件 elasticsearch-analysis-ik-6.5.4.zip 至根目录下
  • 复制该文件至 es228 和 es229 的根目录下
  • 每个节点上安装
    1
    2
    
    su - elastic
    /opt/elasticsearch/bin/elasticsearch-plugin install file:///elasticsearch-analysis-ik-6.5.4.zip
    
  • 配置远程扩展字典时,出现 java.net.SocketPermission 拒绝连接,此时需配置 jre 策略
    1
    2
    
    # vim /opt/jre/lib/security/java.policy,在最后一个 "}" 前追加下面一行
    permission java.net.SocketPermission "*:*","accept,connect,resolve";