python常用运维脚本实例小结

python常⽤运维脚本实例⼩结⼀、ps 可以查看进程的内存占⽤⼤⼩,写⼀个脚本计算⼀下所有进程所占⽤内存⼤⼩的和。
(提⽰,使⽤ps aux 列出所有进程,过滤出RSS那列,然后求和)
注:ps -ef 与 ps aux 效果⼀样使⽤随意
import os
list = []
sum = 0
str1 = os.popen('ps aux','r').readlines()
for i in str1:
str2 = i.split()
new_rss = str2[5]
list.append(new_rss)
for i in list[1:-1]:
num = int(i)
sum = sum + num
print '%s:%s' %(list[0],sum)
⼆、⼀键部署lvs与keepalived
注:部署keepalived配置⽂件,会⾃动将lvs部署好,不必单独搭建,但是要下载好ipvsadm
这⾥单独搭建了lvs
#提前配置好免密钥登陆,与apache服务坐便轮椅
import pexpect
import os
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 -s rr'.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),
'ifconfig ens33:0 {vip} broadcast {vip} netmask 255.255.255.255 up'.format(vip=vip),
'route add -host {vip} dev ens33:0'.format(vip=vip)
]
# for ds_cmd in ds_cmd:
rs1_cmd = [
'ansible rs1 -m shell -a "ifconfig lo:0 {vip} broadcast {vip} netmask 255.255.255.255 up" &>/dev/null'.format(vip=vip),
'ansible rs1 -m shell -a "route add -host {vip} dev lo:0" &>/dev/null'.format(vip=vip),
'ansible rs1 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore" &>/dev/null',
'ansible rs1 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce" &>/dev/null',
'ansible rs1 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore" &>/dev/null',
'ansible rs1 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce" &>/dev/null',
'service httpd restart']
# for rs_cmd in rs_cmd:
rs2_cmd = [
'ansible rs2 -m shell -a "ifconfig lo:0 {vip} broadcast {vip} netmask 255.255.255.255 up" &>/dev/null'.format(vip=vip),
'ansible rs2 -m shell -a "route add -host {vip} dev lo:0" &>/dev/null'.format(vip=vip),
'ansible rs2 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore" &>/dev/null',
'ansible rs2 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce" &>/dev/null',
'ansible rs2 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore" &>/dev/null',
'ansible rs2 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce" &>/dev/null',
'service httpd restart']
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)
def Ansible():
res = os.system('yum install ansible -y &>/dev/null')
if res== 0:
print('ansible安装完成!')
os.system(ansible)
def lvs():
i = os.system('yum -y install ipvsadm &>/dev/null')
if i == 0:
print('lvs下载完成')
for a in ds_cmd:
res = os.system(a)
if res == 0:
print('ok')
else:
print('false')
for b in rs1_cmd:
res1 = os.system(b)
if res1 == 0:
print('ok')
else:
print('false')
for c in rs2_cmd:
res2 = os.system(c)
if res2 == 0:
print('ok')
else:
print('false')
else:
print('lvs下载失败')
#全局配置
! Configuration File for keepalived
#全局配置
global_defs {
notification_email {
#收件⼈地址
}
#邮件服务器
}
VRRP配置DS1
vrrp_instance VI_1 {
state MASTER          #⾓⾊类型MASTER|BACKUP
interface ens33          #⽹卡名称
virtual_router_id 51      #虚拟路由id(需要与BACKUP⼀致)
priority 100          #优先级
advert_int 1          #没1秒检查⼀次
#nopreempt            #⾮抢占模式
authentication {
auth_type PASS        #认证类型主备之间必须⼀样
auth_pass 1111        #认证密码主备之间必须⼀样
}
virtual_ipaddress {
192.168.102.250        #虚拟ip(vip)
}
}
#LVS配置
virtual_server 192.168.102.250 80 {
delay_loop 3          #健康检查时间间隔
lb_algo rr            #负载均衡调度算法
lb_kind DR            #负载均衡转发规则
protocol TCP          #协议
real_server 192.168.102.144 80 {  #要监控的real_server的ip和端⼝号
weight 1        #权重
TCP_CHECK {          #基于tcp协议的检查
connect_timeout 3    #连接时间超时
retry 3          #重连次数
delay_before_retry 3  #重连间隔时间
}
}
real_server 192.168.102.145 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}'''
def Keepalived():
d = os.system('yum install keepalived -y &> /dev/null')
if d == 0:
print('keeplived下载完成')
with open(r'/etc/f', 'w', encoding='utf-8') as f:
f.write(keepalived)
e = os.system('systemctl start keepalived')
if e == 0:
print('keepalived部署完成!')
else:
print('keepalived部署失败')
else:
print('keepalived下载失败')
def main():
# key()
Ansible()
# ssh_copy()
lvs()
Keepalived()
陶瓷添加剂if __name__ == '__main__':
main()
三、⽤python3编写⼀个监控上⾯lvs服务状态和系统资源的脚本
import yagmail
import paramiko
import socket
import re
import time
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 = '''
top n 1 d 1 b -p 1 | grep '%Cpu' | awk -F "," '{print $4}' | awk -F "id" '{print $1}' | awk -F "." '{print $1}'
'''
free_cmd = "free -m | grep Mem |awk '{print $7}'"
def connect1():
def connect2():
def mail(head, Contents):
yag = yagmail.SMTP(user="158********@163", password="zz54605519", host='smtp.163')  yag.send('158********@163',subject = head, contents = Contents)
yag.close()
def http():
socket.setdefaulttimeout(1)
server = socket.socket()
host_list = ['%s:80' % (rs1_ip),'%s:80' % (rs2_ip)]
for info in host_list:
燃气吹灰器ip = repile('(.*?):(.*)').search(info).group(1)
port = repile('(.*?):(.*)').search(info).group(2)
res = t_ex((ip, int(port)))
if res != 0:
mail(ip,'%s不通' % port)
def disk():
stdin1, stdout1, stderr1 = _command(disk_cmd)
disk1 = ad().decode('utf-8'))
print('%s节点disk剩余空间为%sM' % (rs1_ip,disk1))
if disk1 <= 200:
mail(rs1_ip,'disk剩余空间为%sM' % disk1)
connect2()
stdin2, stdout2, stderr2 = _command(disk_cmd)
disk2 = ad().decode('utf-8'))
print('%s节点disk剩余空间为%sM' % (rs2_ip, disk2))
if disk2 <= 200:
mail(rs2_ip, 'disk剩余空间为%sM' % disk2)
def cpu():
connect1()
stdin1, stdout1, stderr1 = _command(cpu_cmd)
cpu1 = ad().decode('utf-8'))
cpu = 100 - cpu1
print('%s节点cpu使⽤率为百分之%s' % (rs1_ip, cpu))
if cpu >= 80:
mail(rs1_ip, 'cpu使⽤量为%s' % cpu)
connect2()
stdin2, stdout2, stderr2 = _command(cpu_cmd)
cpu2 = ad().decode('utf-8'))
cpu = 100 - cpu2
print('%s节点cpu使⽤率为百分之%s' % (rs2_ip, cpu))
if cpu >= 80:
mail(rs2_ip, 'cpu使⽤量为%s' % cpu)
def free():
connect1()
stdin1, stdout1, stderr1 = _command(free_cmd)
free1 = ad().decode('utf-8'))
print('%s节点磁盘剩余空间为%sM' % (rs1_ip, free1))
if free1 <= 200:
mail(ds_ip, '磁盘剩余空间为%sM' % free1)
connect2()
stdin2, stdout2, stderr2 = _command(disk_cmd)
free2 = ad().decode('utf-8'))
print('%s节点磁盘剩余空间为%sM' % (rs2_ip, free2))
if free2 <= 200:
mail(ds_ip, '磁盘剩余空间为%sM' % free2)
def main():
while True:
http()
cpu()
free()
disk()
time.sleep(60)
if __name__ == '__main__':
main()
四、⽤python编写⼀键部署数据库主从服务
短期负荷预测主服务器
import pexpect
import os
import configparser
# HOSTNAME_DB1='db1'
# HOSTNAME_DB2='db2'
# DB1 = '192.168.254.24'
# DB2 = '192.168.254.27'
DBPASSWORD = '1'
def repo():
os.system('touch /pos.po')
with open('/pos.po','w',encoding='utf8') as f:
f.write('[mariadb]')
config = configparser.ConfigParser()
config.set('mariadb', 'name', 'MariaDB')
config.set('mariadb', 'baseurl', 'mirrors.ustc.edu/mariadb/yum/10.3/centos7-amd64/')
config.set('mariadb', 'gpgkey', 'mirrors.ustc.edu/mariadb/yum/RPM-GPG-KEY-MariaDB')  config.set('mariadb', 'gpgcheck', '1')
config.write(open('/pos.po','w'))
def mariadb():
a = os.system('yum install MariaDB -y &> /dev/null')
if a == 0:
b = os.system('systemctl start mariadb &> /dev/null')
if b == 0:
print('mariadb启动成功')
child = pexpect.spawn('mysql_secure_installation')
child.sendline('')
child.sendline('y')
child.sendline(DBPASSWORD)
child.sendline(DBPASSWORD)
child.sendline('')
child.sendline('')
child.sendline('')
child.sendline('')
child.interact()
child.close()
def db1():
config = configparser.ConfigParser()
超高压汞灯
config.set('mysqld', 'server-id', '1')
config.set('mysqld', 'log-bin', 'mysql-bin')
config.write(open('/etc/myf.d/serverf','w'))
b = os.system('systemctl restart mariadb')
if b == 0:
# os.system('mysql -uroot -p%s' % DBPASSWORD)
# os.system("CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';")
# os.system("GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';")
# os.system('flush privileges;')
# os.system('show master status')
child = pexpect.spawn('mysql -uroot -p1')
child.sendline("CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';")
child.sendline("GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';")
child.sendline('flush privileges;')
child.sendline('show master status;')
child.interact()
child.close()
def main():
repo()
mariadb()
db1()
if __name__ == '__main__':
main()
从服务器
import pexpect
import os
import configparser
# HOSTNAME_DB1='db1'
# HOSTNAME_DB2='db2'
DB1 = '192.168.102.143'
# DB2 = '192.168.254.27'
DBPASSWORD = '1'
def repo():
os.system('touch /pos.po')
with open('/pos.po','w',encoding='utf8') as f:
f.write('[mariadb]')
config = configparser.ConfigParser()
config.set('mariadb', 'name', 'MariaDB')
config.set('mariadb', 'baseurl', 'mirrors.ustc.edu/mariadb/yum/10.3/centos7-amd64/')
config.set('mariadb', 'gpgkey', 'mirrors.ustc.edu/mariadb/yum/RPM-GPG-KEY-MariaDB')
config.set('mariadb', 'gpgcheck', '1')
config.write(open('/pos.po','w'))
def mariadb():
a = os.system('yum install MariaDB -y')
if a == 0:
b = os.system('systemctl start mariadb &> /dev/null')
if b == 0:
print('mariadb启动成功')
child = pexpect.spawn('mysql_secure_installation')
child.sendline('')
child.sendline('y')
child.sendline(DBPASSWORD)
child.sendline(DBPASSWORD)
child.sendline('')
child.sendline('')
child.sendline('')
child.sendline('')
def db2():
config = configparser.ConfigParser()
config.set('mysqld', 'server-id', '2')
config.write(open('/etc/myf.d/serverf','w'))
b = os.system('systemctl restart mariadb')
if b == 0:
bin = 'mysql-bin.000001'
pos = 765
# os.system('mysql -uroot -p%s' % DBPASSWORD)
# os.system('''mysql -uroot -p%s -e "CHANGE MASTER TO MASTER_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 'start slave;'" % DBPASSWORD)
child = pexpect.spawn('mysql -uroot -p%s' % DBPASSWORD)
child.sendline("CHANGE MASTER TO MASTER_HOST='%s', MASTER_USER='slave', MASTER_PASSWORD='slave', MASTER_LOG_FILE='%s', MASTER_LOG_POS=%s;" % (DB1,bin,pos))
child.sendline( 'start slave;' )
冰壶制作child.interact()
child.close()
def main():
repo()
mariadb()
db2()
if __name__ == '__main__':
main()
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

本文发布于:2024-09-21 08:38:25,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/161270.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:部署   进程   服务   配置   负载   脚本   下载   认证
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议