linux9

linux 9 af_pr

看過一句話「爲何這麼多的人寧願幹體力活,也不肯意學習去掙錢呢?」 由於「學習是主動吃苦,而生活的苦是自動找到懶人的」 -yuchaohtml

命令

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配置vue

技能習得等級

瞭解 熟悉 熟練 擅長 精通python

編輯所有窗口:

-->查看 --> 撰寫欄 -->所有窗口mysql

1 . rabbitmq的安裝使用

1.經過阿里雲的yum源,在epel源中有這個rabbitmq
yum install rabbitmq-server erlang -y
2.啓動rabbitmq-server
systemctl start rabbitmq-serverlinux

3.開啓後臺管理界面
rabbitmq-plugins enable rabbitmq_managementnginx

4.建立rabbitmq的帳號密碼web

​ rabbitmqctl add_user liuyang 123456redis

5.設置用戶爲管理員
sudo rabbitmqctl set_user_tags liuyang administratorsql

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.解壓縮源碼包

相關文章
相關標籤/搜索