Day3作业:haproxy文件配置

实现功能

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

 流程图

 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(‘ha‘, ‘r+‘) 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(‘ha‘, ‘r+‘) 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()

时间: 2024-12-29 05:54:37

Day3作业:haproxy文件配置的相关文章

修改Haproxy文件配置,实现增删改查

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 stats enable stats uri /admi

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+keepalived配置

一.环境 系统:CentOS 6.4x64最小化安装 ha-keep-m:192.168.3.15 ha-keep-s:192.168.3.22 httpd-16:192.168.3.16 httpd-17:192.168.3.17 VIP:192.168.3.28 二.在ha-keep-m和ha-keep-s上安装haproxy [[email protected] ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64

HAPROXY 配置项/配置实例

HAPROXY 配置项/实例 常用配置选项: OPTION 选项: option httpclose :HAProxy会针对客户端的第一条请求的返回添加cookie并返回给客户端,客户端发送后续请求时会发送 此cookie到HAProxy,HAProxy会针对此cookie分发到上次处理此请求的服务器上,如果服务器不能忽略 此cookie值会影响处理结果.如果避免这种情况配置此选项,防止产生多余的cookie信息. option forwardfor :如果服务器上的应用程序想记录发起请求的客户

haproxy代理配置

一.安装 192.168.1.128    代理机 192.168.1.129    后端web 192.168.1.130    后端web # yum install gcc # wget http://pkgs.fedoraproject.org/repo/pkgs/haproxy/haproxy-1.8.3.tar.gz/sha512/6118ccbcfe07d96c2cce1a78c30db9c428f8b64e64fc3f5660392a501ecbaefdc5b10bea2f65c

Linux Haproxy详细配置教程

1 Linux Haproxy 负载均衡 v1.8 ★★★ 类似于ningx的反向代理1.1 Haproxy 概述 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备.虚拟主机.基于TCP和HTTP应用代理等功能.其配置简单,维护方便,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后,Haproxy还会自动将该RS服务器加入进来提供服务

HAProxy基本配置、调度算法与tcp、http、heath模式配置示例

一.HAProxy安装 1.HAProxy简单介绍 HAProxy虽然名字前有HA,但它并不是一款高可用软件,而是一款用于实现负载均衡的软件,可实现四层与七层的负载均衡. 2.yum安装HAProxy HAProxy已经包含在yum的base中,版本为1.15,可以直接yum安装 ~]# yum install -y haproxy HAProxy的配置文件路径为:/etc/haproxy/haproxy.cfg 主程序路径为:/usr/sbin/haproxy 3.HAProxy配置 HAPr

Haproxy安装配置及日志输出问题

简介:软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载.    HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器.内部协议通信服务器等),和7层(HTTP).在4层模式 下,HAproxy仅在客户端和服务器之间转发双向流量.7层模式下,HAProxy会分析协议,并且能通过允许.拒绝.交换.增加.修改或者删除请求 (r

日志文件配置与切割

日志文件配置与切割 自定义日志格式 http { server { listen          80 default; server_name     _*; access_log      logs/default.access.log combined; location / { index index.html; root  /data0/htdocs/htdocs; } } } 其中的  access_log,就是用来配置日志路径的, log_format 指令用于设置日志格式 如果