#提前配置好免密钥登陆,与apache服务
import pexpect
import os
ds_ip= '192.168.102.143'rs1_ip= '192.168.102.144'rs2_ip= '192.168.102.145'vip= '192.168.102.250'ds_cmd= ['ipvsadm -C','ipvsadm -A -t {vip}:80 -s rr'.format(vip=vip),'ipvsadm -a -t {vip}:80 -r {rs1_ip}:80 -g'.format(vip=vip, rs1_ip=rs1_ip),'ipvsadm -a -t {vip}:80 -r {rs2_ip}:80 -g'.format(vip=vip,rs2_ip=rs2_ip),'ifconfig ens33:0 {vip} broadcast {vip} netmask 255.255.255.255 up'.format(vip=vip),'route add -host {vip} dev ens33:0'.format(vip=vip)
]
#for ds_cmd inds_cmd:
rs1_cmd=['ansible rs1 -m shell -a "ifconfig lo:0 {vip} broadcast {vip} netmask 255.255.255.255 up" &>/dev/null'.format(vip=vip),'ansible rs1 -m shell -a "route add -host {vip} dev lo:0" &>/dev/null'.format(vip=vip),'ansible rs1 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore" &>/dev/null','ansible rs1 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce" &>/dev/null','ansible rs1 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore" &>/dev/null','ansible rs1 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce" &>/dev/null','service httpd restart']
#for rs_cmd inrs_cmd:
rs2_cmd=['ansible rs2 -m shell -a "ifconfig lo:0 {vip} broadcast {vip} netmask 255.255.255.255 up" &>/dev/null'.format(vip=vip),'ansible rs2 -m shell -a "route add -host {vip} dev lo:0" &>/dev/null'.format(vip=vip),'ansible rs2 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore" &>/dev/null','ansible rs2 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce" &>/dev/null','ansible rs2 -m shell -a "echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore" &>/dev/null','ansible rs2 -m shell -a "echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce" &>/dev/null','service httpd restart']
ansible='''echo "[rs1]" >> /etc/ansible/hosts;
echo"{rs1_ip}" >> /etc/ansible/hosts;
echo"[rs2]" >> /etc/ansible/hosts;
echo"{rs2_ip}" >> /etc/ansible/hosts;'''.format(rs1_ip=rs1_ip,rs2_ip=rs2_ip)
def Ansible():
res= os.system('yum install ansible -y &>/dev/null')if res== 0:
print('ansible安装完成!')
os.system(ansible)def lvs():
i= os.system('yum -y install ipvsadm &>/dev/null')if i == 0:
print('lvs下载完成')for a inds_cmd:
res=os.system(a)if res == 0:
print('ok')else:
print('false')for b inrs1_cmd:
res1=os.system(b)if res1 == 0:
print('ok')else:
print('false')for c inrs2_cmd:
res2=os.system(c)if res2 == 0:
print('ok')else:
print('false')else:
print('lvs下载失败')
keepalived= '''#全局配置! Configuration File forkeepalived
#全局配置
global_defs {
notification_email {
#收件人地址
}
#邮件服务器
}
VRRP配置DS1
vrrp_instance VI_1 {
state MASTER #角色类型MASTER|BACKUPinterfaceens33 #网卡名称
virtual_router_id51#虚拟路由id(需要与BACKUP一致)
priority100#优先级
advert_int1#没1秒检查一次
#nopreempt #非抢占模式
authentication {
auth_type PASS #认证类型 主备之间必须一样
auth_pass1111#认证密码 主备之间必须一样
}
virtual_ipaddress {192.168.102.250#虚拟ip(vip)
}
}
#LVS配置
virtual_server192.168.102.250 80{
delay_loop3#健康检查时间间隔
lb_algo rr #负载均衡调度算法
lb_kind DR #负载均衡转发规则
protocol TCP #协议
real_server192.168.102.144 80{ #要监控的real_server的ip和端口号
weight1#权重
TCP_CHECK { #基于tcp协议的检查
connect_timeout3#连接时间超时
retry3#重连次数
delay_before_retry3#重连间隔时间
}
}
real_server192.168.102.145 80{
weight1TCP_CHECK {
connect_timeout3retry3delay_before_retry3}
}
}'''def Keepalived():
d= os.system('yum install keepalived -y &> /dev/null')if d == 0:
print('keeplived下载完成')
with open(r'/etc/keepalived/keepalived.conf', 'w', encoding='utf-8') asf:
f.write(keepalived)
e= os.system('systemctl start keepalived')if e == 0:
print('keepalived部署完成!')else:
print('keepalived部署失败')else:
print('keepalived下载失败')
def main():
# key()
Ansible()
# ssh_copy()
lvs()
Keepalived()if __name__ == '__main__':
main()