ansible的安装

考虑到环境的多样性,这儿使用python的虚拟环境安装使用ansible模块

cd /opt

##安装ansible的python3虚拟环境(需要先安装python3环境在opt目录下面)
/opt/python3/bin/pip install virtualenv
/opt/python3/bin/virtualenv -p /opt/python3/bin/python3 ansible_vitualenv

##启动ansible的python3虚拟环境
source /opt/ansible_vitualenv/bin/activate

##安装ansible模块以及依赖模块
pip install ansible paramiko PyYAML jinja2

##检测是否安装成功
ansible --version

K8S集群搭建

  • 本集群搭建在 aws上面,使用的是UBUNTU18.04系统
  • 集群环境如下:
master节点: 172.31.25.36
node1节点: 172.31.21.5
node2节点: 172.31.23.174
  • 安装docker,参考以下文章
  • 安装k8s
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
echo " " >>  /etc/profile
echo "## setting for k8s" >> /etc/profile
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
. /etc/profile
kubeadm init --apiserver-advertise-address=172.31.25.36 --pod-network-cidr=192.168.16.0/20  ## 初始化master
curl -L "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" > weave.yaml  ##  安装weave网络
修改 weave.yaml  再env下加入:
  - name: IPALLOC_RANGE
    value: 192.168.16.0/20
kubectl  apply -f weave.yaml
kubectl get pods -n kube-system -o wide ## 查看pods状态
kubeadm join 172.31.25.36:6443 --token lbm7wf.hiwr8d1ed5nxkxfh \
    --discovery-token-ca-cert-hash sha256:b2758c8b463658df45f0c2a665b5985fdb302c3efbe260921ff4a56b84c8445a  ## 在node节点运行,将node加入到master当中
kubectl get nodes ## 查看集群状态
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml  ## 安装kubernetes-dashboard
  • 创建一个dashboard登录用户
vi jiang-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jiang
  namespace: kube-system
vi jiang-user-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dashboard:jiang
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: jiang
  namespace: kube-system
kubectl create -f jiang-user-role-binding.yaml
kubectl get secret -n kube-system | grep jiang ## 得到jiang-token-fhrsq 这个用户的对象
kubectl describe secret/jiang-token-fhrsq -n kube-system  ## 得到token,登录的时候就使用这个token登录

test 常用命令

--- 数值比较
    n1 -eq n2       --- 检查n1是否与n2相等
    n1 -ge n2       --- 检查n1是否大于等于n2
    n1 -gt n2       --- 检查n1是否大于n2
    n1 -le n2       --- 检查n1是否小于等于n2
    n1 -lt n2       --- 检查n1是否小于n2
    n1 -ne n2       --- 检查n1是否不等于n2

--- 字符串比较
    str1 == str2        --- 检查str1是否和str2相同
    str1 != str2    --- 检查str1是否和str2不同
    str1 < str2     --- 检查str1是否比str2小
    str1 > str2     --- 检查str1是否比str2大
    -n str1         --- 检查str1的长度是否为非0
    -z str1         --- 检查str1的长度是否为0
PS:大于小于符号必须转义,否则shell会把他们当做重定向符号,而把字符串当做文件名;大于小于顺序和sort命令所采用的不同

--- 文件比较
    -d file             --- 检查file是否存在并是一个目录
    -e file             --- 检查file是否存在
    -f file             --- 检查file是否存在并是一个文件
    -r file             --- 检查file是否存在并可读
    -s file             --- 检查file是否存在并非空
    -w file             --- 检查file是否存在并可写
    -x file             --- 检查file是否存在并可执行
    -O file             --- 检查file是否存在并属当前用户所有
    -G file             --- 检查file是否存在并且默认组与当前用户相同
    file1 -nt file2     --- 检查file1是否比file2新
    file1 -ot file2     --- 检查file1是否比file2久
    file1 -ef file2     --- 判断file1和file2的Inode号是否一致

--- 多重条件判断
    判断1 -a 判断2      --- 逻辑与,判断和判断2都成立,最终的结果才为真
    判断1 -o 判断2      --- 逻辑或,判断1和判断2有一个成立,最终的结果就为真
    ! 判断            --- 逻辑非,使原始的判断取反

yum安装最新mariadb

该测试系统为centos7.x

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
sudo yum install MariaDB-server MariaDB-devel galera MariaDB-client MariaDB-shared MariaDB-backup MariaDB-common
systemctl start mariadb
systemctl enable mariadb
mysql_secure_installation  ## 初始化数据库

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