• linux9


    linux 9 af_pr

    看过一句话“为什么这么多的人宁愿干体力活,也不愿意学习去挣钱呢?” 因为“学习是主动吃苦,而生活的苦是自动找到懒人的” -yuchao

    命令

    rpm -qi nginx 查看软件安装信息

    简历的书写学习到了没有?

    两年python开发
    擅长在linux环境OOP开发,熟悉centos7常用命令
    熟悉nginx环境配置,如nginx调优(nginx.conf根据服务器参数更改),负载均衡以及代理配置
    负责python web项目部署,架构vue+nginx+uwsgi+supervisor+virtualenv
    熟悉mysql基本CURD语句,索引优化,主从复制原理
    熟悉redis,mongoDB等NOSQL数据库,掌握redis持久化机制,主从复制以及哨兵搭建原理,了解redis-cluster
    了解docker容器化管理,掌握容器,仓库,镜像管理命令,私有docker仓库搭建
    了解消息队列rabbitmq
    了解运维自动化工具saltstack,ansible配置

    技能习得等级

    了解 熟悉 熟练 擅长 精通

    编辑全部窗口:

    -->查看 --> 撰写栏 -->全部窗口

    1 . rabbitmq的安装使用

    1.通过阿里云的yum源,在epel源中有这个rabbitmq
    yum install rabbitmq-server erlang -y
    2.启动rabbitmq-server
    systemctl start rabbitmq-server

    3.开启后台管理界面
    rabbitmq-plugins enable rabbitmq_management

    4.创建rabbitmq的账号密码

    ​ rabbitmqctl add_user liuyang 123456

    5.设置用户为管理员
    sudo rabbitmqctl set_user_tags liuyang administrator

    6.设置用户有权限访问所有队列

    语法:

    rabbitmqctl set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
    

    ​ rabbitmqctl set_permissions -p "/" liuyang "." "." ".*"

    7.重启rabbitmq服务端,让用户生效
    systemctl restart rabbitmq-server

    8.访问web管理界面,登录,查看队列信息

    ​ netstat -tunlp(查看进程id)(访问进不去,应该是电脑卡了)

    http://192.168.230.132:15672/#/queues

    9.用python操作rabbitmq,实现生产消费者模型
    1.安装pika模块,模块版本需要指定,因为代码参数发生了变化(不知道模块版本的时候写个错的,然后从提示中找)
    pip3 install -i https://pypi.douban.com/simple pika==0.13.1

    1.生产者的代码
    	
    #!/usr/bin/env python3
    import pika
    # 创建凭证,使用rabbitmq用户密码登录
    # 去邮局取邮件,必须得验证身份
    credentials = pika.PlainCredentials("liuyang","123456")
    # 新建连接,这里localhost可以更换为服务器ip
    # 找到这个邮局,等于连接上服务器
    connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.230.132',credentials=credentials))
    # 创建频道
    # 建造一个大邮箱,隶属于这家邮局的邮箱,就是个连接
    channel = connection.channel()
    # 声明一个队列,用于接收消息,队列名字叫“水许传”
    channel.queue_declare(queue='水许传')
    # 注意在rabbitmq中,消息想要发送给队列,必须经过交换(exchange),初学可以使用空字符串交换(exchange=''),它允>许我们精确的指定发送给哪个队列(routing_key=''),参数body值发送的数据
    channel.basic_publish(exchange='',
    routing_key='水许传',
    body='武大郎出摊卖烧饼了')
    print("已经发送了消息")
    # 程序退出前,确保刷新网络缓冲以及消息发送给rabbitmq,需要关闭本次连接
    connection.close()
    
    
    2.消费者的代码
    import pika
    # 建立与rabbitmq的连接
    credentials = pika.PlainCredentials("liuyang","123456")
    connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.230.132',credentials=credentials))
    channel = connection.channel()
    channel.queue_declare(queue="水许传")
    
    def callbak(ch,method,properties,body):
       print("消费者接收到了数据:%r"%body.decode("utf8"))
    # 有消息来临,立即执行callbak,没有消息则夯住,等待消息
    # 老百姓开始去邮箱取邮件啦,队列名字是水许传
    channel.basic_consume(callbak,queue="水许传",no_ack=True)
    # 开始消费,接收消息
    channel.start_consuming()
    

    rabbitmq消息确认之ack

    防止异常情况下数据丢失的异常机制
    no-ack 若为true,不走,服务器出错,数据库丢失,
    no-ack 为false , 走,服务器出错,数据不丢

    官网资料:http://www.rabbitmq.com/tutorials/tutorial-two-python.html

    默认情况下,生产者发送数据给队列,消费者取出消息后,数据将被清除。
    特殊情况,如果消费者处理过程中,出现错误,数据处理没有完成,那么这段数据将从队列丢失
    

    no-ack机制(为False不让不确认)

    为了处理:数据处理过程中有问题,然后不返回出错

    不确认机制也就是说每次消费者接收到数据后,不管是否处理完毕,rabbitmq-server都会把这个消息标记完成,从队列中删除

    3.消息确认机制的生产者代码
    #!/usr/bin/env python3
    import pika
    # 创建凭证,使用rabbitmq用户密码登录
    # 去邮局取邮件,必须得验证身份
    credentials = pika.PlainCredentials("selfju","cxk")
    # 新建连接,这里localhost可以更换为服务器ip
    # 找到这个邮局,等于连接上服务器
    connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.16.142',credentials=credentials))
    # 创建频道
    # 建造一个大邮箱,隶属于这家邮局的邮箱,就是个连接
    channel = connection.channel()
    # 新建一个hello队列,用于接收消息
    # 这个邮箱可以收发各个班级的邮件,通过
    
    channel.queue_declare(queue='西游记')
    # 注意在rabbitmq中,消息想要发送给队列,必须经过交换(exchange),初学可以使用空字符串交换(exchange=''),它允许我们精确的指定发送给哪个队列(routing_key=''),参数body值发送的数据
    channel.basic_publish(exchange='',
    routing_key='西游记',
    body='大师兄,师傅被蔡许坤抓走了')
    print("已经发送了消息")
    # 程序退出前,确保刷新网络缓冲以及消息发送给rabbitmq,需要关闭本次连接
    connection.close()
    
    4.消息确认机制的消费者代码
    import pika
    
    credentials = pika.PlainCredentials("selfju","cxk")
    connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.16.142',credentials=credentials))
    channel = connection.channel()
    # 声明一个队列(创建一个队列)
    channel.queue_declare(queue='西游记')
    def callback(ch, method, properties, body):
    	print("消费者接受到了任务: %r" % body.decode("utf-8"))
    # int('asdfasdf')
    # 我告诉rabbitmq服务端,我已经取走了消息
    # 回复方式在这
    ch.basic_ack(delivery_tag=method.delivery_tag)
    
    # 关闭no_ack,代表给与服务端ack回复,确认给与回复
    channel.basic_consume(callback,queue='西游记',no_ack=False)
    
    channel.start_consuming()
    
    
    

    持久化

    消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢——消息持久化。 为了保证RabbitMQ在退出或者crash等异常情况下数据没有丢失,需要将queue,exchange和Message都持久化。

    5.支持持久化的队列和消息
    	1.生产者的代码
    	
    import pika
        # 有密码
    credentials = pika.PlainCredentials("liuyang","123456")
    connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.230.132',credentials=credentials))
    channel = connection.channel()
    
    # 声明一个队列(创建一个队列)
    # 默认此队列不支持持久化,如果服务挂掉,数据丢失
    # durable=True 开启持久化,必须新开启一个队列,原本的队列已经不支持持久化了
    '''
    实现rabbitmq持久化条件
    delivery_mode=2
    使用durable=True声明queue是持久化
    
    '''					# 持久化参数durable
    channel.queue_declare(queue='LOL',durable=True)
    channel.basic_publish(exchange='',
    routing_key='LOL', # 消息队列名称
    body='我用双手成就你的梦想',
    # 支持数据持久化
    properties=pika.BasicProperties(
    delivery_mode=2,#代表消息是持久的  2
    )
    )
    connection.close()
    
    6.持久化的消费者代码
    import pika
    credentials = pika.PlainCredentials("liuyang","123456")
    def callback(ch, method, properties, body):
    		print("消费者接受到了任务: %r" % body.decode("utf-8"))
    connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.230.132',credentials=credentials))
    channel = connection.channel()
    

    2 确保队列持久化

    channel.queue_declare(queue='LOL',durable=True)

    '''
    必须确保给与服务端消息回复,代表我已经消费了数据,否则数据一直持久化,不会消失
    '''
    def callback(ch, method, properties, body):
    print("消费者接受到了任务: %r" % body.decode("utf-8"))
    # 模拟代码报错
    # int('asdfasdf') # 此处报错,没有给予回复,保证客户端挂掉,数据不丢失

    # 告诉服务端,我已经取走了数据,否则数据一直存在
    ch.basic_ack(delivery_tag=method.delivery_tag)
    

    3 关闭no_ack,代表给与回复确认

    channel.basic_consume(callback,queue='LOL',no_ack=False)
    channel.start_consuming()

    saltstack高级运维

    python做运维自动化是第一语言

    这个是快速的远程执行系统

    为什么? 大量的重复性工作,远程执行命令,大规模部署,本地进行管理,跨数据中心(c/s)

    4 saltstack运维工具的安装

    1.环境准备
    准备3台机器,配置好ip地址,互相可以通信,即可

    一个master

    一个minion

    一个minion

    2.配置hosts解析文件,强制进行主机名解析,加速salt的minion查找,分别在三台机器上,写入解析

    修改主机名 的方法
    1 vim /etc/sysconfig/network 
    HOSTNAME=liuyang3(主机名)
    2 vim /etc/hosts 
    192.168.230.130 liuyang3
    

    vim /etc/hosts (hostname 查看主机名)

    ping bogon 是主机名

    192.168.230.132 liu

    192.168.230.132 localhost.localdomain

    192.168.16.47 bogon

    3.配置阿里云的源,下载saltstack软件包, 注意区分 服务端和客户端

    1.在master上安装
    	yum install salt-master -y
    2.在minion1上安装
    	yum install salt-minion -y
    3.在minion2上安装
    	yum install salt-minion -y
    


    4.学习salt-master的配置文件 和 salt-minion的配置文件

    salt-master的配置文件内容如下
    vim master #打开配置文件,填入如下内容

    interface: 0.0.0.0  #绑定到本地的0.0.0.0地址
    publish_port: 4505  #管理端口,命令发送
    user: root      #运行salt进程的用户
    worker_threads: 5  #salt运行线程数,线程越多处理速度越快,不要超过cpu个数
    ret_port: 4506  #执行结果返回端口
    pidfile: /var/run/salt-master.pid #pid文件位置
    log_file: /var/log/salt/master  #日志文件地址
    
    #自动接收minion的key
    auto_accept: False
    

    salt-minion的配置文件信息如下
    vim /etc/salt/minion

    master: s20 #指定mastet的通信地址
    master_port: 4506
    user: root
    id: s20minion1 #id用于指定minion的身份信息 ,待会可以在master上查看到的
    acceptance_wait_time: 10
    log_file: /var/log/salt/minion

    salt-minion2的配置
    vim /etc/salt/minion

    5.都重启了master和minion之后,查看密钥接受情况,salt通信是在minion初次启动时候,建立新的连接的
    systemctl start salt-master
    systemctl start salt-minion

    6.在master机器上,查看minion的密钥信息

    salt-key -L #查看所有密钥

    salt-key -a s20minion1 #-a参数 单独接受一个密钥信息

    salt-key -A #-A 接受所有的key信息

    7.此时就可以在master上 管理 minion的机器了
    salt "*" test.ping #验证salt minion信息是否存活

    8.将输出的结果,转化为json信息,可以序列化后,丢给前端渲染
    salt "*" test.ping --out=json

    9.salt的命令学习

    语法

    salt 核心命令

    salt 目标匹配 你要执行的salt模块

    salt "s20minion1" test.ping

    salt "*" test.fib 50

    让机器远程返回主机名给我

    参数解释 --summary显示详细信息

    salt --summary '*' cmd.run 'hostname'

    salt的万能模块 cmd.run 代表让minion机器去做些什么事

    salt "*" cmd.run "touch /tmp/爱的魔力准quanquan"

    salt "" cmd.run "rm -rf /tmp/"

    远程安装软件

    第一个方法 cmd.run

    salt "*" cmd.run "yum install nginx -y"

    salt还提供了更专业的安装软件的命令接口 pkg.install pkg.uninstall就是在调用yum而已

    远程卸载nginx

    salt '*' pkg.remove "nginx"

    salt的服务管理模块 service模块,相当于在minion机器上,执行systemctl start nginx

    salt '' service.start "nginx"
    salt '
    ' service.stop "nginx"
    salt '*' service.restart "nginx"

    远程安装nginx,并且启动的方式

    salt "" pkg.install 'nginx'
    salt "
    " service.start 'nginx'

    salt命令的输出格式 有json和yaml两种

    远程安装redis,并且输出json格式

    salt "" pkg.install "redis" --out=json
    salt "
    " service.start 'redis' --out=json
    salt "*" service.status 'redis' --out=json

    yaml语法学习

    yaml转化python的数据结构

    yaml
    first_key:
    second_key:

    python

    用python的字典和列表表示班级 男女同学分配

    {
    "s20":{"男同学":["丽华","小黑","老徐"],"女同学":["大宝","b哥","超哥"],"不详":["self菊"]}
    }

    在线yaml语法解析

    http://www.bejson.com/validators/yaml_editor/

    python的数据结构,转为yaml
    { s20:
    { '男同学': [ '丽华', '小黑', '老徐' ],
    '女同学': [ '大宝', 'b哥', '超弟' ],
    '不详': [ 'self菊', '蔡旭困' ] } }

    yaml如下
    "s20":
    "男同学":

    • "丽华"
      "小黑"

      • "老徐"
        同学":

      • "大宝"

      • "b哥"

      • "超弟"
        "不详":

        • "self菊"

        • "蔡旭困"

    salt工具之granis静态数据采集,当minion在启动的时候,发送自己所有的数据给master

    在启动时候发给master,如果后期服务器硬件修改了,数据就是旧的了,得重启salt-minion

    列出minion服务器所有的静态数据

    salt '*' grains.items #列出服务器所有的静态数据

    salt '*' grains.items --out=json #输出结果为json格式,可以序列化丢给其他程序使用

    指定key value取得数据

    salt 's20minion1' grains.item osrelease

    python操作salt的api命令接口

    5 linux下进行pycharm开发

    1.获取pycharm的linux包
    wget https://download.jetbrains.8686c.com/python/pycharm-community-2018.2.4.tar.gz

    2.解压缩源码包

  • 相关阅读:
    鸟哥的 Linux 私房菜Shell Scripts篇(一)
    证券投资基金会计核算业务指引
    在LINUX上部署SOFA
    bash: sz: command not found
    git常用命令
    git删除指定commit
    dubbo-本地直连
    java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
    设置Chrome忽略网站证书错误
    mybatis-传多个参数
  • 原文地址:https://www.cnblogs.com/Doner/p/11154214.html
Copyright © 2020-2023  润新知