实验环境
准备四台主机
master: 172.25.11.9 server9 rhel6.5 haproxy+keepalived
minion: 172.25.11.10 server10 rhel6.5 httpd
minion: 172.25.11.8 server8 rhel6.5 nginx
minion: 172.25.11.100 server0 rhel6.5 haproxy+keepalived
首先设置saltstack自动化部署haproxy实现nginx的负载均衡
saltstack自动化部署haproxy实现nginx的负载均衡
在server0上配置yum源,下载salt-minion,更改/etc/salt/minion配置文件,将文件中的master指向master端(172.25.11.9),启动salt-minion服务,详情请点击上面链接。
部署keepalived的高可用
安装keepalived
cd /srv/salt
mkdir keepalived
cd keepalived/
mkdir files
include:
- pkgs.make
kp-install:
file.managed:
- name: /mnt/keepalived-2.0.6.tar.gz
- source: salt://keepalived/files/keepalived-2.0.6.tar.gz
cmd.run:
- name: cd /mnt && tar zxf keepalived-2.0.6.tar.gz && cd keepalived-2.0.6 && ./configure --prefix=/usr/local/keepalived --with-init=SYSV &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/keepalived
salt server0 state.sls keepalived.install
scp /usr/local/keepalived/etc/rc.d/init.d/keepalived 172.25.11.9:/srv/salt/keepalived/files
scp /usr/local/keepalived/etc/keepalived/keepalived.conf 172.25.11.9:/srv/salt/keepalived/files
安装成功
安装并启动keepalived,对文件做软链接
include:
- pkgs.make
kp-install:
file.managed:
- name: /mnt/keepalived-2.0.6.tar.gz
- source: salt://keepalived/files/keepalived-2.0.6.tar.gz
cmd.run:
- name: cd /mnt && tar zxf keepalived-2.0.6.tar.gz && cd keepalived-2.0.6 && ./configure --prefix=/usr/local/keepalived --with-init=SYSV &> /dev/null && make &> /dev/null && make install &> /dev/null
- creates: /usr/local/keepalived
/etc/keepalived:
file.directory:
- mode: 755
/etc/sysconfig/keepalived:
file.symlink:
- target: /usr/local/keepalived/etc/sysconfig/keepalived
/sbin/keepalived:
file.symlink:
- target: /usr/local/keepalived/sbin/keepalived
vim top.sls
base:
'server9':
- haproxy.install
- keepalived.service
'server0':
- haproxy.install
- keepalived.service
'roles:apache':
- match: grain
- httpd.install
'roles:nginx':
- match: grain
- nginx.service
添加模块,实现取值,对配置文件更改
cd /srv/salt/keepalived/
vim service.sls
include:
- keepalived.install
/etc/keepalived/keepalived.conf:
file.managed:
- source: salt://keepalived/files/keepalived.conf
- template: jinja
- context:
STATE: {{ pillar['state'] }}
VRID: {{ pillar['vrid'] }}
PRIORITY: {{ pillar['priority'] }}
kp-service:
file.managed:
- name: /etc/init.d/keepalived
- source: salt://keepalived/files/keepalived
- mode: 755
service.running:
- name: keepalived
- reload: True
- watch:
- file: /etc/keepalived/keepalived.conf
vim /srv/pillar/top.sls
base:
'*':
- web.install
- keepalived.install
设置优先级,实现高可用
mkdir /srv/pillar/keepalived/
vim /srv/pillar/keepalived/install.sls
{% if grains['fqdn'] == 'server9' %}
state: MASTER
vrid: 11
priority: 100
{% elif grains['fqdn'] == 'server0' %}
state: BACKUP
vrid: 11
priority: 50
{% endif %}
更改配置keepalived文件
vim files/keepalived.conf
! Configuration File for keepalived
# 脚本利用keepalived实现haproxy的高可用
vrrp_script check_haproxy {
script "/opt/check_happroxy.sh"
interval 2
weight 2
}
global_defs {
notification_email {
root@127.0.0.1
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state {{STATE}}
interface eth0
virtual_router_id {{VRID}}
priority {{PRIORITY}}
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.11.111/24
}
track_scritp {
check_haproxy
}
}
编写脚本实现haproxy的高可用,当haproxy关闭后,尝试开启,若开不起来,则关闭本机
的keepalived,vip转移到另一个keepalived上,从而实现高可用
vim /opt/check_happroxy.sh
#!/bin/bash
/etc/init.d/haproxy status &> /dev/null || /etc/init.d/haproxy restart &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/keepalived stop &> /dev/null
salt server0 state.sls keepalived.service
推送成功
验证keepalived高可用(vip)
在server9上关闭keepalived后ip转移
重新开启server9上的keepalived后(vip)重新回到server9上,因为server9的优先级高于server0
浏览器检测负载均衡:输入172.25.11.111