从头来过 入行也有几年了,一直都在坚持写文章但是文章的水平是真的差。语言组织也是菜的一批。现在给我一个从新做人的机会,所以我决定从头来过。现在写文章的初心是任何一个人都能看懂,或者不需要看,直接复制就可以完成自己想要的和想安装部署的环境。本着一颗善良的小心脏,决定从来过。希望帮助他人也希望帮助自己,锻炼自己的语言组织和写作能力,没办法就是这
def md5_int(vale): md5_int = vale str_md5 = hashlib.md5(md5_int.encode()).hexdigest() return str_md5 def getsession(): url = "https://{}/login".format(IP_server) token = {} data = json.dumps({ "name": "admin", "password": md5_int('123456'), }) url = requests.post(url=url, data=data) token["session_id"] = url.json()["session_id"] token["cluster_id"] = token["session_id"].split('@')[1] return token token = getsession(
python操作多台服务器
介绍: Master :负责各个数据存储服务器的管理,空间回收以及恢复,文件操作。 Metaloggers:负责备份master服务器的变化日志文件,在master出现问题时接替工作。 Chunkservers:提供存储空间,进行数据存储,负责连接master。 Client:客户端,可以将moosefs挂载到本地目录达到文件共享,挂载目录和本地目录使用一样。 存储方式:块存储 协议:TCP 适用环境:单集群的大量小文件 安装部署: 1:每台添加yum的key和源. [root@157~]# curl "https://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS [root@157 ~]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo [
实现将列表:['a','a','b','a','b','c']输出为字典:{'a':3,'b':2,'c':1} """ str_list = ['a', 'a', 'b', 'a', 'b', 'c'] st_set = set(['a', 'a', 'b', 'a', 'b', 'c']) dic = {} for i in st_set: cont = str_list.count(i) dic[i] = cont print(dic)
mysql多实例: 开启多个不同的服务端口,运行多个mysql服务进程。 应用场景:业务访问量不太大,节约成本 cat /etc/my.cnf [mysqld_multi] mysqld = /usr/bin/mysql_safe mysqladmin = /usr/bin/mysqladmin user = mysql [mysqld1] socket = /var/lib/mysql/mysql.sock port = 3306 pid-file = /var/lib/mysql/mysql.pid datadir = /var/lib/mysql user = mysql [mysql2] socket = /mnt/data/mysql/mysql.sock port = 3307 pid-file = /mnt/data/mysql/mysql.pid datadir = /mnt/data/mysql user = mysql [mysql3] socket = /mnt/data1/mysql/mysql.sock port = 3308 pid-file =
Hadoop 核心组件 HDFS 角色及概念 是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,用于在低成本的通用硬件上运行。 角色和概念 – Client – Namenode – Secondarynode – Datanode NameNode – Master节点,管理HDFS的名称空间和数据块映射信 息,配置副本策略,处理所有客户端请求。 Secondary NameNode – 定期合并 fsimage 和fsedits,推送给NameNode – 紧急情况下,可辅助恢复NameNode, 但Secondary NameNode并非NameNode的热备。 DataNode – 数据存储节点,存储实际的数据 – 汇报存储信息给NameNode。 Client – 切分文件 – 访问HDFS – 与NameNode交互,获取文件位置信息 – 与DataNode交互,读取和写入数据。 Block – 每块缺省64MB大小
filebeat: prospectors: # - #每个日志文件的开始 # paths: #定义路径 # - /var/www/logs/access.log #绝对路径 # input_type: log #日志类型为log # document_type: api4-nginx-accesslog # 此名称要与logstash定义的名称相对应,logstash要使用此名称做type判断使用 - paths: - /opt/apps/huhu/logs/ase.log input_type: log document_type: "ase-ase-log" encoding: utf-8 tail_files: true #每次最后一行 multiline.pattern: '^\[' #分割符 multiline.negate: true multiline.match: after #最后合并
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。 net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。 net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。 net.ipv4
iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盘读写速度单位为KB) iostat -d -m 2 #查看TPS和吞吐量信息(磁盘读写速度单位为MB) iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await) iostat -c 1 10 #查看cpu状态
#!/bin/bash [ -d /home/increment/ ] || mkdir -p /home/increment/ mysql_path=/home/ mysql_increment_path=/home/increment/ #mysql全备 mysql_backup() { innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' --backup $mysql_path/mysql-`date +%Y%m%d`/ --no-timestamp exit 0 } #恢复 mysql_recovery() { systemctl stop mysqld mv /var/lib/mysql /var/lib/mysql2 innobackupex --apply-log $mysql_path/mysql-`date +%Y%m%d`/ innobackupex --defaults-file=/etc/my.cnf --copy-back $mysql_path/mysql-`
[root@master ~]# mkdir /srv/salt/prod/pkg [root@master ~]# mkdir /srv/salt/prod/haproxy [root@master ~]# mkdir /srv/salt/prod/haproxy/files [root@master pkg]# pwd /srv/salt/prod/pkg [root@master pkg]# vim pkg-init.sls [root@master pkg]# cat pkg-init.sls pkg-init: pkg.installed: - names: - gcc - gcc-c++ - glibe - make - autoconf - openssl - openssl-devel [root@master prod]# cd haproxy/files/ [root@master files]# wget https://fossies.org/linux/mis
root pts/1 2018-11-16 00:38 (desktop-4a0ohej) [root@master init]# tail -f /var/log/messages Nov 16 01:01:01 master systemd: Starting Session 34 of user root. Nov 16 01:10:01 master systemd: Started Session 35 of user root. Nov 16 01:10:01 master systemd: Starting Session 35 of user root. Nov 16 01:14:00 master root: [euid=root]:root pts/0 2018-11-16 00:29 (desktop-4a0ohej):[pwd]export PROMPT_COMMAND=' { msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):['
状态模块: https://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html#module-salt.states.file [root@master ~]# grep -v '^$' /etc/salt/master |grep -v '#' client_acl: luo: - test.ping - network.* file_roots: #top.sls路径,可以写多个 base: #但是只读取base路径 - /srv/salt/base test: - /srv/salt/test prod: - /srv/salt/prod pillar_roots: base: - /srv/pillar mysql.host: '192.168.43.118' mysql.user: 'salt' mysql.pass: 'Myq1231!' mysql.db: 'salt' mysql.port: 330
目标 https://docs.saltstack.com/en/latest/ 模块 https://docs.saltstack.com/en/latest/ref/modules/all/index.html salt '*' service.available sshd 验证sshd服务 [root@master ~]# grep -v '^$' /etc/salt/master |grep -v '#' client_acl: #客户端开启模块限制 luo: #用户名 - test.ping - network.* file_roots: base: - /srv/salt pillar_roots: base: - /srv/pillar [root@master ~]# systemctl restart salt-master 给用户授权 [root@master ~]# useradd luo useradd:用户“luo”已存在 [root@master ~]# passwd
[root@localhost master]# salt-key -A 同意所有 [root@localhost master]# salt-key -a 192* 可选 *代表所有 -L 列表 -D 删除所有 -d 删除选中的 [root@localhost master]# salt-key -a 192* The following keys are going to be accepted: Unaccepted Keys: 192.168.43.118 192.168.43.71 Proceed? [n/Y] Y Key for minion 192.168.43.118 accepted. Key for minion 192.168.43.71 accepted.
#异常处理:是错误发生的信号,一旦程序出错,就会产生一个异常,应用程序未处理该异常,异常便会抛出,程序随之终止。 #常见异常类型: #1.语法错误 #2.逻辑错误 IndexError #3.不存在的类,报:AttributeError class foo: pass foo.x #4.不存在的key,报KeyError k={'a':1} k['y'] #5.如果0做除数,报ZeroDivisionError #6.不可迭代类型,报TypeError for i in 3: pass #7.不能把字符串转化数字,报ValueError age=input('>>:') age=int(age) #int转化为数字 #处理异常try #格式 try: #检测下面异常 出错的代码 except 异常的类型: #捕捉上面的代码的异常类型,相同执行pass pass try: l=[] print(l[1]) print('11111') except IndexError: pass #as e 拿到异
#绑定方法:绑定给谁就应该谁来调用,谁来调用就会把谁当做第一个参数自动传入importsetting#配置文件为settingclassmysql:def__init__(self,host,port):#绑定到对象self.host=hostself.port=port@classmethod#绑定到类deffrom_conf(cls):returncls(setting.HOST,settin
#封装的隐藏 #__开头的属性只是一种语法意义的变形,并不会真的限制外部的访问 #这种变形只在类定义阶段发送一次,类定义之后再新增的__开头的属性不会变形 class foo: __n=1 #__对外部隐藏属性。 def __init__(self,x,y): self.x=x self.__y=y #sele._foo__y=y def __f1(self): #_foo__f1 print('f1') def f2(self): print(self.__n,self.__y) #print(self._foo__n,self._foo__y) print(foo.__dict__) print(foo._foo__n) print(foo._foo__f1) #obj=foo(1,2) #print(obj._foo__y) #这种隐藏只对外不对内,因为内部定义的属性在类定义阶段统一发生变形。 foo.__n=2 print(foo.__dict__) pr
#1.多态:同一种事物的多种形态 import abc class Aninal(metaclass=abc.ABCMeta): @abc.abstractmethod def cry(self): pass class pig(Aninal): def cry(self): print('hengheng') class dog(Aninal): def cry(self): print('wangwang') pig1=pig() dog1=dog() #多态性:指的是在不考虑对象具体类型的情况下,直接使用对象。 def talk(obj): obj.cry() talk(dog1) #dog1.cry() talk(pig1) #
import abc class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod #强制子类 def eat(self): pass @abc.abstractmethod def run(self): pass class Peeple(Animal): def eat(self): print('peeple is eating') def run(self): print('peeple is runing') class Dag(Animal): def eat(self): print('dag is eating') def run(self): print('dag is runing') peo1=Peeple() dag1=Dag() peo1.eat() dag1.eat()
class olper: sch = 'oldboy' def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def tell__info(self): print('名字:<%s> 年龄:<%s> 性别:<%s>' %(self.name,self.age,self.sex)) class olstu(olper): def learn(self): print('%s is learing' % self.name) def tell__info(self): print('wo is stu',end='') print('名字:<%s> 年龄:<%s> 性别:<%s>' %(self.name,self.age,self.sex)) class olteach(olper): def tech(self)
#一、面向对象 #面向过程与面向对象 #面向过程:过程即解决问题的过程,就是有逻辑顺序,基于该思想写程序。如设计流程图,是一种机械式的思维方式。 #优点:复杂的过程流程化,进而简单化 #缺点:扩展性差 #面向对象:对象是特征与技能的结合体,基于该思想编写程序比如创造一个世界,世界是由一个个对象组成 #优点:可扩展性强 #缺点:编程复杂高,容易出现过度设计 #二、类 #对象是特征与技能的结合体,类是一系列对象相似的特征与技能的结合体。 #在实现中:一定是先有的一个个具体的对象,后总结出的类。如(人,人类) #在程序中:一定是先定义类,后产生对象。 #类的格式: class 类名: #类体内的代码在类的定义阶段就会立即执行, #如: class sut: sc='dagschool' def learn(self): print('is learing') def __init__(self,name,sex,age): #__init__在调用类时会自动触发 self.Name=name self.Se
import subprocess obj=subprocess.Popen('tasklist',shell=True, #shell=True调用命令解释器来解释前面的命令,发信号并不执行 stdout=subprocess.PIPE, #PIPE管道 stderr=subprocess.PIPE, #放入报错信息 ) print(obj.stdout.read().decode('gbk')) #只能取一次值,取出格式是b格式 import subprocess obj=subprocess.Popen('list',shell=True, stdout=subprocess.PIPE, #PIPE管道 stderr=subprocess.PIPE, #放入报错信息 ) print(obj.stderr.read().decode('gbk'
#hashlib模块:一种算法 #1.内容相同则hash运算结果相同,内容一有改变则hash值则变 #2.不可逆推 #3.相同算法:无论校验多长的数据,得到的hash值长度固定 import hashlib m=hashlib.md5() m.update('hello'.encode('utf-8')) #update往m里写值 m.update('word'.encode('utf-8')) print(m.hexdigest()) #hexdigest查看md5值 m1=hashlib.md5() m1.update('hello'.encode('utf-8')) #update往m里写值 m1.update('wo'.encode('utf-8')) m1.update('rd'.encode('utf-8')) print(m1.hexdigest()) #hexdigest查看md5值,m和m1的md5值一样,保证文件一致性。
import configparser config=configparser.ConfigParser() config.read('my.conf') print(config.sections()) #sections显示标题 print(config.options('mysqld')) #options显示标题mysqld下的配置项,并只打印key print(config.get('mysqld','key')) #get显示标题mysqld的key的值 print(config.has_option('mysqld','aaa')) #判断mysqld标题下的配置项是否存在 print(config.getboolean('mysqld','key')) #直接转化为一个布尔值 print(config.getint('mysqld','port')) #直接转化为一个数字型 #往配置文件里写 config.add_section('al') #添加一个标题 config.set('al','name','lisi') #添
xml:模块 from xml.etree import ElementTree tree=ElementTree.parse('a.xml') #xml文件 root=tree.getroot() #拿到根 print(root.tag) #标签的名字 print(root.attrib) #看属性 print(root.text) #文本 #三种查找方式 #1.从子节点中找 print(root.find()) root.findall() #2.从整树型结构中查找 root.iter('rank') #全篇文件找 print(list(root.iter()))
序列化: dumps 把内存的数据结构保存下来 import json dic={'a':1} res1=json.dumps(dic) re2=str(dic) print(res1,type(res1)) #json格式都是用的双引号 print(res2,type(res2)) x=None res=json.dumps(x) print(res,type(res))
improt random print(random.random()) #0-1小数 random.randint(1,3) #大于等于1且小于等于3只间的整数 random.randrange(1,3) #大于等于1且小于3之间的整数 random.choice([1,'23',[4,7]]) #1或者23或者[4,6] random.aampla([1,'23',[4,7]],2) #列表元素任意2个组合 random.uniform(1,3) #大于1小于3的小数,如1.927 例: h=[1,2,3,4,5] random.shuffle(h) #随机打乱顺序 print(h)
正则模块:re import re print(re.findall('\w','egon 123 + _ - *')) #\w匹配字母数据及下划线 print(re.findall('\W','egon 123 + _ - *')) #\W匹配非字母数据及下划线 print(re.findall('\s','egon\t 12\n3 + _ - *')) #\s匹配任意空白字符,等价于[\f\n\r\t] print(re.findall('\S','egon 123 + _ - *')) #\S匹配任意非空字符 print(re.findall('\d','egon\t 12\n3 + _ - *')) #\d匹配任意数字,等价于[0-9] print(re.findall('\D','egon\t 12\n3 + _ - *')) #\D匹配任意非数字 print(re.findall('\A','egon\t 12\n3 + _ - *')) #匹配字符串开始 print(re.findall('\n','egon\t 12\n3 + _ - *'))
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号