单主模型
环境四个虚拟机
upstream server:node1:172.16.100.6 CeotOS 6
upstream server:node3:172.16.100.69 CeotOS 7
节点1:172.16.100.67 CeotOS 7
节点2:node2:172.16.100.68 CeotOS 7
节1&2
# yum install nginx -y
# cd /etc/nginx
# vim nginx.conf
include /etc/nginx/conf.d/*.conf;
upstream webservers {
server 172.16.100.6:80 weight=1;
server 172.16.100.69:80 weight=1;
}
location / {
proxy_pass http://websrvers/;
}
# nginx -t
# systemctl start nginx.service
# netstat -tnlp
用浏览器访问172.16.100.67
# scp nginx.conf node2:/etc/nginx/
节2
# systemctl start nginx.service
# netstat -tnlp
用浏览器访问172.16.100.68看能否负载均衡
- 用keepalived监控nginx服务
节1&节2
# vim keepalived.conf
vrrp_script chk_nginx {
script "killall -0 nginx &> /dev/null"
interval 1
weight -10
}
vrrp_instance VI_1 {
track_script {
chk_nginx
}
}
节1
# systemctl status nginx.service
# systemctl start keepalived.service ssh node2:systemctl start keepalived.service
# systemctl status keepalived.service
# ip addr list
如果没启动起来,可能是组播地址和虚拟地址的问题,修改一下即可
宕掉nginx,肯是否会转到节点2上
# systemctl stop nginx.service
# systemctl status nginx
节2
# ip addr list
节1
# systemctl start nginx.service
浏览器访问172.16.100.88
节1(主节点)只要在线,节2(备节点)就抢不走,除非节1宕掉
# vim notify
#!/bin/bash
#
vip=172.16.100.88
contact='root@localhost'
notify() {
mailsubject="`hostname` to be $1: $vip floating"
mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"
echo $mailbody | mail -s "$mailsubject" $contact
}
case "$1" in
master)
notify master
systemctl restart nginx.service
exit 0
;;
backup)
notify backup
systemctl restart nginx.service
exit 0
;;
fault)
notify fault
exit 0
;;
*)
echo 'Usage: `basename $0` {master|backup|fault}'
exit 1
;;
esac
# scp notify.sh node2:/etc/keepalived/
# systemctl status keepalived
# ip addr list
主停掉,备也停掉,会自动启动nginx
# systemctl stop httpd.server
节2
# systemctl stop nginx.service
# systemctl status keepalived
节1
# systemctl status nginx.service
# systemctl status keepalived
双主模型
节1
# vim keepalived.conf
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 61
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.100.180/16 dev ens33 label ens33:2
}
track_script {
chk_nginx
}
notify_master “/etc/keepalived/notify.sh master” (不手动启动nginx,而让监控系统确保nginx在线)
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”
}
节1&节2
(不手动启动nginx,而让监控系统确保nginx在线)
# vim notify.sh
注释掉systemctl restart nginx.service
节2
# vim keepalived.conf
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 61
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.100.180/16 dev ens33 label ens33:2
}
track_script {
chk_nginx
}
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault”
}
节1
# sytemctl restart keepalived.service; ssh node2'sytemctl restart keepalived.service'
# systemctl status keepalived
# ifconfig ens33:1 down
# sytemctl restart keepalived.service; ssh node2'sytemctl restart keepalived.service'
# systemctl status keepalived
节2
# systemctl status keepalived.service
# ip addr list
用浏览器访问两个地址,看调度是否有问题
节1
# sytemctl restart keepalived.service; sytemctl start httpd.service
# systemctl status keepalived
节2
# ifconfig
节1
# sytemctl stop httpd.service; sytemctl restart nginx.service'
# systemctl status nginx.service
# systemctl status keepalived# ifconfig
原创文章,作者:nene,如若转载,请注明出处:http://www.178linux.com/88155

