2018.4.9 15周4次课

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018.4.9 15周4次课相关的知识,希望对你有一定的参考价值。

十五周四次课(4月9日)

18.1 集群介绍

18.2 keepalived介绍

18.3/18.4/18.5 用keepalived配置高可用集群

18.1 集群介绍

  • 根据功能划分为两大类:高可用和负载均衡

  • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务

  • 实现高可用的开源软件有:heartbeat、keepalived

  • 负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2

  • 实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx,商业的有F5、Netscaler

18.2 keepalived介绍

  • 在这里我们使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果

  • keepalived通过VRRP(Virtual Router Redundancy Protocl)来实现高可用。

  • 在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。

  • master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。

  • Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。

18.3/18.4/18.5 用keepalived配置高可用集群

准备两台机器100和101,101作为master,100作为backup,102作用VIP

VIP是一个新的概念,它的英文名字是“Virtual IP”,即“虚拟IP”,这个IP是由keepalived给服务器配置上的,服务器靠这个VIP对外提供服务,当master机器宕机,VIP被分配到backup上

两台机器都执行yum install -y keepalived

两台机器都安装nginx,其中101上已经编译安装过nginx,100上需要yum安装nginx: yum install -y nginx

查看keepalived的配置文件:cat /etc/keepalived/keepalived.conf

清空配置文件:> /etc/keepalived/keepalived.conf

  • 编辑101上keepalived配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf获取

vim /etc/keepalived/keepalived.conf

global_defs {

  notification_email {

    [email protected] //定义接受告警的

  }

  notification_email_from [email protected] //定义发邮件地址(实际上没用)

  smtp_server 127.0.0.1 //定义发邮件地址,若为127.0.0.1则使用本机自带邮件服务器发送

  smtp_connect_timeout 30

  router_id LVS_DEVEL

}

vrrp_script chk_nginx { //chk_nginx为自定义名字,后面还会用到它

   script "/usr/local/sbin/check_ng.sh" //自定义脚本,该脚本为监控nginx服务的脚本

   interval 3 //每隔3s执行一次该脚本

}

vrrp_instance VI_1 {

   state MASTER //角色为master

   interface ens33 //针对哪个网卡监听vip

   virtual_router_id 51 //虚拟路由的id,和从上保持一致,说明它们是一组

   priority 100 //权重为100,master要比backup大

   advert_int 1

   authentication {

       auth_type PASS //认证形式是密码

       auth_pass aminglinux>com //定义密码,这个密码自定义

   }

   virtual_ipaddress {

       192.168.37.102 //定义VIP

   }

   track_script {

       chk_nginx //定义监控脚本,这里要和上面vrrp_script后面的字符串保持一致

   }

}

101编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh获取

文件路径就是上面配置文件里定义好的vim /usr/local/sbin/check_ng.sh

#!/bin/bash

#时间变量,用于记录日志

d=`date --date today +%Y%m%d_%H:%M:%S`

#计算nginx进程数量

n=`ps -C nginx --no-heading|wc -l`

#如果进程为0,则启动nginx,并且再次检测nginx进程数量,

#如果还为0,说明nginx无法启动,此时需要关闭keepalived

if [ $n -eq "0" ]; then

       /etc/init.d/nginx start

       n2=`ps -C nginx --no-heading|wc -l`

       if [ $n2 -eq "0"  ]; then

               echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log

               systemctl stop keepalived

       fi

fi

给脚本755权限:chmod 755 /usr/local/sbin/check_ng.sh

技术分享图片

启动服务:systemctl start keepalived

技术分享图片

查看nginx是否会自动加载:

service nginx stop

技术分享图片

ps aux|grep nginx

技术分享图片

没有自动加载,查看日志:cat /var/log/messages

找到关键的错误信息:SECURITY VIOLATION - scripts are being executed but script_security not enabled.

技术分享图片

关闭防火墙

技术分享图片

技术分享图片

再次查看nginx

技术分享图片

VIP地址是否加载:ip add

技术分享图片

分别关闭2台主机的防火墙

iptables -F

systemctl stop firewalld

setenforce 0

主页显示:

ls /usr/local/nginx/conf/vhost/

技术分享图片

cat /usr/local/nginx/conf/vhost/aaa.com.conf

技术分享图片

cat /data/wwwroot/default/index.html

技术分享图片

技术分享图片

  • 100上编辑配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf获取

查看keepalived的配置文件:cat /etc/keepalived/keepalived.conf

清空配置文件:> /etc/keepalived/keepalived.conf

vim /etc/keepalived/keepalived.conf

global_defs {

  notification_email {

    [email protected]

  }

  notification_email_from [email protected]

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id LVS_DEVEL

}

vrrp_script chk_nginx {

   script "/usr/local/sbin/check_ng.sh"

   interval 3

}

vrrp_instance VI_1 {

   state BACKUP

   interface ens33

   virtual_router_id 51

   priority 90

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass aminglinux>com

   }

   virtual_ipaddress {

       192.168.37.102

   }

   track_script {

       chk_nginx

   }

}

100上编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh获取

文件路径就是上面配置文件里定义好的vim /usr/local/sbin/check_ng.sh

#时间变量,用于记录日志

d=`date --date today +%Y%m%d_%H:%M:%S`

#计算nginx进程数量

n=`ps -C nginx --no-heading|wc -l`

#如果进程为0,则启动nginx,并且再次检测nginx进程数量,

#如果还为0,说明nginx无法启动,此时需要关闭keepalived

if [ $n -eq "0" ]; then

       systemctl start nginx //和主不一样,因为从是yum安装的,主是编译安装的

       n2=`ps -C nginx --no-heading|wc -l`

       if [ $n2 -eq "0"  ]; then

               echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log

               systemctl stop keepalived

       fi

fi

给脚本755权限:chmod 755 /usr/local/sbin/check_ng.sh

启动服务 systemctl start keepalived

技术分享图片

主页显示:

因为是yum安装的,所以默认页的位置在:/usr/share/nginx/html/index.html

cat /usr/share/nginx/html/index.html

技术分享图片

现在访问192.168.37.102 //主机在master上

技术分享图片

  • 测试高可用

关闭master上的keepalived服务

systemctl stop keepalived

ip add // vip释放了

技术分享图片

Backup上

ip add //绑定了vip

技术分享图片

技术分享图片

查看backup主机日志:tail /var/log/messages

Netlink reflector reports IP 192.168.37.102 added //192.168.37.102这个IP被增加了

在master上用curl查看

curl -I 192.168.37.102 //nginx在backup上

技术分享图片

启动master上的keepalived服务

systemctl start keepalived

技术分享图片

curl -I 192.168.37.102 //nginx在master上

技术分享图片

查看backup主机日志:tail /var/log/messages

Netlink reflector reports IP 192.168.37.102 removed //192.168.37.102这个IP被移除了


以上是关于2018.4.9 15周4次课的主要内容,如果未能解决你的问题,请参考以下文章

2018.4.10 15周5次课

2018.4.2 15周1次课

218.4.3-4.4 15周2,3次课

2018-4-10 15周5次课 lvs负载均衡

2018-4-2 15周1次课 MySQL主从配置

2018.3.1 10周2次课