利用ansible书写playbook搭建HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境续
ansible、playbook、haproxy、keepalived、PXC
haproxy+keepalived双主模式调度pxc集群
HAProxy介绍
反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,
当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入
引入了frontend,backend;frontend根据任意 HTTP请求头内容做规则匹配,然后把请求定向到相关的backend.
Keepalived介绍
Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障。
一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),
一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,
当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
一、环境准备:
proxy | 192.168.1.241(外网IP:139.9.219.*) | 跳板机(堡垒主机)、安装ansible、数据库客户端 |
pxc-0001 | 192.168.1.181 | PXC数据库服务器角色 |
pxc-0002 | 192.168.1.182 |
PXC数据库服务器角色 |
pxc-0003 | 192.168.1.183 | PXC数据库服务器角色 |
ha-0001 | 192.168.1.171 | haproxy+keepalived |
ha-0002 | 192.168.1.172 | haproxy+keepalived |
PXC集群搭建见随笔:https://www.cnblogs.com/jrjs/p/11764073.html
华为云云主机具体购买流程请浏览随笔:https://www.cnblogs.com/jrjs/p/11742221.html
在华为云购买台云主机ha-0001、ha-0002
添加俩个负载均衡器(elb-pxc1、elb-pxc2)
分别添加监听器、后端服务器组
添加监听器,让其监听3306端口。
添加后端服务器组,把ha-0001、ha-0002添加进来。采用加权轮询算法。
添加负载均衡器如下:
单击右上方购买增强型负载均衡
使用Xshell连接跳板机上配置ansible主机分组:
在跳板机上书写haproxy.cfg及keepalived.conf配置文件,通过playbook拷贝到俩台服务器上
haproxy.cfg配置文件如下:
1 [root@proxy ~]# vim /etc/haproxy/haproxy.cfg 2 global 3 log 127.0.0.1 local2 ##[err warning info debug] 4 chroot /usr/local/haproxy 5 pidfile /var/run/haproxy.pid ##haproxy的pid存放路径 6 maxconn 4000 ##最大连接数,默认4000 7 user haproxy 8 group haproxy 9 daemon ##创建1个进程进入deamon模式运行 10 defaults 11 mode tcp ##默认的模式mode { tcp|http|health } 12 option dontlognull ##不记录健康检查的日志信息 13 option httpclose ##每次请求完毕后主动关闭http通道 14 option httplog ##日志类别http日志格式 15 option forwardfor ##后端服务器可以从Http Header中获得客户端ip 16 option redispatch ##serverid服务器挂掉后强制定向到其他健康服务器 17 timeout connect 10000 #如果backend没有指定,默认为10s 18 timeout client 300000 ##客户端连接超时 19 timeout server 300000 ##服务器连接超时 20 maxconn 3000 ##最大连接数 21 retries 3 ##3次连接失败就认为服务不可用,也可以通过后面设置 22 23 listen stats 0.0.0.0:1080 #监听端口 24 stats refresh 30s #统计页面自动刷新时间 25 stats uri /stats #统计页面url 26 stats realm Haproxy Manager #进入管理解面查看状态信息 27 stats auth admin:admin #统计页面用户名和密码设置 28 29 listen pxcsrv-rewrite 0.0.0.0:3306 30 balance roundrobin 31 server pxc-0001 192.168.1.181:3306 check inter 2000 rise 2 fall 5 32 server pxc-0002 192.168.1.182:3306 check inter 2000 rise 2 fall 5 33 server pxc-0003 192.168.1.183:3306 check inter 2000 rise 2 fall 5
keepalived.conf配置文件如下:
1 ! Configuration File for keepalived 2 3 global_defs { 4 notification_email { 5 root@localhost //设置报警收件人邮箱 6 vrrp_iptables 7 } 8 notification_email_from Alexandre.Cassen@firewall.loc //设置发件人 9 smtp_server 192.168.200.1 //定义邮件服务器 10 smtp_connect_timeout 30 11 router_id LVS_DEVEL //设置路由ID号 12 } 13 14 vrrp_instance VI_1 { 15 state MASTER //主服务器为MASTER(ha-0002备服务器需要修改为BACKUP) 16 interface eth0 //定义网络接口 17 virtual_router_id 51 //主备服务器VRID号必须一致 18 priority 100 //服务器优先级,优先级高优先获取VIP 19 advert_int 1 20 authentication { 21 auth_type PASS 22 auth_pass 123456 //主备服务器密码必须一致 23 } 24 virtual_ipaddress { //谁是主服务器谁获得该VIP,当主服务器宕掉VIP自动飘到备服务器上 25 192.168.1.48/24 brd 192.168.1.255 dev eth0 label eth0:1 26 } 27 } 28 vrrp_instance VI_2 { 29 state BACKUP //备服务器为BACKUP(ha-0001主服务器需要修改为MASTER) 30 interface eth0 //定义网络接口 31 virtual_router_id 52 //主备服务器VRID号必须一致 32 priority 99 //服务器优先级,优先级高优先获取VIP 33 advert_int 1 34 authentication { 35 auth_type PASS 36 auth_pass 654321 //主备服务器密码必须一致 37 } 38 virtual_ipaddress { //谁是主服务器谁获得该VIP,当主服务器宕掉VIP自动飘到备服务器上 39 192.168.1.49/24 brd 192.168.1.255 dev eth0 label eth0:2 40 } 41 }
然后在跳板机书写playbook,playbook具体内容如下:
1 --- 2 #安装haproxy,keepalived相关软件包 3 - hosts: ha+kp 4 tasks: 5 - name: installed haproxy,keepalived 6 yum: 7 name: haproxy,keepalived 8 state: installed 9 #在跳板机上编辑haproxy配置文件,拷贝到俩台服务器上 10 - name: copy haproxy 11 copy: 12 src: /root/haproxy.cfg 13 dest: /etc/haproxy/haproxy.cfg 14 #在跳板机上编辑keepalived配置文件,拷贝到俩台服务器上 15 - name: copy keepalived 16 copy: 17 src: /root/keepalived.conf 18 dest: /etc/keepalived/keepalived.conf 19 #修改keepalived.conf配置文件 20 - hosts: ha-0002 21 tasks: 22 - name: modify keepalived.conf 23 replace: 24 path: "/etc/keepalived/keepalived.conf" 25 regexp: "MASTER" 26 replace: "linshi" 27 - replace: 28 path: "/etc/keepalived/keepalived.conf" 29 regexp: "BACKUP" 30 replace: "MASTER" 31 - replace: 32 path: "/etc/keepalived/keepalived.conf" 33 regexp: "linshi" 34 replace: "BACKUP" 35 - replace: 36 path: "/etc/keepalived/keepalived.conf" 37 regexp: "100" 38 replace: "91" 39 - replace: 40 path: "/etc/keepalived/keepalived.conf" 41 regexp: "99" 42 replace: "100" 43 - replace: 44 path: "/etc/keepalived/keepalived.conf" 45 regexp: "91" 46 replace: "99" 47 #启动haproxy、keepalived服务 48 - hosts: ha+kp 49 tasks: 50 - name: start haproxy 51 service: 52 name: haproxy 53 enabled: yes 54 state: started 55 - name: start keepalived 56 service: 57 name: keepalived 58 enabled: yes 59 state: started
运行完成后在ha-0001查看haproxy服务是否启动:
查看ha-0001上的keepalived服务是否启动
运行完成后在ha-0002查看haproxy服务是否启动:
查看ha-0002上的keepalived服务是否启动
在ha-0001、ha-0002上使用ip a s命令,查看设置的vip48、49是否生效:
在跳板机访问ha-0001或者ha-0002的vip是否可以访问到:
到此haproxy+keepalived双主模式配置成功,成功的让俩台服务器同时工作,减轻单台调度器的压力,也实现了资源的合理利用。