基於SaltStack完成LVS的配置管理

以前因爲工做需求,編寫了SaltStack的 LVS遠程執行模塊 , LVS service狀態管理模塊 及 LVS server狀態管理模塊 ,並提交給了SaltStack官方 Loadblance(DR)及RealServer的配置管理.
   前置閱讀
   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.realserverhtml

  編寫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 ,而後應用配置便可.python

本文選自:http://www.spasvo.com/news/html/2014121155049_2.htmlgit

相關文章
相關標籤/搜索