基於SaltStack完成LVS的配置管理

前置閱讀python

環境說明git

開工github

配置SaltStack LVS模塊web

配置pillar服務器

編寫Statestcp

應用配置ide

總結測試

以前因爲工做需求,編寫了SaltStack的 LVS遠程執行模塊 , LVS service狀態管理模塊 及 LVS server狀態管理模塊 ,並 提交給了SaltStack官方 Loadblance(DR)及RealServer的配置管理.server


前置閱讀?ip


LVS-DR模式配置詳解 ,須要注意的是,LVS-DR方式工做在數據鏈路層,文中描述須要開啓ip_forward,其實沒有必要, 詳情見 LVS DR模式原理剖析

環境說明

三臺服務器用於LVS集羣,其中主機名爲lvs的擔當的角色爲loadblance,對應的IP地址爲192.168.36.10;主機名爲web-01和web-02的主機擔當的角色爲RealServer, 對應的IP地址分別爲192.168.36.11及192.168.36.12

LVS VIP: 192.168.36.33, Port: 80, VIP綁定在lvs的eth1口

最最重要的是loadblance主機爲Linux,並已安裝ipvsadm, Windows/Unix等主機的同窗請繞過吧,這不是個人錯......

開工

Note


如下全部操做均在Master上進行


配置SaltStack LVS模塊

若是使用的Salt版本已經包含了lvs模塊,請忽略本節內容,測試方法:

salt 'lvs' cmd.run "python -c 'import salt.modules.lvs'"

若是輸出有 ImportError 字樣,則表示模塊沒有安裝,須要進行以下操做:


test -d /srv/salt/_modules || mkdir /srv/salt/_modules

test -d /srv/salt/_states || mkdir /srv/salt/_states

wget https://raw.github.com/saltstack/salt/develop/salt/modules/lvs.py -O /srv/salt/_modules/lvs.py

wget https://raw.github.com/saltstack/salt/develop/salt/states/lvs_service.py -O /srv/salt/_states/lvs_service.py

wget https://raw.github.com/saltstack/salt/develop/salt/states/lvs_server.py -O /srv/salt/_states/lvs_server.py

配置pillar

/srv/pillar/lvs/loadblance.sls


lvs-loadblance:

  - name: lvstest

    vip: 192.168.36.33

    vip-nic: eth1

    port: 80

    protocol: tcp

    scheduler: wlc

    realservers:

      - name: web-01

        ip: 192.168.36.11

        port: 80

        packet_forward_method: dr

        weight: 10

      - name: web-02

        ip: 192.168.36.12

        port: 80

        packet_forward_method: dr

        weight: 30

/srv/pillar/lvs/realserver.sls


lvs-realserver:

  - name: lvstest

    vip: 192.168.36.33

/srv/pillar/top.sls


base:

  'lvs':

    - lvs.loadblance

  'web-0*':

    - lvs.realserver

編寫States

/srv/salt/lvs/loadblance.sls


# config lvs

{% if 'lvs-loadblance' in pillar %}

{% for each_lvs in pillar['lvs-loadblance'] %}

# config lvs vip

{{each_lvs['name']}}-vip:

  network.managed:

    - name: {{each_lvs['vip-nic'] + ":" + each_lvs['name']}}

    - enable: True

    - type: eth

    - proto: none

    - ipaddr: {{each_lvs['vip']}}

    - netmask: 255.255.255.255


{% set service_address = each_lvs['vip'] + ":" + each_lvs['port']|string() %}

{{each_lvs['name']}}-service:

  lvs_service.present:

    - protocol: {{each_lvs['protocol']}}

    - service_address: `service_address`

    - scheduler: {{each_lvs['scheduler']}}


{% for each_rs in each_lvs['realservers'] %}

{% set server_address = each_rs['ip'] + ":" + each_rs['port']|string() %}

{{each_rs['name']}}-server:

  lvs_server.present:

    - protocol: {{each_lvs['protocol']}}

    - service_address: `service_address`

    - server_address: `server_address`

    - packet_forward_method: {{each_rs['packet_forward_method']}}

    - weight: {{each_rs['weight']}}

{% endfor %}

{% endfor %}

{% endif %}

/srv/salt/lvs/realserver.sls


# ignore arp

net.ipv4.conf.all.arp_ignore:

  sysctl.present:

    - value: 1


net.ipv4.conf.lo.arp_ignore:

  sysctl.present:

    - value: 1


net.ipv4.conf.all.arp_announce:

  sysctl.present:

    - value: 2


net.ipv4.conf.lo.arp_announce:

  sysctl.present:

    - value: 2


# config lvs vip

{% if 'lvs-realserver' in pillar %}

{% for each_lvs in pillar['lvs-realserver'] %}

lvs-vip:

  network.managed:

    - name: {{"lo" + ":" + each_lvs['name']}}

    - enable: True

    - type: eth

    - proto: none

    - ipaddr: {{each_lvs['vip']}}

    - netmask: 255.255.255.255

{% endfor %}

{% endif %}

/srv/salt/top.sls

base:

  'lvs':

    - lvs.loadblance

  'web-0*':

    - lvs.realserver

應用配置

若是以前進行 配置LVS模塊 的操做,須要進行同步模塊的操做:


salt 'lvs*' saltutil.sync_all

應用LVS配置:


salt '*' state.highstate

查看LVS當前狀態:


salt 'lvs' lvs.list

總結

經過SaltStack LVS模塊,能夠快速的查詢LVS狀態,執行LVS經常使用指令及完成LVS的配置管理。若有須要調整RealServer規則或添加新的RealServer, 只須要修改 /srv/pillar/lvs/loadblance.sls ,而後應用配置便可.


本文中所用到的代碼已經上傳至github,傳送門: https://github.com/pengyao/salt-lvs


Powered by Redmine ? 2006-2014 Jean-Philippe Lang 

相關文章
相關標籤/搜索