一、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下载失败') keepalived = ''' #全局配置 ! 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/keepalived/keepalived.conf', '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(): ssh.connect('{rs1_ip}'.format(rs1_ip=rs1_ip), 22, 'root', '1', timeout=3) def connect2(): ssh.connect('{rs2_ip}'.format(rs2_ip=rs1_ip), 22, 'root', '1', timeout=3) def mail(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() def http(): socket.setdefaulttimeout(1) server = socket.socket() host_list = ['%s:80' % (rs1_ip),'%s:80' % (rs2_ip)] for info in host_list: ip = re.compile('(.*"color: #ff0000">四、用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 /etc/yum.repos.d/mariadb.repo') with open('/etc/yum.repos.d/mariadb.repo','w',encoding='utf8') as f: 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')) 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.expect('enter for none') 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() def db1(): 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('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.expect('none') child.sendline("CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';") child.expect('none') child.sendline("GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';") child.expect('none') child.sendline('flush privileges;') child.expect('none') 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 /etc/yum.repos.d/mariadb.repo') with open('/etc/yum.repos.d/mariadb.repo','w',encoding='utf8') as f: 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')) 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.expect('enter for none') 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('') def db2(): 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('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.expect('none') 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.expect('none') child.sendline( 'start slave;' ) child.interact() child.close() def main(): repo() mariadb() db2() if __name__ == '__main__': main()以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2024年11月24日
2024年11月24日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]