• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2017年4月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456


            專注即時通訊及網游服務端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標準模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉載,并在文章開頭給出了原文出處,如有再轉,敬請保留相關信息,這是大家對原創作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 216749
            • 排名 - 118

            最新評論

            閱讀排行榜

            http://www.iyunv.com/thread-41970-1-1.html
            文件同步:
                其實在做openstack的運維對一些文件的同步其實是很繁瑣。有一個配置項或者一行代碼的源碼文件進行同步。那么現在我們就開始介紹saltstack的文件同步功能

            環境說明:操作系統版本:rhel6.5x64

            1、master配置同步根目錄
                 在開始saltstack的配置管理之前,要首先指定saltstack所有狀態文件的根目錄,在master上做如下操作
            ## 首先修改master的配置文件,指定根目錄,注意縮進全部使用兩個空格來代替Tab(python規范)## 確定指定的目錄是否存在,如果不存在,需要手動來創建目錄
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            [iyunv@controller1 ~]# vim /etc/salt/master 
            file_roots:
              base:
                - /srv/salt
              dev:
                - /srv/salt/dev/

            [iyunv@controller1 ~]# mkdir -p /srv/salt/dev
            [iyunv@controller1 ~]# ls -ld /srv/salt/dev
            drwxr-xr-x 2 root root 4096 Feb  3 21:49 /srv/salt/dev



            重啟master服務
            1
            2
            3
            [iyunv@controller1 ~]# service salt-master restart
            Stopping salt-master daemon:                               [  OK  ]
            Starting salt-master daemon:                               [  OK  ]



            2、介紹cp.get_file

               首先介紹cp.get_file,用來從master端下載文件到minion的指定目錄下,如下
            ## 在master上創建測試用的文件
            1
            2
            3
            [iyunv@controller1 ~]# echo 'This is test file with saltstack module to  cp.get_file' >/opt/getfile.txt        
            [iyunv@controller1 ~]# cat /opt/getfile.txt 
            This is test file with saltstack module to  cp.get_file



            將文件拷貝到master的同步根目錄下
            1
            [iyunv@controller1 ~]# cp /opt/getfile.txt /srv/salt/



            在master上執行文件下發
            1
            2
            3
            [iyunv@controller1 ~]# salt 'computer3' cp.get_file salt://getfile.txt /tmp/getfile.txt  
            computer3:
                /tmp/getfile.txt



            登錄到computer3上查看同步情況
            1
            2
            [iyunv@computer3 ~]# cat /tmp/getfile.txt 
            This is test file with saltstack module to  cp.get_file




            分發文件的一些屬性:
            (1)壓縮  gzip
            使用gzip的方式進行壓縮,數字越大,壓縮率就越高,9代表最大的壓縮率
            1
            2
            3
            [iyunv@controller1 ~]# salt 'computer8' cp.get_file salt://getfile.txt /tmp/getfile.txt gzip=9
            computer8:
                /tmp/getfile.txt




            (2)創建目錄 makedirs(當分發的位置在目標主機上不存在時,自動創建該目錄)
            1
            2
            3
            4
            5
            6
            [iyunv@controller1 ~]# salt 'computer8' cp.get_file salt://getfile.txt /tmp/srv/getfile.txt makedirs=True
            computer8:
                /tmp/srv/getfile.txt

            [iyunv@computer8 opt]# ll /tmp/srv/getfile.txt 
            -rw-r--r-- 1 root root 56 Feb  3 22:14 /tmp/srv/getfile.txt



            3、grains
               先介紹一下grains,這個接口的作用是在minion端的minion服務啟動時,調用這個接口,收集minion端的信息,這些信息數據可以在salt的其他模塊中直接使用,需要注意的是,這個接口只在minion端的minion服務啟動時被調用一次,所以收集的數據是靜態的,不會改變的,除非你重啟了minion端的服務

            grains的基本用法:
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            [iyunv@controller1 ~]# salt 'computer3' grains.ls
            computer3:
                - biosreleasedate
                - biosversion
                - cpu_flags
                - cpu_model
                - cpuarch
                - defaultencoding
                - defaultlanguage
                - domain
                - fqdn
                - fqdn_ip4
                - fqdn_ip6
                - gpus
                - host
                - hwaddr_interfaces
                - id
                - ip_interfaces
                - ipv4
                - ipv6
                - kernel
                - kernelrelease
                - localhost
                - manufacturer
                - master
                - mem_total
                - nodename
                - num_cpus
                - num_gpus
                - os
                - os_family
                - osarch
                - oscodename
                - osfinger
                - osfullname
                - osmajorrelease
                - osrelease
                - path
                - productname
                - ps
                - pythonpath
                - pythonversion
                - saltpath
                - saltversion
                - saltversioninfo
                - serialnumber
                - server_id
                - shell
                - virtual
                - zmqversion




            使用grains.items模塊列出所有可用grains的具體數據
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            54
            55
            56
            57
            58
            59
            60
            61
            62
            63
            64
            65
            66
            67
            68
            69
            70
            71
            72
            73
            74
            75
            76
            77
            [iyunv@controller1 ~]# salt 'computer3' grains.items
            computer3:
              biosreleasedate: 08/28/2013
              biosversion: 2.10.0
              cpu_flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt aes lahf_lm arat dts tpr_shadow vnmi flexpriority ept vpid
              cpu_model: Intel(R) Xeon(R) CPU E7- 4820  @ 2.00GHz
              cpuarch: x86_64
              defaultencoding: UTF8
              defaultlanguage: en_US
              domain: 
              fqdn: computer3
              fqdn_ip4:
                  192.168.100.23
              fqdn_ip6:
              gpus:
                  {'model': 'MGA G200eW WPCM450', 'vendor': 'unknown'}
              host: computer3
              hwaddr_interfaces: {'lo': '00:00:00:00:00:00', 'tap002cf093-0c': 'fe:16:3e:cf:43:28', 'em4': 'f0:1f:af:90:38:65', 'eth1.2': 'f0:1f:af:90:37:fd', 'em3': 'f0:1f:af:90:38:63', 'brq8f15ee7f-54': 'f0:1f:af:90:37:fd', 'brqadf94242-74': 'f0:1f:af:90:37:fd', 'eth1.400': 'f0:1f:af:90:37:fd', 'eth1': 'f0:1f:af:90:37:fd', 'eth0': 'f0:1f:af:90:37:fb'}
              id: computer3
              ip_interfaces: {'lo': ['127.0.0.1'], 'tap002cf093-0c': [], 'em4': [], 'eth1.2': [], 'em3': [], 'brq8f15ee7f-54': [], 'brqadf94242-74': [], 'eth1.400': [], 'eth1': [], 'eth0': ['192.168.100.23']}
              ipv4:
                  127.0.0.1
                  192.168.100.23
              ipv6:
                  ::1
                  fe80::60f7:96ff:feab:3d44
                  fe80::f21f:afff:fe90:37fb
                  fe80::f21f:afff:fe90:37fd
                  fe80::f8e7:cdff:fe54:7d02
                  fe80::fc16:3eff:fecf:4328
              kernel: Linux
              kernelrelease: 2.6.32-431.el6.x86_64
              localhost: computer3
              manufacturer: Dell Inc.
              master: 192.168.100.200
              mem_total: 225995
              nodename: computer3
              num_cpus: 64
              num_gpus: 1
              os: RedHat
              os_family: RedHat
              osarch: x86_64
              oscodename: Santiago
              osfinger: Red Hat Enterprise Linux Server-6
              osfullname: Red Hat Enterprise Linux Server
              osmajorrelease:
                  6
                  5
              osrelease: 6.5
              path: /sbin:/usr/sbin:/bin:/usr/bin
              productname: PowerEdge M910
              ps: ps -efH
              pythonpath:
                  /usr/bin
                  /usr/lib64/python26.zip
                  /usr/lib64/python2.6
                  /usr/lib64/python2.6/plat-linux2
                  /usr/lib64/python2.6/lib-tk
                  /usr/lib64/python2.6/lib-old
                  /usr/lib64/python2.6/lib-dynload
                  /usr/lib64/python2.6/site-packages
                  /usr/lib64/python2.6/site-packages/gtk-2.0
                  /usr/lib/python2.6/site-packages
                  /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info
              pythonversion: 2.6.6.final.0
              saltpath: /usr/lib/python2.6/site-packages/salt
              saltversion: 2014.1.10
              saltversioninfo:
                  2014
                  1
                  10
                  0
              serialnumber: XXXXXX
              server_id: 111111111
              shell: /bin/bash
              virtual: physical
              zmqversion: 4.0.5




              ping測試grains中os的值為RedHat的主機通信是否正常
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            [iyunv@controller1 ~]# salt -G 'os:RedHat' test.ping 
            computer5:
                True
            computer8:
                True
            computer6:
                True
            computer7:
                True
            computer4:
                True
            computer3:
                True




            查看uadoop2主機的ip地址,注意這里不是items噢,而是item
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            [iyunv@controller1 ~]# salt '*' grains.item ipv4
            computer5:
              ipv4:
                  127.0.0.1
                  192.168.100.25
            computer7:
              ipv4:
                  127.0.0.1
                  192.168.100.27
            computer4:
              ipv4:
                  127.0.0.1
                  192.168.100.24
            computer3:
              ipv4:
                  127.0.0.1
                  192.168.100.23
            computer8:
              ipv4:
                  127.0.0.1
                  192.168.100.28
            computer6:
              ipv4:
                  127.0.0.1
                  192.168.100.26




            好了,在介紹了grains接口之后,接下來看下在cp模塊中如何簡單的使用grains的數據呢
            先確定os是什么版本
            1
            2
            3
            [iyunv@controller1 RedHat]# salt 'computer4'  grains.item os         
            computer4:
              os: RedHat



            1
            2
            3
            4
            5
            [iyunv@controller1 ~]# mkdir /srv/salt/RedHat/
            [iyunv@controller1 ~]# mv /srv/salt/getfile.txt  /srv/salt/RedHat/
            [iyunv@controller1 RedHat]# salt 'computer4' cp.get_file "salt://{{grains.os}}/getfile.txt" /opt/getfile.txt template=jinja
            computer4:
                /opt/getfile.txt



            4、目錄同步
                介紹cp.get_dir,get_dir與get_file的用法十分相似,用來將整個目錄分發到minions
            創建測試文件
            1
            2
            3
            4
            5
            6
            7
            [iyunv@controller1 ~]# mkdir /srv/salt/test_dir
            [iyunv@controller1 ~]# echo 'hello word !!' >>/srv/salt/test_dir/hello1.txt
            [iyunv@controller1 ~]# echo 'hello2 word !!' >>/srv/salt/test_dir/hello2.txt
            [iyunv@controller1 ~]# ll /srv/salt/test_dir/
            total 8
            -rw-r--r-- 1 root root 14 Feb  4 14:49 hello1.txt
            -rw-r--r-- 1 root root 15 Feb  4 14:49 hello2.txt



            測試分發: 執行目錄文件的分發,并使用壓縮傳輸
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            [iyunv@controller1 ~]# salt 'computer4' cp.get_dir salt://test_dir /tmp gzip=9 
            computer4:
                - /tmp/test_dir/hello1.txt
                - /tmp/test_dir/hello2.txt

            登錄到目標節點查看分發狀態:
            [iyunv@computer4 ~]# ll /tmp/test_dir/
            total 8
            -rw-r--r-- 1 root root 14 Feb  4 14:52 hello1.txt
            -rw-r--r-- 1 root root 15 Feb  4 14:52 hello2.txt




            5、數據的靈活變更

               在往下介紹之前,首先介紹一下salt的pillar接口,pillar是salt中比較重要的組件,跟grains有些相似,但是pillar相比于grains更加靈活,而且是動態的,數據可以隨時更新,只要你愿意的話。而grains只在minion啟動時采集一次數據,關于pillar官網描述如下,簡單翻譯一下,但不保證翻譯的到位,意思是說pillar是salt實現部署功能的最重要的組件,能夠為minions生成非常靈活的數據,這些數據可以被salt的其他的組件所使用。
            1
               The pillar interface inside of Salt is one of the most important components of a Salt deployment. Pillar is the interface used to generate arbitrary data for specific minions. The data generated in pillar is made available to almost every component of Salt.



            grains的基本用法
            (1)配置master
            1
            2
            3
            4
            5
            6
            7
            8
            9
            [iyunv@controller1 ~]# vim /etc/salt/master 
            pillar_roots:
              base:
                - /srv/pillar
            [iyunv@controller1 ~]# service salt-master restart
            Stopping salt-master daemon:                               [  OK  ]
            Starting salt-master daemon:                               [  OK  ]
            [iyunv@controller1 ~]# mkdir /srv/pillar
            [iyunv@controller1 ~]# mkdir /srv/pillar/user   //創建一個user的測試目錄




            (2)創建入口文件
            首先在/srv/pillar目錄中要有一個入口文件top.sls
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            [iyunv@controller1 pillar]# cat top.sls 
            base:
              'computer3':
                - date         ## 為uadoop2定義了一個屬性數據,引用了跟top.sls同目錄下的data.sls

              'computer4':
                - webserver    ## 為uadoop3定義了一個屬性數據,引用了跟top.sls同目錄下的web.sls

              '*':
                - user         ## 為所有節點定義了一個屬性數據,引用了/srv/pillar/user/init.sls
                               ## 這里指定的是一個目錄,salt會自動在top.sls文件中的引用目錄中尋找狀態文件
                               ## 因此會找到位于user目錄中的init.sls文件
                               ## 在測試請不要有任何的‘#’
            編寫其他兩個屬性:
            [iyunv@controller1 pillar]# cat date.sls 
            date: some date
            [iyunv@controller1 pillar]# cat webserver.sls 
            webserver: test_dir



            測試:
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            54
            55
            56
            57
            58
            59
            60
            61
            # salt '*' pillar.items

            computer3:
                ----------
                date:
                    some date
                master:
                    ----------
                    auth_mode:
                        1
                    auto_accept:
                    ....省略N行...........
                user:
                    ----------
                    foway:
                        1200
                    kadefor:
                        1000
                    kora:
                        1000
            computer4:
                ----------
                master:
                    ----------
                    auth_mode:
                        1
                    auto_accept:
                        False
                    cachedir:
                        /var/cache/salt/master
                     .........省略N行..........
                user:
                    ----------
                    foway:
                        1200
                    kadefor:
                        1000
                    kora:
                        1000
                webserver:
                    test_dir
            computer5:
                ----------
                master:
                    ----------
                    auth_mode:
                        1
                    auto_accept:
                        False
                    cachedir:
                        /var/cache/salt/master
                        ......省略N行......
                user:
                    ----------
                    foway:
                        1200
                    kadefor:
                        1000
                    kora:
                        1000
                        ...............



            在master上遠程獲取剛剛定義的屬性
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            [iyunv@controller1 pillar]# salt 'computer3' pillar.items
            computer3:
                ----------
                date:
                    some date
                master:
                    ----------
                    auth_mode:
                        1
                    auto_accept:
                        False
                    cachedir:
                    ..........省略N行..........
                user:
                    ----------
                    foway:
                        1200
                    kadefor:
                        1000
                    kora:
                        1000
                        
            [iyunv@controller1 pillar]# salt 'computer4' pillar.items 
            computer4:
                ----------
                master:
                    ----------
                    auth_mode:
                        1
                    auto_accept:
                        False
                   ..........省略N行..........
                user:
                    ----------
                    foway:
                        1200
                    kadefor:
                        1000
                    kora:
                        1000
                webserver:
                    test_dir



            ## 可以看到剛剛為不同的minion定義的屬性已經同步到了各個minion上,從這個測試可以看出,使用pillar
            ## 我們可以為不同的minion或者不同的minion組定義不同的屬性,極其靈活。

            好了,在介紹了pillar接口之后,接下來看下在cp模塊中如何簡單的使用pillar定義的屬性數據呢

               我們可以利用之前定義的屬性來匹配不同的minion


            首先先同步一下pillar到每個節點上
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            [iyunv@controller1 ~]# salt '*' saltutil.refresh_pillar
            computer8:
                None
            computer4:
                None
            computer5:
                None
            computer6:
                None
            computer3:
                None
            computer7:
                None



            測試一下匹配
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            [iyunv@controller1 ~]# salt -I -v 'date:some date' test.ping                    
            Executing job with jid 20150204164730224160
            -------------------------------------------

            computer3:
                True
            [iyunv@controller1 ~]# salt -I -v 'webserver:test_dir' test.ping
            Executing job with jid 20150204165017170702
            -------------------------------------------

            computer4:
                True
            [iyunv@controller1 ~]# salt -I -v 'users:foway:1200' test.ping   
            Executing job with jid 20150204165053938046
            -------------------------------------------

            computer5:
                True
            computer6:
                True
            computer7:
                True
            computer3:
                True
            computer8:
                True
            computer4:
                True



            匹配computer3,然后在master上遠程分發文件到computer上去
            1
            2
            3
            4
            5
            6
            7
            [iyunv@controller1 salt]# salt -I -v 'webserver:test_dir' cp.get_dir "salt://{{pillar.webserver}}" /opt/ gzip=9 template=jinja
            Executing job with jid 20150204165518149257
            -------------------------------------------

            computer4:
                - /opt//test_dir/hello1.txt
                - /opt//test_dir/hello2.txt




            感覺saltstack的功能很強大,有沒有把你震驚到。繼續學習把。。。。。
            posted on 2016-12-21 14:39 思月行云 閱讀(1122) 評論(0)  編輯 收藏 引用 所屬分類: 服務器\Ops
            国产精品免费久久久久久久久 | 久久精品国产精品亚洲精品| 人妻无码精品久久亚瑟影视| 久久91精品国产91久| 亚洲中文字幕久久精品无码APP| 久久婷婷五月综合97色一本一本 | 性做久久久久久免费观看| 麻豆av久久av盛宴av| 精品国产福利久久久| 亚洲精品视频久久久| av无码久久久久久不卡网站| 久久久黄片| 久久精品国产91久久麻豆自制 | 粉嫩小泬无遮挡久久久久久| 精品久久久久久无码国产| 亚洲午夜久久久影院| 久久精品无码一区二区app| 亚洲熟妇无码另类久久久| 国产精品欧美久久久久天天影视| 影音先锋女人AV鲁色资源网久久 | 久久不见久久见免费视频7| 久久久久亚洲精品天堂久久久久久| 亚洲AV日韩精品久久久久久久| 精品水蜜桃久久久久久久| 久久国产免费观看精品| 亚洲AV日韩精品久久久久| 久久久久亚洲AV成人网人人网站 | 欧美熟妇另类久久久久久不卡 | 性做久久久久久久久老女人| 国产精品亚洲美女久久久| 99久久综合狠狠综合久久止| 亚洲va久久久噜噜噜久久天堂| 亚洲综合精品香蕉久久网| 人人狠狠综合88综合久久| 国产伊人久久| 亚洲AV伊人久久青青草原| 色综合久久中文字幕综合网| 亚洲国产成人精品91久久久 | 一级做a爰片久久毛片16| 久久福利青草精品资源站免费| 91久久精一区二区三区大全|