1.使用python fabric进行Linux基础配置

使用python,可以让任何事情高效起来,包括运维工作,fabric正式这样一套基于python2的类库,它执行本地或远程shell命令提供了操作的基本套件(正常或通过sudo)和上传/下载文件,如提示用户输入运行辅助功能,或中止执行。

用Python3开发的部署工具叫fabric3:fabric3,和fabric一样最大特点是不用登录远程服务器,在本地运行远程命令,几行Python脚本就可以轻松部署。

典型用途包括创建一个包含一个或多个函数的Python模块,然后通过fab命令行工具执行它们。下面是一个小而全的“fab file”包含一个单独的任务:

from fabric.api import rundef host_type():run('uname -s')

执行方法:

 fab -f deploy.py go

Fabric提供几个简单的API来完成所有的部署,最常用的是local()和run(),分别在本地和远程执行命令,put()可以把本地文件上传到远程,当需要在远程指定当前目录时,只需用with cd(‘/path/to/dir/’):即可。
默认情况下,当命令执行失败时,Fabric会停止执行后续命令。

有时,我们允许忽略失败的命令继续执行,比如run(‘rm /tmp/abc’)在文件不存在的时候有可能失败,这时可以用with settings(warn_only=True):执行命令,这样Fabric只会打出警告信息而不会中断执行。

Fabric是如何在远程执行命令的呢?其实Fabric所有操作都是基于SSH执行的,必要时它会提示输入口令,所以非常安全。更好的办法是在指定的部署服务器上用证书配置无密码的ssh连接。

更多请fabric参考官方文档,http://www.fabfile.org/

1.1 基建工作基本流程

对于私有云的用户来说,服务器的基建工作比较重要,需要做一些规范化的统一操作,方便后序搭建集群时候服务器上的操作系统有统一的配置,比如CDH,TDH等的集群管理工具,都有这样的要求。

当然,如果是公有云,不用考虑这么多。私有云追赶潮流的话,直接上docker或者openstack就好。下面就是比较low的基建流程,基建工作主要流程为:

  1. 修改hostname
  2. 关闭sshd
  3. 关闭Selinux以及防火墙
  4. 重启
  5. 格式化磁盘
  6. 挂载磁盘
  7. Check上述流程结果。

1.2 使用anaconda2包(有网环境下准备)

在有网环境下,pip instatll fabric后将anaconda打包
解压安装到/opt下

tar -xzf anaconda2.tar.gz
pwdmkdir python
cd python/
mv ../anaconda2* .mkdir deployment
cd deployment/vim deploy.py (copy 下一节的内容)
//在当前命令行上下文,加入anaconda环境变量
ls /opt/python/anaconda2/bin/
PATH=/opt/python/anaconda2/bin;$PATH

1.3 python 代码,deploy.py

#-*- coding: utf-8 -*-import sys
from fabric.api import *env.user = 'root'
hostList = []
hostnameprefix='hostname-'
for i in range(1,n):   #ip rangehostList.append(hostnameprefix + str(i))env.hosts = hostList
env.password = 'Pass1234'
diskList='bcdefghijklm'fstabappend='''
/dev/sdb1       /mnt/data01     xfs     defaults        0       0
#.......
/dev/sdc1       /mnt/data02     xfs     defaults        0       0'''with open('/root/.ssh/authorized_keys', 'r') as f:sshkey = f.read()def gethostname():run('hostname')# only for RHEL7.2
def changehostname():cmd = '''num=`ifconfig| grep your_ip | awk '{print $2}' | cut -d '.' -f 4` && echo hostname-$num > /etc/hostname '''run(cmd)def checksshd():cmd = 'grep UseDNS /etc/ssh/sshd_config'run(cmd)# only for RHEL7.2
def disableSSHDNS():cmd = '''echo UseDNS no >> /etc/ssh/sshd_config'''run(cmd)def getSelinux():cmd = '''grep 'SELINUX=' /etc/selinux/config && getenforce'''run(cmd)def disableSelinux():cmd = '''sed -i 's/SELINUX=.*[=A-Za-z]$/SELINUX=disabled/g' /etc/selinux/config'''run(cmd)def getFirewalld():cmd = 'systemctl status firewalld'run(cmd, warn_only=True)def disableFirewalld():cmd = 'systemctl disable firewalld && systemctl stop firewalld'run(cmd)def checkdiskparted():for d in diskList:run('''parted /dev/sd%s print ''' % (d))def parteddisk():for d in diskList:run('''parted /dev/sd%s mklabel gpt ''' % (d))run('''parted /dev/sd%s mkpart primary %s %s''' % (d, '0%', '100%'))def mkfsdisk():for d in diskList:run('''mkfs.xfs /dev/sd%s1 ''' % (d))def mountdisk():run('cp /etc/fstab /root/fstab.bak')run('''mkdir /mnt/data0{1,2,3,4,5,6,7,8,9} /mnt/data1{0,1,2}''')run('echo >> /etc/fstab')run('''tee -a /etc/fstab <<EOF%sEOF''' % (fstabappend))run('mount -a')def checkmount():run('''df -h | grep '/mnt/data'| wc -l ''')def checknetspeed():run(''' ethtool bond0| grep Speed ''')@runs_once
def confirm_opetions(message):return prompt(message, default='N')## !!!!!!!!!!!!!! don't to run this function
@task
def rebootall(lhost='default'):
#    if lhost in env.hosts:
#        env.hosts.remove(lhost)
#    else :
#        print('*******************')
#        print('give me the lhost , tell me: who are you?')
#        print('*******************')
#        sys.exit(-1)
#     reboot(use_sudo=False)run('shutdown -r +3')@task
def nopasswd():run('mkdir -p /root/.ssh && chmod 700 /root/.ssh && echo "%s" >> /root/.ssh/authorized_keys && chmod 644 /root/.ssh/authorized_keys' % (sshkey))@task
def go():changehostname()
#    disableSSHDNS()
#    disableSelinux()
#    disableFirewalld()
#    mkfsdisk()
#    mountdisk()@task
def check():gethostname()checksshd()getSelinux()getFirewalld()checkdiskparted()checkmount()checknetspeed()

1.4 LINUX 基建使用的命令参考

  • 命令进行ip与主机名字符串的拼接:
num=`ifconfig| grep yourip | awk '{print $2}' | cut -d '.' -f 4` && echo gaibdv1_$num
  • 找到Selinux状态
grep 'SELINUX=' /etc/selinux/config && getenforce
  • 关闭Selinux
sed -i 's/SELINUX=.*[=A-Za-z]$/SELINUX=disabled/g' /etc/selinux/config
  • 格式化磁盘
for d in diskList:run('''parted /dev/sd%s mklabel gpt ''' % (d))run('''parted /dev/sd%s mkpart primary %s %s''' % (d, '0%', '100%'))
  • 获取网速
ethtool bond0| grep Speed

2. RHEL 7.2 部分优化

2.1 RHEL 7.x系统的闪光点与新特性

  • XFS文件系统

  • Linux Container(Docker)

  • RHEV 3.0 红帽企业级虚拟化

RHEV-M能管理虚拟机与其磁盘镜像,安装ISO,进行高可用性设置,创建虚拟机模板等,这些都能从图形web界面完成。也可使用RHEV-M管理两种类型的hypervisor。RHEV自身带有一个独立的裸机hypervisor,基于RHEL与KVM虚拟化,作为托管的物理节点使用。另外,如果你想从RHEV管理运行在RHEL上的虚拟机,可注册RHEL服务器到RHEV-M控制台。

2.2 部分新旧命令对比

任务 旧命令 新命令
使某服务自动启动 chkconfig –level 3 httpd on systemctl enable httpd.service
使某服务不自动启动 chkconfig –level 3 httpd off systemctl disable httpd.service
检查服务状态 service httpd status systemctl status httpd.service (服务详细信息)
systemctl is-active httpd.service (仅显示是否 Active)
显示所有已启动的服务 chkconfig –list systemctl list-units –type=service
启动某服务 service httpd start systemctl start httpd.service
停止某服务 service httpd stop systemctl stop httpd.service
重启某服务 service httpd restart systemctl restart httpd.service

2.3 更新的命令RHEL7.2 命令更新

一、CentOS的Services使用了systemd来代替sysvinit管理
二、修改系统运行级别
三、其他配置工具

主要是多了systemd这个软件,采用了以下新技术:

采用Socket激活式与总线激活式服务,以提高相互依赖的各服务的并行运行性能;
用cgroups代替PID来追踪进程,以此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。

Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。主要负责控制systemd系统和服务管理器。从设计构思上说,由于systemd使用了cgroup与fanotify等组件以实现其特性,所以只适用于Linux。

在Linux生态系统中,Systemd被部署到了大多数的标准Linux发行版中,只有为数不多的几个发行版尚未部署。Systemd通常是所有其它守护进程的父进程,但并非总是如此。

其他请看参考7。

2.4 优化配置 (未完待续。。。)

可能优化的地方

  • 更新系统
 yum  update -y
  • 给/etc/rc.local添加执行权限
chmod +x /etc/rc.d/rc.local
  • 加大打开文件数的限制(open files)
ulimit -n
ulimit -a
vi /etc/security/limits.conf
最后添加
* soft nofile 1024000
* hard nofile 1024000
hive   - nofile 1024000
hive   - nproc  1024000用户进程限制
# sed -i 's#4096#65535#g'   /etc/security/limits.d/20-nproc.conf  #加大普通用户限制  也可以改为unlimited
#  egrep -v "^$|^#" /etc/security/limits.d/20-nproc.conf
*          soft    nproc     65535
root       soft    nproc     unlimitedreboot
  • 优化内核
cat /etc/sysctl.conf
#CTCDN系统优化参数
#关闭ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
#决定检查过期多久邻居条目
net.ipv4.neigh.default.gc_stale_time=120
#使用arp_announce / arp_ignore解决ARP映射问题
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
# 避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 开启恶意icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses = 1
#关闭路由转发
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
#开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
#处理无源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
#关闭sysrq功能
kernel.sysrq = 0
#core文件名中添加pid作为扩展名
kernel.core_uses_pid = 1
# 开启SYN洪水攻击保护
net.ipv4.tcp_syncookies = 1
#修改消息队列长度
kernel.msgmnb = 65536
kernel.msgmax = 65536
#设置最大内存共享段大小bytes
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
#timewait的数量,默认180000
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_wmem = 4096        16384   4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 262144
#限制仅仅是为了防止简单的DoS 攻击
net.ipv4.tcp_max_orphans = 3276800
#未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
#内核放弃建立连接之前发送SYNACK 包的数量
net.ipv4.tcp_synack_retries = 1
#内核放弃建立连接之前发送SYN 包的数量
net.ipv4.tcp_syn_retries = 1
#启用timewait 快速回收
net.ipv4.tcp_tw_recycle = 1
#开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
#当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
#允许系统打开的端口范围
net.ipv4.ip_local_port_range = 1024    65000
#修改防火墙表大小,默认65536
net.netfilter.nf_conntrack_max=655350
net.netfilter.nf_conntrack_tcp_timeout_established=1200
# 确保无人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0本文出自 “兰芷” 博客,请务必保留此出处http://7826443.blog.51cto.com/7816443/1775248
sysctl -p  #生效
  • vim基本设置
 vim  /root/.vimrc
set history=1000
autocmd InsertLeave * se cul
autocmd InsertLeave * se nocul
set nu
set bs=2
syntax on
set laststatus=2
set tabstop=4
set go=
set ruler
set showcmd
set cmdheight=1
hi CursorLine   cterm=NONE ctermbg=blue ctermfg=white guibg=blue guifg=white
set hls
set cursorline
set ignorecase
set hlsearch
set incsearch
set helplang=cninoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {}<ESC>i
inoremap < <><ESC>i
inoremap " ""<ESC>i
inoremap ' ''<ESC>i

日志系统简介

在rhel7系统中有两个日志服务,分别是:

  • rsyslog
  • systemd-journal

systemd-journald是一个改进型日志管理服务,可以收集来自内核、系统早期启动阶段的日志、系统守护进程在启动和运行中的标准输出和错误信息,还有syslog的日志。该日志服务仅仅把日志集中保存在单一结构的日志文件/run/log中,由于日志是经历过压缩和格式化的二进制数据,所以在查看和定位的时候很迅速。默认情况下并不会持久化保存日志,只会保留一个月的日志。另外,一些rsyslog无法收集的日志也会被journal记录到。

rsyslog作为传统的系统日志服务,把所有收集到的日志都记录到/var/log/目录下的各个日志文件中。常见的日志文件如下:

/var/log/messages 绝大多数的系统日志都记录到该文件/var/log/secure 所有跟安全和认证授权等日志都会记录到此文件/var/log/maillog 邮件服务的日志/var/log/cron crond计划任务的日志/var/log/boot.log 系统启动的相关日志

linux命令大全

http://man.linuxde.net/


参考文献

1.官方文档
http://www.fabfile.org/

2.参考
http://wklken.me/posts/2013/03/25/python-tool-fabric.html

3.python3中使用fabric3

https://github.com/mathiasertl/fabric/
pip install Fabric3

4.关闭UseDNS加速SSH登录

经常登陆SSH的朋友可以感觉出,每次登录SSH时总是要停顿等待一下才能连接上,,这是因为OpenSSH服务器有一个DNS查找选项UseDNS默认情况下是打开的。
UseDNS 选项打开状态下,当客户端试图登录SSH服务器时,服务器端先根据客户端的IP地址进行DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,验证与其原始IP地址是否一致,这是防止客户端欺骗的一种措施,但一般我们的是动态IP不会有PTR记录,打开这个选项不过是在白白浪费时间而已,不如将其关闭。

http://www.kwx.gd/CentOSApp/Centos-SSH-UseDNS.html

6.fabric使用简单例子,中文:
http://www.cnblogs.com/MacoLee/p/5680672.html
另一个参考:
http://blog.csdn.net/wklken/article/details/8719541/

7.RHEL 一些改变

http://www.ha97.com/5657.html
https://linux.cn/article-5926-1.html

8.优化RHEL

http://hequan.blog.51cto.com/5701886/1789146/

9.日志
http://www.linuxidc.com/Linux/2016-01/127729.htm
http://blog.csdn.net/sinat_34689375/article/details/53789592
https://blog.linuxeye.cn/400.html


转载于:https://www.cnblogs.com/wangyaning/p/7853870.html

使用python fabric搭建RHEL 7.2大数据基础环境以及部分优化相关推荐

  1. 大数据基础环境搭建的从spark到hadoop,从底层硬件到上层软件的一些必备注意事项

    一.硬件环境 硬件如何搭配,能做到比较高的性价比,不存在短板.合理的硬件搭配,对系统的稳定性也很关键. 1.CPU不是核数越高越好,性价比才是关键. 经常遇到很多的企业级客户,他们机器配置非常高,CP ...

  2. 2018年全国高校教师“Python编程、应用及华为大数据”培训班

    关于举办2018年全国中高等院校教师 "Python编程.应用及华为大数据"培训班通知 全国各中高等院校计算机.软件等相关院(系): Python是一门免费.开源的跨平台高级动态编 ...

  3. 2018年全国中高等院校教师“Python编程、应用及华为大数据” 、“网络空间安全”、“区块链”培训班...

    关于举办2018年全国中高等院校教师"Python编程.应用及华为大数据" ."网络空间安全"."区块链"培训班通知 全国各中高等院校计算机 ...

  4. 大数据基础——Hadoop大数据平台搭建

    文章目录 前言 Hadoop大数据平台搭建 一.Hadoop原理和功能介绍 二.Hadoop安装部署 三.Hadoop常用操作 总结 前言 分布式机器学习为什么需求大数据呢?随着海量用户数据的积累,单 ...

  5. 视频教程-Python科学计算与图形渲染库-大数据

    Python科学计算与图形渲染库 东北大学计算机专业硕士研究生,欧瑞科技创始人&CEO,曾任国内著名软件公司项目经理,畅销书作者,企业IT内训讲师,CSDN学院专家讲师,制作视频课程超过100 ...

  6. 搭建大数据运行环境之二

    前言 上篇文章咱们将大数据相关的一些组件都集成安装在了一个docker中 搭建大数据运行环境之一 这篇文章咱们继续 启动下该docker中的大数据相关的组件 将大数据运行环境跑起来 上篇文章的几个注意 ...

  7. 5分钟搭建大数据学习环境

    想学大数据,先搭个环境再说,要准备多少台服务器,每台服务器的基础环境设置,各个服务器的网络互联,真是很麻烦的一件事 第一座山先把想入门的学习者挡在门外,别放弃,这里又一个即全面又快捷的搭建大数据环境的 ...

  8. 在阿里云中搭建大数据实验环境

    云计算是和自来水一样的商业模式.有了自来水,我们可以不用自己挖井,就可以快速.便捷.廉价地获得水资源.而有了云计算,我们就可以不用自己建机房.买设备.维护系统,就可以快速.便捷.廉价地获得IT资源(C ...

  9. 【源码开发分享】计算机毕业设计之Python+Spark+Scrapy新闻推荐系统 新闻大数据 新闻情感分析 新闻文本分类 新闻数据分析 新闻爬虫可视化 大数据毕业设计

    开发技术 Hadoop.Spark.SparkSQL.Python.Scrapy爬虫框架.MySQL.协同过滤算法(双算法,基于用户.基于物品全实现).阿里云短信.百度AI人工智能识别.支付宝沙箱支付 ...

  10. 企业如何搭建营销部门的大数据天文望远镜

    DMRC,即Digital Marketing Research Centre--数字营销研究中心,是<哈佛商业评论>中文版(HBR中文版)与时趣Social Touch强强携手创办的一间 ...

最新文章

  1. write()和read()
  2. 网络工程计算机文科可以报考么,文科生可报考自考本科网络工程吗?
  3. Java开发中的几种对象的说明(PO,VO,DTO,BO,POJO,DAO,SAO等)
  4. 关系数据库SQL语言核心功能
  5. 链表题目--2 求链表的中间结点 和 求链表中倒数第k个结点
  6. mysql中怎么存住文件链接_数据库如何保存链接文件
  7. python3 threading是否被抛弃_Python3中的线程模块是否发生了变化?如果是,怎么办?...
  8. IT人士十大不良饮食习惯及改进建议
  9. 安卓Toast显示提示消息(自定义view,根据子线程消息显示提示)
  10. 年薪 80w 的程序员被鄙视了!
  11. 开源直播推流sdk_携程移动直播探索
  12. 2020年日历电子版(打印版)_2020年日历表(带农历)下载-2020年日历全年表Excel打印版下载 - 欧普软件园...
  13. linux cat命令查找文件内容
  14. 迁移学习与Transformer架构
  15. java 线性回归_java实现简单线性回归
  16. QT实现ping功能
  17. 建立您的启动:运行多个域
  18. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划
  19. word 删除所有 ActiveX控件,重新启用word自动保存
  20. 几种图像处理库的研究

热门文章

  1. js字符串常用判断方法
  2. MEF(Managed Extensibility Framework)学习笔记
  3. 怎样才是真正的架构师
  4. 自然语言处理跟踪研究
  5. ICLR'22 | cosFormer:重新思考注意力机制中的Softmax
  6. 从零实现爬虫和情感分类模型(二)
  7. 【ACL2020】关于正式风格迁移的数据增强方法
  8. GBDT 如何用于分类问题
  9. 干货 | 大公司机器学习算法的面试经验
  10. 利用python进行数据分析—8.数据清洗与准备