Day3-HAproxy

HAproxy配置文件操作
1. 根据用户输入输出对应的backend下的server信息
2. 可添加backend 和sever信息
3. 可修改backend 和sever信息
4. 可删除backend 和sever信息
5. 操作配置文件前进行备份
6 添加server信息时,如果ip已经存在则修改;如果backend不存在则创建;若信息与已有信息重复则不操作

  1 import json
  2 import os
  3
  4
  5 def show_all_backend(filename):
  6     try:
  7         l_backend = []
  8         with open(filename, ‘r‘, encoding=‘utf-8‘) as f:
  9             lines = f.readlines()
 10             for line in lines:
 11                 if line.strip().startswith(‘backend‘):
 12                     l_backend.append(line)
 13         if l_backend:
 14             for i,j in enumerate(l_backend):
 15                 print (‘\t%s‘ % (i + 1), j)
 16             return True
 17
 18         else:
 19             print(‘No actived backends!‘)
 20             return False
 21     except EOFError as msg:
 22         print(msg)
 23
 24
 25 def show_server_info_under_backend(url):
 26     l_backend = []
 27     f = open(‘HAproxy‘, ‘r‘, encoding=‘utf-8‘)
 28     lines = f.readlines()
 29     for i in range(len(lines)):
 30         if lines[i].strip().startswith(‘backend‘):
 31             item = lines[i].strip().strip(‘\n‘)
 32             new_item = item.strip(‘backend ‘)
 33             #print (new_item)
 34             l_backend.append(new_item)
 35     #print (l_backend)
 36     if url in l_backend:
 37         for i in range(len(lines)):
 38             if lines[i].strip().startswith(‘backend %s‘%url):
 39                 j = lines.index(lines[i])
 40                 #print (lines[j])
 41         i = j+1
 42         l_base = []
 43         if url == l_backend[-1]:
 44             p = lines.index(‘backend %s\n‘%l_backend[-1])
 45             for item in lines[p+1:]:
 46                 l_base.append(item.strip().strip(‘\n‘))
 47         else:
 48             while True:
 49                 if lines[i].strip().startswith(‘server‘):
 50                     l_base.append(lines[i].strip().strip(‘\n‘))
 51                     i +=1
 52                     if (lines[i].strip().startswith(‘backend‘)):
 53                         break
 54
 55         for i, j in enumerate(l_base):
 56             print(‘\t%s‘ % (i + 1), j)
 57         return True
 58     else:
 59         return False
 60
 61 def is_backend_exists(url):
 62     try:
 63         lbackend = []
 64         f = open(‘HAproxy‘, ‘r‘, encoding=‘utf-8‘)
 65         lines = f.readlines()
 66         for i in range(len(lines)):
 67             if lines[i].startswith("backend"):
 68                 lbackend.append(lines[i][len("backend "):].strip(‘\n‘))
 69         f.close()
 70
 71         if url in lbackend:
 72             #print("backend %s exists!Please added server info directly"%url)
 73             return True
 74         else:
 75             return False
 76
 77     except EOFError as msg:
 78         print(msg)
 79
 80     finally:
 81         f.close()
 82
 83 def add_backend(url):
 84     try:
 85         f = open(‘HAproxy‘, ‘a+‘, encoding=‘utf-8‘)
 86         if not is_backend_exists(url):
 87             f.writelines("\n\rbackend %s" % url)
 88             print("Add backend %s successfully" % url)
 89         else:
 90             print("Fail to add backend %s since it already exists" % url)
 91
 92     except EOFError as msg:
 93         print(msg)
 94
 95     finally:
 96         f.close()
 97
 98
 99 def del_backend(url):
100     try:
101         if is_backend_exists(url):
102             f = open(‘HAproxy‘, ‘r+‘, encoding=‘utf-8‘)
103             lines = f.readlines()
104             f.close()
105
106             if url in lines[-1].strip():
107                 lines[-1]=""
108             else:
109                 for i in range(len(lines)):
110                     if lines[i].startswith(‘backend‘) and (url in lines[i]):
111                         lines[i] = ""
112                         j = i + 1
113                         while True:
114                             if lines[-1].strip().startswith(‘server‘):
115                                 break
116                             elif lines[j].strip().startswith(‘server‘):
117                                 lines[j] = ""
118                                 j += 1
119                             else:
120                                 break
121             f = open(‘HAproxy‘, ‘w+‘, encoding=‘utf-8‘)
122             f.writelines(lines)
123             f.close()
124             print(‘Delete backend %s sucessfully!‘%url)
125             return True
126         else:
127             print(‘Delete Failed - No such backend sever exits‘)
128             return False
129
130     except EOFError as msg:
131          print(msg)
132
133
134 def show_all_active_server_info(filename):
135     try:
136         l_server = []
137         with open(filename, ‘r‘, encoding=‘utf-8‘) as f:
138             lines = f.readlines()
139             for line in lines:
140                 if line.strip().startswith(‘server‘):
141                     l_server.append(line)
142         if l_server:
143             str = "The active server info as below:"
144             print(str.center(60,‘*‘))
145             for i, j in enumerate(l_server):
146                 print(‘\t%s‘ % (i + 1), j)
147             return True
148
149         else:
150             print(‘No actived servers!‘)
151             return False
152     except EOFError as msg:
153         print(msg)
154
155 def add_server_info_under_backend(str):
156     # Tranfer inside str to dict
157     try:
158         dict = json.loads(str)
159         # print (dict)
160         item = "server {server} weight {weight} maxconn {maxconn}".format(**dict[‘record‘])
161         #print(type(item))
162         i = 0
163         if is_backend_exists(dict[‘backend‘]):
164             f = open(‘HAproxy‘, ‘r+‘, encoding=‘utf-8‘)
165             lines = f.readlines()
166             f.close()
167             #print (lines)
168             l_backend = []
169             for line in lines:
170                 if dict[‘backend‘] in line.strip(‘\n‘):
171                     index = lines.index(line)
172                     i = index
173                     # print(lines[i])
174                     break
175
176             for line in lines:
177                 if line.strip().startswith(‘backend‘):
178                     l_backend.append(line)
179
180             if dict[‘backend‘] in l_backend[-1]:
181                 l_set = []
182                 for line in lines[i:]:
183                     l_set.append(line.strip().strip(‘\n‘))
184                 # print(l_set)
185                 # print(item)
186                 if item in l_set:
187                     return False
188
189                 else:
190                     with open(‘HAproxy‘, ‘r‘, encoding=‘utf-8‘) as f1:
191                         lines = f1.readlines()
192                     l_ip = []
193                     #print(dict[‘record‘][‘server‘])
194                     for n in range(len(lines)):
195                         if lines[n].startswith(‘\t\tserver %s ‘ % dict[‘record‘][‘server‘]):
196                             l_ip.append(lines[n])
197                     if l_ip:
198                         dict = json.loads(str)
199                         item2 = "server {server} weight {weight} maxconn {maxconn}".format(**dict[‘record‘])
200                         with open(‘HAproxy‘, ‘r+‘, encoding=‘utf-8‘) as f2:
201                             new_lines = f2.readlines()
202                             p = 0
203                             for line in new_lines:
204                                 if ‘\t\tserver %s ‘ % dict[‘record‘][‘server‘] in line:
205                                     p = new_lines.index(line)
206
207                             new_lines[p] = ‘\t\t%s\n‘ % item2
208                         with open(‘HAproxy‘, ‘w+‘, encoding=‘utf-8‘) as f3:
209                             f3.writelines(new_lines)
210                             print(‘Update server info successfully!‘)
211                             return True
212
213                     else:
214                         f = open(‘HAproxy‘, ‘a+‘, encoding=‘utf-8‘)
215                         line = "\n\t\tserver {server} weight {weight} maxconn {maxconn}".format(**dict[‘record‘])
216                         f.writelines(line)
217                         f.close()
218             else:
219                 j=i+1
220                 l_server = []
221                 while True:
222                     if lines[j].strip().startswith(‘server‘):
223                         l_server.append(lines[j].strip().strip(‘\n‘))
224                         j +=1
225                         if lines[j].strip().startswith(‘backend‘):
226                             break
227                 if item in l_server:
228                     return False
229                 else:
230                     with open(‘HAproxy‘, ‘r‘, encoding=‘utf-8‘) as f1:
231                         lines = f1.readlines()
232                     l_ip = []
233                     #print(dict[‘record‘][‘server‘])
234                     for n in range(len(lines)):
235                         if lines[n].startswith(‘\t\tserver %s ‘%dict[‘record‘][‘server‘]):
236                             l_ip.append(lines[n])
237                     if l_ip:
238                         dict = json.loads(str)
239                         item2 = "server {server} weight {weight} maxconn {maxconn}".format(**dict[‘record‘])
240                         with open(‘HAproxy‘, ‘r+‘, encoding=‘utf-8‘) as f2:
241                             new_lines = f2.readlines()
242                             p = 0
243                             for line in new_lines:
244                                 if ‘\t\tserver %s ‘%dict[‘record‘][‘server‘] in line:
245                                     p = new_lines.index(line)
246
247                             new_lines[p] = ‘\t\t%s\n‘%item2
248                         with open(‘HAproxy‘, ‘w+‘, encoding=‘utf-8‘) as f3:
249                             f3.writelines(new_lines)
250                             print(‘hello?‘)
251                             return True
252
253                     else:
254                         lines.insert(j,"\t\tserver {server} weight {weight} maxconn {maxconn}\n".format(**dict[‘record‘]))
255                         f = open(‘HAproxy‘, ‘w+‘, encoding=‘utf-8‘)
256                         f.writelines(lines)
257                         f.close()
258                     return True
259
260         else:
261             add_backend(dict[‘backend‘])
262             print(dict[‘record‘])
263             f = open(‘HAproxy‘, ‘a+‘, encoding=‘utf-8‘)
264             line = "\n\t\tserver {server} weight {weight} maxconn {maxconn}".format(**dict[‘record‘])
265             f.writelines(line)
266             f.close()
267
268     except EOFError as msg:
269         print(msg)
270
271 def del_server_info_under_backend(str):
272     try:
273         f = open(‘HAproxy‘, ‘r+‘, encoding=‘utf-8‘)
274         lines = f.readlines()
275         l_backend = []
276         for line in lines:
277             if line.strip().startswith(‘backend‘):
278                 l_backend.append(line.strip())
279         f.close()
280
281         for i in range(len(lines)):
282             if str in lines[i].strip():
283                 print(‘Delete server info: %s‘ % str)
284                 p = lines.index(lines[i])
285                 if (lines[p-1].strip().startswith(‘backend‘)) and (lines[p].strip() in lines[-1]):
286                     lines.remove(lines[p])
287                     # print(‘No actived server under %s, remove backend‘%lines[p-1].strip().strip(‘\n‘))
288                     lines.remove(lines[p - 1])
289                     break
290                 elif (lines[p-1].strip().startswith(‘backend‘))and (lines[p+1].strip().startswith(‘backend‘)):
291                     lines.remove(lines[p])
292                     # print(‘No actived server under %s, remove backend!‘%lines[p - 1].strip().strip(‘\n‘))
293                     lines.remove(lines[p - 1])
294                     break
295                 else:
296                     lines.remove(lines[p])
297                     break
298         f = open(‘HAproxy‘, ‘w+‘, encoding=‘utf-8‘)
299         f.writelines(lines)
300         return True
301
302     except EOFError as msg:
303         print(msg)
304
305
306 def backup_server_file(original_file,new_file):
307     try:
308         with open(original_file,‘r‘,encoding=‘utf-8‘) as f1, open(new_file,‘w‘,encoding=‘utf-8‘) as f2:
309             lines = f1.readlines()
310             for line in lines:
311                 f2.writelines(line)
312         str = ‘Backing up is Done!‘
313         print(str.center(40,‘*‘))
314     except EOFError as msg:
315         print(msg)
316
317
318 if __name__ == "__main__":
319     counter = 0
320     bValue = True
321     while True:
322         counter +=1
323         if counter == 3:
324             print(‘You`ve entered invalid info for 3 times, system quit!‘)
325             exit()
326
327         else:
328
329             row_input = input("Do you want to operate server file?(y/n) ")
330             if row_input in [‘n‘,‘N‘,‘q‘,‘Q‘]:
331                 print(‘Quit‘)
332                 exit()
333             elif row_input in [‘y‘,‘Y‘]:
334                 bValue = True
335                 while True:
336                     print(‘Backing up your server file as HAproxy_bak on your server..‘)
337                     backup_server_file(‘HAproxy‘, ‘HAproxy_bak‘)
338                     # row_input = input("1.Show all backend  | 2.Add new backend | 3.Delete backend ")
339                     if bool(show_all_backend(‘HAproxy‘)) == True:
340                         while True:
341                             str = ‘The active backends as below:‘
342                             print(str.center(60,‘*‘))
343                             show_all_backend(‘HAproxy‘)
344                             row_input = input(‘1.Add backend server info | 2.Delete backend | 3 View server info under backend | 4 Show all actived server info  ‘)
345                             if row_input in [‘q‘,‘Q‘]:
346                                 print(‘Quit‘)
347                                 exit()
348                             elif row_input == "1":
349                             #     row_input = input(‘Enter the backend url you want to add here -> : ‘)
350                             #     if row_input in [‘q‘, ‘Q‘]:
351                             #         print(‘Quit‘)
352                             #     else:
353                             #         add_backend(row_input)
354                             #         continue
355                                 print(‘You should add sever info like {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}}‘)
356                                 row_input = input(‘Enter your new server info here->: ‘)
357                                 if row_input in [‘q‘, ‘Q‘]:
358                                     print(‘Quit‘)
359                                     exit()
360                                 else:
361                                     backup_server_file(‘HAproxy‘, ‘HAproxy_bak‘)
362                                     add_server_info_under_backend(row_input)
363                                     continue
364
365                             elif row_input == "2":
366                                 row_input = input(‘Enter the backend url you want to delete here -> : ‘)
367                                 if row_input in [‘q‘, ‘Q‘]:
368                                     print(‘Quit‘)
369                                     exit()
370                                 else:
371                                     backup_server_file(‘HAproxy‘, ‘HAproxy_bak‘)
372                                     del_backend(row_input)
373                                     continue
374
375                             elif row_input == "3":
376                                 row_input = input(‘Enter the backend url under which you want to check server info here-> : ‘)
377                                 if row_input in [‘q‘, ‘Q‘]:
378                                     print(‘Quit‘)
379                                 else:
380                                     backup_server_file(‘HAproxy‘, ‘HAproxy_bak‘)
381                                     while True:
382                                         if bool(show_server_info_under_backend(row_input)):
383                                             row_input = input(‘1.Add or Update sever info | 2. Delete server info | 3. Return to the previous menu‘)
384                                             if row_input in [‘q‘, ‘Q‘]:
385                                                 print(‘Quit‘)
386                                                 exit()
387                                             elif row_input == ‘1‘:
388                                                 print(‘You should add sever info like {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}}‘)
389                                                 row_input = input(‘Enter your new server info here->: ‘)
390                                                 if row_input in [‘q‘, ‘Q‘]:
391                                                     print(‘Quit‘)
392                                                     exit()
393                                                 else:
394                                                     backup_server_file(‘HAproxy‘, ‘HAproxy_bak‘)
395                                                     add_server_info_under_backend(row_input)
396                                                     continue
397                                             # elif row_input == ‘2‘:
398                                             #     pass
399
400                                             elif row_input == ‘2‘:
401
402                                                 if row_input in [‘q‘, ‘Q‘]:
403                                                     print(‘Quit‘)
404                                                     exit()
405                                                 else:
406
407                                                     if row_input in [‘q‘, ‘Q‘]:
408                                                         print(‘Quit‘)
409                                                         exit()
410
411                                                     else:
412                                                         backup_server_file(‘HAproxy‘, ‘HAproxy_bak‘)
413                                                         row_input = input(‘Please enter your server info you want to delete here->‘)
414                                                         del_server_info_under_backend(row_input)
415                                                         continue
416                                             elif row_input == ‘3‘:
417                                                 continue
418                                             else:
419                                                 print(‘Invalid input choice, please re-enter‘)
420                                                 continue
421
422                                         else:
423                                             break
424
425
426                             elif  row_input == "4":
427                                 if bool(show_all_active_server_info(‘HAproxy‘)) == True:
428
429                                      #show_all_active_server_info(‘HAproxy‘)
430                                      continue
431                                 else:
432                                     backup_server_file(‘HAproxy‘, ‘HAproxy_bak‘)
433                                     row_input = input(‘There is no actived server info exists, want to add? (y/n)‘)
434                                     if row_input in [‘q‘, ‘Q‘]:
435                                         print(‘Quit‘)
436                                         exit()
437                                     elif row_input in [‘y‘, ‘Y‘]:
438                                         print(‘You should add sever info like {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}}‘)
439                                         row_input = input(‘Enter your new server info here->: ‘)
440                                         if row_input in [‘q‘, ‘Q‘]:
441                                             print(‘Quit‘)
442                                             exit()
443                                         else:
444                                             add_server_info_under_backend(row_input)
445                                             continue
446
447                             else:
448                                 print(‘Not invalid choice, please re-enter again.‘)
449                                 continue
450
451                     else:
452                         row_input = input(‘There is no actived server info exists, want to add? (y/n)‘)
453                         if row_input in [‘q‘, ‘Q‘]:
454                             print(‘Quit‘)
455                             exit()
456                         elif row_input in [‘y‘, ‘Y‘]:
457                             print(
458                                 ‘You should add sever info like {"backend": "test.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 30}}‘)
459                             row_input = input(‘Enter your new server info here->: ‘)
460                             if row_input in [‘q‘, ‘Q‘]:
461                                 print(‘Quit‘)
462                                 exit()
463                             else:
464                                 backup_server_file(‘HAproxy‘, ‘HAproxy_bak‘)
465                                 add_server_info_under_backend(row_input)
466                                 continue
467                         else:
468                             continue
469
470
471
472
473             else:
474                 print(‘Not invalid choice , please re-enter again\n‘)
475                 continue

时间: 2024-10-09 00:06:15

Day3-HAproxy的相关文章

day3 haproxy配置文件修改

集合: 1 list1=[1,3,4,6,7] 2 #列表转换集合 3 list1=set(list1) 4 print(list1) 5 #定义集合 6 list2=set([3,7,5,8]) 7 print(type(list2)) 8 #交集 9 print(list1.intersection(list2)) 10 print(list1 & list2) 11 #并集 12 print(list1.union(list2)) 13 print(list1 | list2) 14 #差

Day3作业:haproxy文件配置

实现功能 1 backend记录查询 2 增加backend记录 1)若backend记录不存在,则添加backend及ha记录 2)若backend存在,要添加的记录存在,则返回提示已存在 3)若backend存在,要添加的记录不存在,则添加记录 3 删除backend记录 1)若backend不存在则返回提示不存在 2)若backend存在,根据显示的backend记录,选择序号删除,若删除指定后记录为空则连backend行同时删除,若删除指定后记录不为空则返回当前backend记录 Hap

Python3.5 day3作业二:修改haproxy配置文件。

需求: 1.使python具体增删查的功能. haproxy的配置文件. global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 info defaults log global mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms option dontlognull listen stats :8888 sta

Python自动化运维课程学习--Day3

本文为参加老男孩Python自动化运维课程第三天学习内容的总结. 大致内容如下: 1.文件操作 2.字符编码转码相关操作 3.函数 0.关于本文中所有运行Python代码的环境: --操作系统:Ubuntu 16.10 (Linux 4.8.0) --Python版本:3.5.2 python2.7.12 --Python IDE: PyCharm 2016.3.2 一.文件操作: 1.文件操作流程:以只读.写(覆盖写).追加写.读写.追加读写.二进制读写等模式打开文件 ==> 得到文件句柄,并

Python学习day3作业

Python学习day3作业 days3作业 作业需求     HAproxy配置文件操作 根据用户输入,输出对应的backend下的server信息 可添加backend 和sever信息 可修改backend 和sever信息 可删除backend 和sever信息 操作配置文件前进行备份 添加server信息时,如果ip已经存在则修改;如果backend不存在则创建:若信息与已有信息重复则不操作 [x] 博客 [x] 查询backend下的server信息 [x] 添加backend和se

HAProxy 高级应用(一)

HAProxy 高级应用 ================================================================================ 概述:   本章将继续上章的内容介绍haprosy代理配置段的相关参数,具体如下: ACL控制访问列表: 4层检测机制:dst,dst_port,src,src_port 7层检查机制:path.req.hdr.res.hdr: http层访问控制相关的参数: block,http-request TCP层的访

HAProxy+mongos搭建高可用负载均衡mongodb

在生产环境中,搭建的mongodb分片,提供了三个mongos接口.但mongodb中没有failover机制,官方建议是将mongos和应用服务器部署在一起,多个应用服务器就要部署多个mongos实例,这样很是不方便.查了一下,有几种方法可以使这三个mongos接口都利用起来,减少单个接口的压力.常用的有LVS和HAProxy.于是尝试用HAProxy做负载均衡. HAProxy是一款提供高可用性.负载均衡以及基于TCP和HTTP应用的代理软件,HAProxy是完全免费的.借助HAProxy可

haproxy,tomcat.apache记录用户真实IP

Haproxy配置: default加入: option httpclose option forwardfor Tomcat配置: server.xml中添加 prefix="localhost_access_log." suffix=".txt" pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i %T" resolveHosts="false&qu

haproxy负载均衡

web_proxy server 192.168.20.112 web1 server 192.168.20.137 web2 server 192.168.20.140 echo "192.168.20.137 > /usr/local/nginx/html/index.html echo "192.168.20.140 > /usr/local/nginx/html/index.html 下载安装haproxy tar -zxvf haproxy-1.4.24.tar.

linux 下Haproxy实现简单四层负载均衡

HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. Haproxy的四层负载均衡搭建 主机规划: server 192.168.1.148  提供haproxy服务 后台  web1  192.168.1.150 web2  192.168.1.136 使用源码包安装 解压: tar -zxvf haproxy-1.4.24.tar.gz 进入到解压目录: cd  haproxy-1.4.24 编译: make TARGE