亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3776 | 回復(fù): 3
打印 上一主題 下一主題

常見負(fù)載均衡器禁(啟)用成員匯總 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-05-12 13:51 |只看該作者 |倒序瀏覽
常見負(fù)載均衡器禁(啟)用成員匯總







       在我們?nèi)粘_\(yùn)維工作中,經(jīng)常會碰到負(fù)載均衡器后端應(yīng)用代碼更新、臨時剔除后端服務(wù)器、排查一主機(jī)應(yīng)用故障等,往往我們會選擇比較粗魯?shù)淖龇,直接停止或重啟?yīng)用服務(wù),讓負(fù)載均衡器探測服務(wù)不可用將其剔除。這樣帶來的壞處是用戶與服務(wù)器已經(jīng)建立的連接會被中止,開發(fā)人員無法對已經(jīng)停止服務(wù)的主機(jī)進(jìn)行調(diào)試。現(xiàn)介紹一種較為溫柔的做法,即通過禁用/啟用成員的方式來達(dá)到目的。本文針對目前最為流行的負(fù)載均衡器逐一進(jìn)行介紹。包括LVS、Haproxy、F5在命令行模式下的實現(xiàn)(方便與其它管理平臺對接,實現(xiàn)自動化維護(hù))。當(dāng)然,Haproxy與F5都提供了人性化管理界面,不過只依賴手工來進(jìn)行操作。

一、LVS負(fù)載均衡器
原理
使用LVS自帶的管理工具來實現(xiàn)。

環(huán)境說明
Disable VIP:192.168.100.11:80
Disable REAL SERVER:192.168.100.78

實施步驟
1、初始狀態(tài)
[devuser@lvsserver ~]# ipvsadm -Ln
  1. IP Virtual Server version 1.2.1 (size=4096)
  2. Prot LocalAddress:Port Scheduler Flags
  3.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  4. TCP  192.168.100.11:80 rr persistent 60
  5.   -> 192.168.100.74:80            Route   3      462        464        
  6.   -> 192.168.100.75:80            Route   3      420        440      
  7.   -> 192.168.100.76:80            Route   3      431        400
  8.   -> 192.168.100.77:80            Route   3      430        432
  9.   -> 192.168.100.78:80            Route   3      435        438
復(fù)制代碼
2、禁用成員
[devuser@lvsserver ~]# ipvsadm -d -t 192.168.100.11:80 -r 192.168.100.78

3、當(dāng)前狀態(tài)
[devuser@lvsserver ~]# ipvsadm -Ln
  1. IP Virtual Server version 1.2.1 (size=4096)
  2. Prot LocalAddress:Port Scheduler Flags
  3.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  4. TCP  192.168.100.11:80 rr persistent 60
  5.   -> 192.168.100.74:80            Route   3      462        464        
  6.   -> 192.168.100.75:80            Route   3      420        440      
  7.   -> 192.168.100.76:80            Route   3      431        400
  8.   -> 192.168.100.77:80            Route   3      430        432
復(fù)制代碼
4、啟用成員
[devuser@lvsserver ~]#ipvsadm -a -t 192.168.100.11:80 -r 192.168.100.78

5、當(dāng)前狀態(tài)
[devuser@lvsserver ~]# ipvsadm -Ln
  1. IP Virtual Server version 1.2.1 (size=4096)
  2. Prot LocalAddress:Port Scheduler Flags
  3.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  4. TCP  192.168.100.11:80 rr persistent 60
  5.   -> 192.168.100.74:80            Route   3      462        464        
  6.   -> 192.168.100.75:80            Route   3      420        440      
  7.   -> 192.168.100.76:80            Route   3      431        400
  8.   -> 192.168.100.77:80            Route   3      430        432
  9.   -> 192.168.100.78:80            Route   3      435        438
復(fù)制代碼
二、Haproxy負(fù)載均衡器
原理
使用Haproxy的socket admin通道來實現(xiàn)。

環(huán)境說明
Disable backend:test.tianya.cn
Disable REAL SERVER:192.168.100.78

實施步驟
1、修改haproxy.cfg配置
#vi /usr/local/haproxy/etc/haproxy.cfg
在global域添加socket admin支持并重啟Haproxy服務(wù)
  1. global
  2. ... ...
  3.    stats socket /usr/local/haproxy/HaproxySocket level admin
  4. ... ...
  5. #service haproxy restart
復(fù)制代碼
2、安裝socat(在任意的兩個socket管道之間建立一個通道,在該通道中交換兩端的數(shù)據(jù)。)

wget http://www.dest-unreach.org/socat/download/socat-2.0.0-b3.tar.gz
./configure --disable-fips
make;make install
注:disable OpenSSL FIPS support  "--disable-fips",在沒有安裝fips包的情況下make時會提示:

FIPSLD_CC=gcc fipsld -O -D_GNU_SOURCE  -Wall -Wno-parentheses -DHAVE_CONFIG_H -I.  -I.   -c -o socat.o socat.c
/bin/sh: fipsld: command not found
make: *** [socat.o] Error 127
3、禁用成員
  1. #echo "disable server test.tianya.cn/192.168.100.78" | socat stdio /usr/local/haproxy/HaproxySocket
復(fù)制代碼


4、啟用成員
  1. #echo "enable server test.tianya.cn/192.168.100.78" | socat stdio /usr/local/haproxy/HaproxySocket
復(fù)制代碼


三、F5-LTM負(fù)載均衡器[separator]
原理
使用F5-iControl開發(fā)包Pycontrol對F5設(shè)備進(jìn)行管理。

環(huán)境說明
Disable POOL:test.tianya.cn
Disable SERVER:192.168.100.42:80 192.168.100.43:80 192.168.100.44:80

實施步驟
1、部署運(yùn)行環(huán)境
  1. #mkdir -p /home/install;cd /home/install
復(fù)制代碼
安裝python環(huán)境(略),要求py2.5或以上。
1.1、安裝SUDS模塊
  1. #wget https://fedorahosted.org/release ... n-suds-0.3.8.tar.gz
  2. #tar xvfz python-suds-0.3.8.tar.gz
  3. #cd python-suds-0.3.8
  4. #python setup.py install
復(fù)制代碼
1.2、安裝PYCONTROL模塊
  1. #wget http://trungale.net/pycontrol.tar.gz
  2. #tar xvfz pycontrol.tar.gz
  3. #cd trunk
  4. #python setup.py install
復(fù)制代碼
1.3、校驗安裝結(jié)果
#python
  1. >>> import suds
  2. >>> import pycontrol.pycontrol as pc
  3. >>> suds.__version__
  4. '0.4'
  5. >>> suds.__build__
  6. 'GA R699-20100913'
  7. >>> pc.__version__
  8. '2.0.1'
  9. >>> pc.__build__
  10. 'r83'
  11. >>>
復(fù)制代碼
2、編寫LB_member.py代碼
  1. # -*- coding: utf-8 -*-
  2. """
  3. ----------------------------------------------------------------------------
  4. Disable/Enable F5-LTM POOL member
  5. Name:        LB_member.py
  6. Author:      Liu tian si
  7. Email:       liutiansi@gamil.com
  8. Created:     2011/05/08
  9. Version:     1.0
  10. Blog:        http://blog.liuts.com
  11. Copyright:   (c) 2011
  12. ----------------------------------------------------------------------------
  13. """

  14. import sys
  15. import time
  16. import string
  17. import pycontrol.pycontrol as pc

  18. """
  19. ----------------------------------------------------------------------------
  20. F5-LTM Disable/Enable Pool member Class
  21. ----------------------------------------------------------------------------
  22. __init__() -Initialization F5-BIG object
  23. set_pool_member() -Initialization pool and member object
  24. member_factory() -Create a pool member object (Common.IPPortDefinition)
  25. session_state_factory() -Create a session state object (LocalLB.PoolMember.MemberSessionState)
  26. disable_member() -Disable menber methods
  27. enable_member() -Enable menber methods
  28. ----------------------------------------------------------------------------
  29. """

  30. class F5_LB_menber():

  31.      def __init__(self,_hostname,_username,_password):
  32.          self.b = pc.BIGIP(
  33.          hostname = _hostname,
  34.          username = _username,
  35.          password = _password,
  36.          fromurl = True,
  37.          wsdls = ['LocalLB.PoolMember'])
  38.          self.sstate_seq = self.b.LocalLB.PoolMember.typefactory.create('LocalLB.PoolMember.MemberSessionStateSequence')


  39.      def set_pool_member(self,pool,members):
  40.          self.POOL=pool
  41.          self.members=members
  42.          self.sstate_seq.item = self.session_state_factory()

  43.      def member_factory(self, member):
  44.          ip,port = member.split(':')
  45.          pmem = self.b.LocalLB.PoolMember.typefactory.create('Common.IPPortDefinition')
  46.          pmem.address = ip
  47.          pmem.port = int(port)
  48.          return pmem


  49.      def session_state_factory(self):
  50.          session_states = []
  51.          for x in self.members:
  52.              sstate = self.b.LocalLB.PoolMember.typefactory.create('LocalLB.PoolMember.MemberSessionState')
  53.              sstate.member = self.member_factory(x)
  54.              session_states.append(sstate)
  55.          return session_states

  56.      def disable_member(self):
  57.          for x in self.sstate_seq.item:
  58.              x.session_state = 'STATE_DISABLED'
  59.          try:
  60.              self.b.LocalLB.PoolMember.set_session_enabled_state(pool_names =
  61.                  [self.POOL], session_states = [self.sstate_seq])

  62.          except Exception, e:
  63.              print e

  64.      def enable_member(self):
  65.          for x in self.sstate_seq.item:
  66.              x.session_state = 'STATE_ENABLED'
  67.          try:
  68.              self.b.LocalLB.PoolMember.set_session_enabled_state(pool_names = [self.POOL],
  69.                  session_states = [self.sstate_seq])
  70.          except Exception, e:
  71.              print e

  72. if __name__ == "__main__":
  73.      if len(sys.argv) < 4:
  74.          print "Usage %s POOL MEMBER:port[,member1:80,member2:80,member3:80] enable|disable" % sys.argv[0]
  75.          print "Examples: python LB_member.py app.domain.com 192.168.0.10:80,192.168.0.11:80,192.168.0.12:80 disable"
  76.          sys.exit()

  77.      #F5 administrator info
  78.      hostname="192.168.100.2"
  79.      username="adminuser"
  80.      password="adminpass"

  81.      App=F5_LB_menber(hostname,username,password)

  82.      #init F5 pool and member
  83.      CommandParameters = sys.argv[1:]
  84.      pool=CommandParameters[0]
  85.      members=string.split(CommandParameters[1],',')

  86.      App.set_pool_member(pool,members)
  87.      if CommandParameters[2]=="enable":
  88.          App.enable_member()
  89.      elif CommandParameters[2]=="disable":
  90.          App.disable_member()
  91.      else:
  92.          print "opt parameters error!"
  93.          sys.exit()
復(fù)制代碼
3、源碼分析:
3.1、創(chuàng)建一個池成員對象,將用戶傳入的成員列表轉(zhuǎn)成規(guī)范的pool成員,見member_factory()方法;
3.2、創(chuàng)建一個會話狀態(tài)對象,追加成員對象到會話狀態(tài)當(dāng)中,見session_state_factory()方法;
3.3、創(chuàng)建一個隊列,將會話狀態(tài)對象添加到隊列子項中,同時修改所處狀態(tài),見__init__()、set_pool_member()、disable_member()/enable_member()方法。

4、禁用成員
#python LB_member.py test.tianya.cn 192.168.100.42:80,192.168.100.43:80,192.168.100.44:80 disable


5、啟用成員
#python LB_member.py test.tianya.cn 192.168.100.42:80,192.168.100.43:80,192.168.100.44:80 enable


參考文章
http://devcentral.f5.com/wiki/default.aspx/iControl.CodeShare

論壇徽章:
0
2 [報告]
發(fā)表于 2011-05-17 23:51 |只看該作者
感謝分享!

論壇徽章:
0
3 [報告]
發(fā)表于 2011-06-29 09:59 |只看該作者
我原來一直以為只有LVS。。。

論壇徽章:
3
處女座
日期:2014-11-05 11:02:4315-16賽季CBA聯(lián)賽之四川
日期:2015-12-10 14:37:4015-16賽季CBA聯(lián)賽之天津
日期:2017-09-08 18:39:34
4 [報告]
發(fā)表于 2011-06-30 19:58 |只看該作者
Apache和Nginx通過配置也可以實現(xiàn)負(fù)載均衡啊
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP