python常用运维脚本实例小结
一、ps可以查看进程的内存占用大小,写一个脚本计算一下所有进程所占用内存大小的和。
(提示,使用psaux列出所有进程,过滤出RSS那列,然后求和)
注:ps-ef与psaux效果一样使用随意
importos list=[] sum=0 str1=os.popen('psaux','r').readlines() foriinstr1: str2=i.split() new_rss=str2[5] list.append(new_rss) foriinlist[1:-1]: num=int(i) sum=sum+num print'%s:%s'%(list[0],sum)
二、一键部署lvs与keepalived
注:部署keepalived配置文件,会自动将lvs部署好,不必单独搭建,但是要下载好ipvsadm
这里单独搭建了lvs
#提前配置好免密钥登陆,与apache服务 importpexpect importos ds_ip='192.168.102.143' rs1_ip='192.168.102.144' rs2_ip='192.168.102.145' vip='192.168.102.250' ds_cmd=['ipvsadm-C', 'ipvsadm-A-t{vip}:80-srr'.format(vip=vip), 'ipvsadm-a-t{vip}:80-r{rs1_ip}:80-g'.format(vip=vip,rs1_ip=rs1_ip), 'ipvsadm-a-t{vip}:80-r{rs2_ip}:80-g'.format(vip=vip,rs2_ip=rs2_ip), 'ifconfigens33:0{vip}broadcast{vip}netmask255.255.255.255up'.format(vip=vip), 'routeadd-host{vip}devens33:0'.format(vip=vip) ] #fords_cmdinds_cmd: rs1_cmd=[ 'ansiblers1-mshell-a"ifconfiglo:0{vip}broadcast{vip}netmask255.255.255.255up"&>/dev/null'.format(vip=vip), 'ansiblers1-mshell-a"routeadd-host{vip}devlo:0"&>/dev/null'.format(vip=vip), 'ansiblers1-mshell-a"echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore"&>/dev/null', 'ansiblers1-mshell-a"echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce"&>/dev/null', 'ansiblers1-mshell-a"echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore"&>/dev/null', 'ansiblers1-mshell-a"echo"2">/proc/sys/net/ipv4/conf/all/arp_announce"&>/dev/null', 'servicehttpdrestart'] #forrs_cmdinrs_cmd: rs2_cmd=[ 'ansiblers2-mshell-a"ifconfiglo:0{vip}broadcast{vip}netmask255.255.255.255up"&>/dev/null'.format(vip=vip), 'ansiblers2-mshell-a"routeadd-host{vip}devlo:0"&>/dev/null'.format(vip=vip), 'ansiblers2-mshell-a"echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore"&>/dev/null', 'ansiblers2-mshell-a"echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce"&>/dev/null', 'ansiblers2-mshell-a"echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore"&>/dev/null', 'ansiblers2-mshell-a"echo"2">/proc/sys/net/ipv4/conf/all/arp_announce"&>/dev/null', 'servicehttpdrestart'] ansible=''' echo"[rs1]">>/etc/ansible/hosts; echo"{rs1_ip}">>/etc/ansible/hosts; echo"[rs2]">>/etc/ansible/hosts; echo"{rs2_ip}">>/etc/ansible/hosts; '''.format(rs1_ip=rs1_ip,rs2_ip=rs2_ip) defAnsible(): res=os.system('yuminstallansible-y&>/dev/null') ifres==0: print('ansible安装完成!') os.system(ansible) deflvs(): i=os.system('yum-yinstallipvsadm&>/dev/null') ifi==0: print('lvs下载完成') forainds_cmd: res=os.system(a) ifres==0: print('ok') else: print('false') forbinrs1_cmd: res1=os.system(b) ifres1==0: print('ok') else: print('false') forcinrs2_cmd: res2=os.system(c) ifres2==0: print('ok') else: print('false') else: print('lvs下载失败') keepalived=''' #全局配置 !ConfigurationFileforkeepalived #全局配置 global_defs{ notification_email{ #收件人地址 } #邮件服务器 } VRRP配置DS1 vrrp_instanceVI_1{ stateMASTER#角色类型MASTER|BACKUP interfaceens33#网卡名称 virtual_router_id51#虚拟路由id(需要与BACKUP一致) priority100#优先级 advert_int1#没1秒检查一次 #nopreempt#非抢占模式 authentication{ auth_typePASS#认证类型主备之间必须一样 auth_pass1111#认证密码主备之间必须一样 } virtual_ipaddress{ 192.168.102.250#虚拟ip(vip) } } #LVS配置 virtual_server192.168.102.25080{ delay_loop3#健康检查时间间隔 lb_algorr#负载均衡调度算法 lb_kindDR#负载均衡转发规则 protocolTCP#协议 real_server192.168.102.14480{#要监控的real_server的ip和端口号 weight1#权重 TCP_CHECK{#基于tcp协议的检查 connect_timeout3#连接时间超时 retry3#重连次数 delay_before_retry3#重连间隔时间 } } real_server192.168.102.14580{ weight1 TCP_CHECK{ connect_timeout3 retry3 delay_before_retry3 } } }''' defKeepalived(): d=os.system('yuminstallkeepalived-y&>/dev/null') ifd==0: print('keeplived下载完成') withopen(r'/etc/keepalived/keepalived.conf','w',encoding='utf-8')asf: f.write(keepalived) e=os.system('systemctlstartkeepalived') ife==0: print('keepalived部署完成!') else: print('keepalived部署失败') else: print('keepalived下载失败') defmain(): #key() Ansible() #ssh_copy() lvs() Keepalived() if__name__=='__main__': main()
三、用python3编写一个监控上面lvs服务状态和系统资源的脚本
importyagmail importparamiko importsocket importre importtime ssh=paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) rs1_ip='192.168.102.144' rs2_ip='192.168.102.145' ds_ip='192。168.102.143' disk_cmd="df-m|grep/dev/sda1|awk'{print$4}'" cpu_cmd=''' topn1d1b-p1|grep'%Cpu'|awk-F","'{print$4}'|awk-F"id"'{print$1}'|awk-F"."'{print$1}' ''' free_cmd="free-m|grepMem|awk'{print$7}'" defconnect1(): ssh.connect('{rs1_ip}'.format(rs1_ip=rs1_ip),22,'root','1',timeout=3) defconnect2(): ssh.connect('{rs2_ip}'.format(rs2_ip=rs1_ip),22,'root','1',timeout=3) defmail(head,Contents): yag=yagmail.SMTP(user="15898297124@163.com",password="zz54605519",host='smtp.163.com') yag.send('15898297124@163.com',subject=head,contents=Contents) yag.close() defhttp(): socket.setdefaulttimeout(1) server=socket.socket() host_list=['%s:80'%(rs1_ip),'%s:80'%(rs2_ip)] forinfoinhost_list: ip=re.compile('(.*?):(.*)').search(info).group(1) port=re.compile('(.*?):(.*)').search(info).group(2) res=server.connect_ex((ip,int(port))) ifres!=0: mail(ip,'%s不通'%port) defdisk(): connect1() stdin1,stdout1,stderr1=ssh.exec_command(disk_cmd) disk1=int(stdout1.read().decode('utf-8')) print('%s节点disk剩余空间为%sM'%(rs1_ip,disk1)) ifdisk1<=200: mail(rs1_ip,'disk剩余空间为%sM'%disk1) connect2() stdin2,stdout2,stderr2=ssh.exec_command(disk_cmd) disk2=int(stdout2.read().decode('utf-8')) print('%s节点disk剩余空间为%sM'%(rs2_ip,disk2)) ifdisk2<=200: mail(rs2_ip,'disk剩余空间为%sM'%disk2) defcpu(): connect1() stdin1,stdout1,stderr1=ssh.exec_command(cpu_cmd) cpu1=int(stdout1.read().decode('utf-8')) cpu=100-cpu1 print('%s节点cpu使用率为百分之%s'%(rs1_ip,cpu)) ifcpu>=80: mail(rs1_ip,'cpu使用量为%s'%cpu) connect2() stdin2,stdout2,stderr2=ssh.exec_command(cpu_cmd) cpu2=int(stdout2.read().decode('utf-8')) cpu=100-cpu2 print('%s节点cpu使用率为百分之%s'%(rs2_ip,cpu)) ifcpu>=80: mail(rs2_ip,'cpu使用量为%s'%cpu) deffree(): connect1() stdin1,stdout1,stderr1=ssh.exec_command(free_cmd) free1=int(stdout1.read().decode('utf-8')) print('%s节点磁盘剩余空间为%sM'%(rs1_ip,free1)) iffree1<=200: mail(ds_ip,'磁盘剩余空间为%sM'%free1) connect2() stdin2,stdout2,stderr2=ssh.exec_command(disk_cmd) free2=int(stdout2.read().decode('utf-8')) print('%s节点磁盘剩余空间为%sM'%(rs2_ip,free2)) iffree2<=200: mail(ds_ip,'磁盘剩余空间为%sM'%free2) defmain(): whileTrue: http() cpu() free() disk() time.sleep(60) if__name__=='__main__': main()
四、用python编写一键部署数据库主从服务
主服务器
importpexpect importos importconfigparser #HOSTNAME_DB1='db1' #HOSTNAME_DB2='db2' #DB1='192.168.254.24' #DB2='192.168.254.27' DBPASSWORD='1' defrepo(): os.system('touch/etc/yum.repos.d/mariadb.repo') withopen('/etc/yum.repos.d/mariadb.repo','w',encoding='utf8')asf: f.write('[mariadb]') config=configparser.ConfigParser() config.read("/etc/yum.repos.d/mariadb.repo",encoding="utf-8") config.set('mariadb','name','MariaDB') config.set('mariadb','baseurl','http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/') config.set('mariadb','gpgkey','http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB') config.set('mariadb','gpgcheck','1') config.write(open('/etc/yum.repos.d/mariadb.repo','w')) defmariadb(): a=os.system('yuminstallMariaDB-y&>/dev/null') ifa==0: b=os.system('systemctlstartmariadb&>/dev/null') ifb==0: print('mariadb启动成功') child=pexpect.spawn('mysql_secure_installation') child.expect('enterfornone') child.sendline('') child.expect('Y/n') child.sendline('y') child.expect('New') child.sendline(DBPASSWORD) child.expect('Re-enter') child.sendline(DBPASSWORD) child.expect('successfully') child.sendline('') child.sendline('') child.sendline('') child.sendline('') child.interact() child.close() defdb1(): config=configparser.ConfigParser() config.read("/etc/my.cnf.d/server.cnf",encoding="utf-8") config.set('mysqld','server-id','1') config.set('mysqld','log-bin','mysql-bin') config.write(open('/etc/my.cnf.d/server.cnf','w')) b=os.system('systemctlrestartmariadb') ifb==0: #os.system('mysql-uroot-p%s'%DBPASSWORD) #os.system("CREATEUSER'slave'@'%'IDENTIFIEDBY'slave';") #os.system("GRANTREPLICATIONSLAVEON*.*TO'slave'@'%';") #os.system('flushprivileges;') #os.system('showmasterstatus') child=pexpect.spawn('mysql-uroot-p1') child.expect('none') child.sendline("CREATEUSER'slave'@'%'IDENTIFIEDBY'slave';") child.expect('none') child.sendline("GRANTREPLICATIONSLAVEON*.*TO'slave'@'%';") child.expect('none') child.sendline('flushprivileges;') child.expect('none') child.sendline('showmasterstatus;') child.interact() child.close() defmain(): repo() mariadb() db1() if__name__=='__main__': main()
从服务器
importpexpect importos importconfigparser #HOSTNAME_DB1='db1' #HOSTNAME_DB2='db2' DB1='192.168.102.143' #DB2='192.168.254.27' DBPASSWORD='1' defrepo(): os.system('touch/etc/yum.repos.d/mariadb.repo') withopen('/etc/yum.repos.d/mariadb.repo','w',encoding='utf8')asf: f.write('[mariadb]') config=configparser.ConfigParser() config.read("/etc/yum.repos.d/mariadb.repo",encoding="utf-8") config.set('mariadb','name','MariaDB') config.set('mariadb','baseurl','http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/') config.set('mariadb','gpgkey','http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB') config.set('mariadb','gpgcheck','1') config.write(open('/etc/yum.repos.d/mariadb.repo','w')) defmariadb(): a=os.system('yuminstallMariaDB-y') ifa==0: b=os.system('systemctlstartmariadb&>/dev/null') ifb==0: print('mariadb启动成功') child=pexpect.spawn('mysql_secure_installation') child.expect('enterfornone') child.sendline('') child.expect('Y/n') child.sendline('y') child.expect('New') child.sendline(DBPASSWORD) child.expect('Re-enter') child.sendline(DBPASSWORD) child.expect('successfully') child.sendline('') child.sendline('') child.sendline('') child.sendline('') defdb2(): config=configparser.ConfigParser() config.read("/etc/my.cnf.d/server.cnf",encoding="utf-8") config.set('mysqld','server-id','2') config.write(open('/etc/my.cnf.d/server.cnf','w')) b=os.system('systemctlrestartmariadb') ifb==0: bin='mysql-bin.000001' pos=765 #os.system('mysql-uroot-p%s'%DBPASSWORD) #os.system('''mysql-uroot-p%s-e"CHANGEMASTERTOMASTER_HOST='%s',MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_LOG_FILE='%s',MASTER_LOG_POS=%s;"'''%(DBPASSWORD,DB1,bin,pos)) #os.system("mysql-uroot-p%s-e'startslave;'"%DBPASSWORD) child=pexpect.spawn('mysql-uroot-p%s'%DBPASSWORD) child.expect('none') child.sendline("CHANGEMASTERTOMASTER_HOST='%s',MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_LOG_FILE='%s',MASTER_LOG_POS=%s;"%(DB1,bin,pos)) child.expect('none') child.sendline('startslave;') child.interact() child.close() defmain(): repo() mariadb() db2() if__name__=='__main__': main()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。