对于主负载均衡服务器,修改配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01 #组成员名称
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100 #优先级
advert_int 1 #定义组播包发送的间隔时间,主备设置必须一致
authentication { #组成员通信密码,明文
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.2/24 #虚拟IP
}
}
备用负载均衡服务器
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.2/24
}
}
这里需要注意,其中邮箱通知删除,是为了以后的监控服务来统一监控。请关注后续博文。
这个时候重新启动keepalived服务
systemctl restart keepalived
如果发现有两个虚拟VIP 这是因为防火墙没有关闭的原因。
iptables -L
systemctl disable firewalld
就可以。
这就是脑裂现象。
还有虚拟的VIP的子网掩码必须加,不然默认为32。会造成不能自动切换。
这里实现使用脚本来监测,从而实现邮件通知。
监控VIP,防止脑裂
首先Linux需要下载:mailx软件
yun install -y mailx
然后配置配置文件:
vim /etc/mail.rc
在最后几行添加
set from=yangyang_linux@163.com smtp=smtp.163.com
set smtp-auth-user=yangyang_linux@163.com set smtp-auth-password=LJXZIHMLYIRYEEZL smtp-auth=login
两行,其中set from使用的是第三方邮箱,自行注册,我这里是163的,还有smtp-auth-password是SMTP的码不是邮箱密码。
一切准备好之后,重新启动服务。
systemctl restart postfix
脚本:
ip a s eth0 Igrep "192.168.1.2" >/dev/nul1
if[ $?-ne 0 ];then
echo "keepalived服 务出现异常,请进行检查" |mail -s 异常告警-keepalived 177156668@qq . com
fi
写入定时任务,每几分钟进行监控。
实现keepaliveed与Nginx一起停止,释放VIP
脚本:
vim check_web.sh
num=ps -ef I grep -c nginx
if[ $num -lt 2 ];then
systemctl stop keepalived
fi
需要注意,check_web.sh这里脚本名称如果带有nginx的话会造成查询问题。
实时监控nginx服务状态—keepalived配置文件
keepalived配置文件
check_ web =/server/scripts/check_web. sh
vrrp_script check_web {
script "/server/scripts/check_web. sh #定义需要监控脚本(脚本有执行权限,而且是绝对路径)
interval 2 #执行脚本的间隔吋同(秒)
weight 2 #权重
}
$check web
track_ script {
check web #调用执行你的脚本信息
}
}
weight参数:权重值参数,主要用于和优先级进行运算
- 重要知识点01:
- 求和运算: weight数值必须是正数 weight + priority自动提升优先级,使主机可以成为主服务器
- 求差运算: weight数值必须是负数 weight - priority 自动降低优先级,使主机可以成为备服务器
- 重要知识点02:
- 运行一个脚本,执行脚本结束之后,脚本的执行结果可以为真看脚本执行返回值$?==0
- 运行一个脚本,执行脚本结束之后,脚本的执行结果可以为假看脚本执行返回值$$<>0
- 重要知识点03:
- 如何将知识01 +知识02结合
权重值为正数:
1.脚本运行后为真 weight + priority
2.脚本运行后为假 priority
权重值为负数:
1.脚本运行后为真. priority
2.脚本运行后为假 weight-priority
双主配置
第一台负载均衡服务器
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.2/24
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 52
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.5/24
}
}
第二台负载均衡服务器
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.2/24
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.5/24
}
}
重启服务
systemctl restart keepalived
高可用服务安全访问配置(负载均衡服务)
修改nginx负载均衡文件
第一台负载均衡服务器
upstream load_banalcing {
server 172.16.69.101:80;
server 172.16.69.102:80;
server 172.16.69.103:80;
}
server {
listen 192.168.1.2:80 default_server;
server_name www.yangyang.com;
location / {
proxy_pass http://load_banalcing;
}
}
server {
listen 192.168.1.5:80 default_server;
server_name blog.yangyang.com;
location / {
proxy_pass http://load_banalcing;
}
}
第二台负载均衡服务器
upstream load_banalcing {
server 172.16.69.101:80;
server 172.16.69.102:80;
server 172.16.69.103:80;
}
server {
listen 192.168.1.2:80 default_server;
server_name www.yangyang.com;
location / {
proxy_pass http://load_banalcing;
}
}
server {
listen 192.168.1.5:80 default_server;
server_name blog.yangyang.com;
location / {
proxy_pass http://load_banalcing;
}
}
再重启的时候会有报错
异常问题报错:
nginx: [emerg] bind() to 192.168.1.2:80 failed (99: Cannot assign requested address)
如何设置监听网卡上没有的地址
解决:需要修改内核信息
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
sysctl -p
这里需要注意,有关IP的设置,reload配置文件是不可以的,必须重新启动。