码迷,mamicode.com
首页 > 其他好文 > 详细

Day3作业:haproxy文件配置

时间:2016-04-28 07:02:09      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

实现功能

1 backend记录查询

2 增加backend记录

   1)若backend记录不存在,则添加backend及ha记录

   2)若backend存在,要添加的记录存在,则返回提示已存在

   3)若backend存在,要添加的记录不存在,则添加记录

3 删除backend记录

   1)若backend不存在则返回提示不存在

   2)若backend存在,根据显示的backend记录,选择序号删除,若删除指定后记录为空则连backend行同时删除,若删除指定后记录不为空则返回当前backend记录

 

Haproxy文件ha

 

技术分享
 1 global
 2         log 127.0.0.1 local2
 3         daemon
 4         maxconn 256
 5         log 127.0.0.1 local2 info
 6 defaults
 7         log global
 8         mode http
 9         timeout connect 5000ms
10         timeout client 50000ms
11         timeout server 50000ms
12         option  dontlognull
13 
14 listen stats :8888
15         stats enable
16         stats uri       /admin
17         stats auth      admin:1234
18 
19 frontend oldboy.org
20         bind 0.0.0.0:80
21         option httplog
22         option httpclose
23         option  forwardfor
24         log global
25         acl www hdr_reg(host) -i www.oldboy.org
26         use_backend www.oldboy.org if www
27 
28 backend www.oldboy.org
29         server 100.1.7.99 weight 20 maxconn 3000
30 
31 backend buy.oldboy.org
32         server 100.1.7.9 weight 20 maxconn 3000
View Code

 

 流程图

 技术分享

 

 python实现代码

技术分享
  1 #!/usr/bin/env python3
  2 
  3 # 获取指定backend的记录
  4 def show_ha_record(ha_backend):
  5     flag = False
  6     record_list=[]
  7     with open(ha,r+) as ha_file:
  8         # 拼接完整的backend行记录
  9         backend = backend+ +ha_backend
 10         for line in ha_file:
 11             # 当匹配时将标志位flag置为True,并直接进入下一个循环
 12             if line.strip() == backend:
 13                 flag = True
 14                 continue
 15             # 判断第一个匹配bakend后的循环中,当前line中的字符串是否以“backend”开头,若是则终止循环,代表着循环到了下一个backend
 16             elif flag and line.strip().startswith(backend):
 17                 break
 18             # 判断第一个匹配bakend后的循环中,line记录存在且不为空,则将该记录添加到列表record_list
 19             elif flag and line.strip():
 20                 record_list.append(line)
 21     return record_list
 22 
 23 
 24 # 增加ha记录
 25 def ha_add_record(ha_backend,backend_record):
 26     flag = False
 27     a=0
 28     backend_line = backend  + ha_backend
 29     record_line = \t\t+backend_record+\n
 30     if not show_ha_record(ha_backend):
 31         with open(ha,a+) as ha_file:
 32             ha_file.write(\n)
 33             ha_file.write(backend_line+\n)
 34             ha_file.write(record_line)
 35             print(添加成功!\n)
 36     elif show_ha_record(ha_backend):
 37         for line_record in show_ha_record(ha_backend):
 38             if backend_record.strip().split()[1] == line_record.strip().split()[1]:
 39                 print(您要增加ip在当前backend已经存在!\n)
 40                 break
 41         else:
 42             with open(har+) as ha_file:
 43                 ha_file_list = ha_file.readlines()
 44                 for n,line in enumerate(ha_file_list):
 45                     # 当匹配时将标志位flag置为True,并直接进入下一个循环
 46                     if line.strip() == backend_line:
 47                         flag = True
 48                         continue
 49                     # 判断第一个匹配bakend后的循环中,当前line中的字符串是否以“backend”开头,若是则终止循环
 50                     elif flag and line.strip().startswith(backend):
 51                         break
 52                     # 判断第一个匹配bakend后的循环中,循环当前backend的记录,将最后一个记录的位置记录到b
 53                     elif flag and line.strip():
 54                         a = n
 55                 # 在当前backend的最后一条记录添加新记录
 56                 ha_file_list.insert(a+1,record_line)
 57                 ha_file.seek(0)
 58                 ha_file.truncate()
 59                 for record in ha_file_list:
 60                     ha_file.write(record)
 61                 print(添加成功!\n)
 62     backend_list = show_ha_record(ha_backend)
 63     return backend_list
 64 
 65 
 66 #删除ha记录
 67 def ha_del_record(ha_backend,del_num):
 68     # 拼接backend
 69     backend_line = backend  + ha_backend
 70     with open(har+) as ha_file:
 71         # 将文件读入列表
 72         ha_file_list = ha_file.readlines()
 73         # 当前backend下的ha记录
 74         ha_backend_list = show_ha_record(ha_backend)
 75         # ha_backend_list列表中的记录也存在于文件中,所以从ha_file_list列表删除选中的记录,
 76         ha_file_list.remove(ha_backend_list[int(del_num) - 1])
 77         # 将选中的记录也从 ha_backend_list列表中移除
 78         del ha_backend_list[int(del_num) - 1]
 79         # 如果ha_backend_list列表为空,将当前backend的行也删除
 80         if not ha_backend_list:
 81             ha_file_list.remove(backend_line+\n)
 82         # 文件处理,将新的文件列表重写到文件中
 83         ha_file.seek(0)
 84         ha_file.truncate()
 85         for ha_line in ha_file_list:
 86             ha_file.write(ha_line)
 87     return ha_backend_list
 88 
 89 
 90 menu = ‘‘‘            1、获取ha记录
 91             2、增加ha记录
 92             3、删除ha记录‘‘‘
 93 
 94 
 95 def main():
 96     print(欢迎来到ha配置文件管理系统)
 97     while True:
 98         print(40 * *)
 99         print(menu)
100         print(40 * *)
101         menu_input = input(请输入序号,退出请输入q :)
102         if menu_input == 1:
103             ha_backend = input(请输入backend,例"www.zhy.com":)
104             while True:
105                 ha_record_list = show_ha_record(ha_backend)
106                 # 当返回的列表不为空
107                 if ha_record_list:
108                     print(当前backend:%s的记录如下 % ha_backend)
109                     for n,line in enumerate(ha_record_list):
110                         print(%d- %s % (n+1, line.strip()))
111                     input("按任意键返回主菜单:")
112                     break
113                 else:
114                     ha_backend=input("您输入的backend不存在,请重新输入:")
115 
116         elif menu_input == 2:
117             add_backend = input(请输入要添加记录的backend,例"www.zhy.com":)
118             add_backend_record = input(请输入要添加的记录,例"server 1.1.1.1 weight 20 maxconn 3000":)
119             # 调用函数添加记录
120             backend_record=ha_add_record(add_backend,add_backend_record)
121             print(当前backend:%s的记录如下 % add_backend)
122             # 显示添加后backend记录
123             for n, line in enumerate(backend_record):
124                 print(%d- %s % (n + 1, line.strip()))
125             print(\n)
126             input("按任意键返回主菜单:")
127         elif menu_input == 3:
128             del_backend = input(请输入将删除记录所属的backend:)
129             # 调用显示输入backend记录函数
130             del_record_list = show_ha_record(del_backend)
131             # 判断输入的backend不存在
132             if not del_record_list:
133                 print(您输入的backend不存在!)
134             # 判断输入的backend存在
135             elif del_record_list:
136                 print(当前backend:%s的记录如下 % del_backend)
137                 # 显示backend的ha记录
138                 for n, line in enumerate(del_record_list):
139                     print(%d- %s % (n + 1, line.strip()))
140                 print(\n)
141                 del_num = input(请输入要删除记录的序号:)
142                 # 调用删除记录函数
143                 del_backend_list = ha_del_record(del_backend, del_num)
144             # 执行完删除记录操作后,当前backend的ha记录不为空
145             if del_backend_list:
146                 print(当前backend:%s的记录如下 % del_backend)
147                 for n, line in enumerate(del_backend_list):
148                     print(%d- %s % (n + 1, line.strip()))
149                 print(\n)
150             #执 行完删除记录操作后,当前backend的ha记录为空
151             else:
152                 print(您的backend已经完全清除!)
153             input("按任意键返回主菜单:")
154 
155         elif menu_input == q:
156             exit()
157         else:
158                 print(\033[1;31m输入错误,请重新输入\033[0m)
159 
160 
161 if __name__ == __main__:
162     main()
View Code

 

Day3作业:haproxy文件配置

标签:

原文地址:http://www.cnblogs.com/zhyErick/p/5441166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!