Haproxy+Keepalived

原理

  1. 常见的Web集群调度器
    目前常见的Web集群调度器分为软件和硬件
    软件通常使用开源的LVS、Haproxy、Nginx
    硬件一般使用比较多的是F5,梭子鱼、绿盟等
  2. Haproxy应用分析
    LVS在企业应用中抗负载能力很强,但存在不足,LVS不支持正则处理,不能实现动静分离;
    对于大型网站,LVS的实施配置复杂,维护成本相对较高;Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件,适用于负载大的Web站点;
    运行在硬件上可支持数以万计的并发连接的连接请求;
  3. Haproxy支持的调度算法
    Round Robin(RR) 轮询调度
    Least Connections(LC) 最少连接数
    Source Hashing(SH) 基于来源访问调度算法
  4. Keepalived工具介绍(作用)
    专为LVS和HA设计的一款健康检查工具
    支持故障自动切换(Failover)
    支持节点健康状态检查(Health Checking)
    官方网站: http://www.keepalived.orgl
  5. Keepalived实现原理
    Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
    VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
    由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务;
    每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态;
    若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务;
  6. Keepalived安装与启动
    在LVS群集环境中应用时,也需用到ipvsadm管理工具
    YUM安装Keepalived
    启用Keepalived服务
  7. 配置Keepalived master服务器2-1
    Keepalived配置目录位于letc/keepalived/
    keepalived.conf是主配置文件
    global_defs {…}区段指定全局参数;
    vrrp_instance 实例名称{…}区段指定VRRP热备参数;
    注释文字以"!"符号开头;
    ·目录samples,提供了许多配置样例作为参考
  8. 配置Keepalived master服务器2-2
    常用配置选项
    router_id HA_TEST_R1:本路由器(服务器)的名称
    vrrp_instance Vl_1∶定义VRRP热备实例
    state MASTER:热备状态,MASTER表示主服务器
    interface ens33:承载VIP地址的物理接口
    virtual _router_id 1:虚拟路由器的ID号,每个热备组保持一致
    priority 100:优先级,数值越大优先级越高
    advert_int 1:通告间隔秒数(心跳频率)
    auth_type PASS:认证类型
    auth_pass 123456:密码字串
    virtual_ipaddress { vip}:指定漂移地址(VIP),可以有多个
    Keepalived日志文件:/var/log/messages

案例部署

组成部分

  1. 调度器 2台
  2. web服务器 2台
  3. nfs服务器 1台
  4. 客户机

具体部署

  1. 在第一台调度器(主调度器)上的部署
    部署haproxy
1.	Yum安装依赖包
yum -y install gcc gcc-c++ make pcre-devel bzip2-devel
2.	下载并解压haproxy软件包
tar zxvf haproxy-1.4.24.tar.gz
3.	进入haproxy主文件,进行编译,安装
make TARGET=linux26
make install
4.	创建haproxy的主配置文件目录,并将样板文件拷贝进去,对配置文件进行修改
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
vim /etc/haproxy/haproxy.cfg
#chroot /usr/share/haproxy  加#将这一行注释掉
#redispatch  加#将这一行注释掉
maxconn 10240   最大连接数,默认2000
删除listen开始往下的所有内容,并自己增加内容
listen webcluster 0.0.0.0:80
       option httpchk GET /index.html
       balance roundrobin
       server web1 192.168.31.30:80 check inter 2000 fall 3
       server web2 192.168.31.50:80 check inter 2000 fall 3
5.	将haproxy设为开机自启
cp examples/haproxy.init /etc/init.d/haproxy
vim /etc/init.d/haproxy
# chkconfig: 35 85 15  将-改为35

chmod 755 /etc/init.d/haproxy
chkconfig --add haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/
6.	开启haproxy
systemctl start haproxy

部署keepalived

1. Yum安装依赖包
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
2. 下载并解压keepalived工具的软件包
tar zxvf keepalived-2.0.13.tar.gz
3	对keepalived工具进行配置,编译,安装
cd keepalived-2.0.13/
./configure --prefix=/
make && make install
4.	将keepalived工具加入系统管理服务
cp keepalived/etc/init.d/keepalived /etc/init.d
5.	设置开机自启
systemctl enable keepalived
6.	编辑keepalived工具的配置文件
vim /etc/keepalived/keepalived.conf(将里面除第一行以外的内容删除)
! Configuration File for keepalived
global_defs {
  router_id lvs_01
}
vrrp_instance vi_1 {
  state MASTER
  interface ens33
  virtual_router_id 10
  priority 150
  advert_int 1
  authentication {
   auth_type PASS
   auth_pass 123456
}
virtual_ipaddress {
  192.168.31.100
 }
}
  1. 第二台调度器(备用调度器)上的部署
    部署haproxy
1.	Yum安装依赖包
yum -y install gcc gcc-c++ make pcre-devel bzip2-devel
2.	下载并解压haproxy软件包
tar zxvf haproxy-1.4.24.tar.gz
3.	进入haproxy主文件,进行编译,安装
make TARGET=linux26
make install
4.	创建haproxy的主配置文件目录,并将样板文件拷贝进去,对配置文件进行修改
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
vim /etc/haproxy/haproxy.cfg
#chroot /usr/share/haproxy  加#将这一行注释掉
#redispatch  加#将这一行注释掉
maxconn 10240   最大连接数,默认2000
删除listen开始往下的所有内容,并自己增加内容
listen webcluster 0.0.0.0:80
       option httpchk GET /index.html
       balance roundrobin
       server web1 192.168.31.30:80 check inter 2000 fall 3
           server web2 192.168.31.50:80 check inter 2000 fall 3
5.	将haproxy设为开机自启
cp examples/haproxy.init /etc/init.d/haproxy
vim /etc/init.d/haproxy
# chkconfig: 35 85 15  将-改为35
chmod 755 /etc/init.d/haproxy
chkconfig --add haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/
6.	开启haproxy
systemctl start haproxy

部署keeplived

1. Yum安装依赖包
yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
2.	下载并解压keepalived工具的软件包
tar zxvf keepalived-2.0.13.tar.gz
3	对keepalived工具进行配置,编译,安装
cd keepalived-2.0.13/
./configure --prefix=/
make && make install
4.	将keepalived工具加入系统管理服务
cp keepalived/etc/init.d/keepalived /etc/init.d
5	设置开机自启
systemctl enable keepalived
6.	编辑keepalived工具的配置文件
vim /etc/keepalived/keepalived.conf(将里面除第一行以外的内容删除)
! Configuration File for keepalived
global_defs {
  router_id lvs_02
}
vrrp_instance vi_1 {
  state BACKUP
  interface ens33
  virtual_router_id 10
  priority 145
  advert_int 1
  authentication {
   auth_type PASS
   auth_pass 123456
}
virtual_ipaddress {
  192.168.31.100
 }
}
  1. 第一台web服务器部署
1.	Yum安装依赖包
yum -y install gcc gcc-c++ make pcre-devel zlib-devel
2.	创建不带家目录,不可登录用户
useradd -M -s /sbin/nologin nginx
3.	下载并解压nginx软件包
tar zxvf nginx-1.13.7.tar.gz
4.	对nginx的主文件进行配置,编译,安装
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install
5.	将nginx的命令做软连接
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
6.	挂载使用nfs服务器上的共享资源
mount 192.168.31.40:/web1 /usr/local/nginx/html/
7.	启动nginx
nginx

  1. 第二台web服务器上的部署
1.	Yum安装依赖包
yum -y install gcc gcc-c++ make pcre-devel zlib-devel
2.	创建不带家目录,不可登录用户
useradd -M -s /sbin/nologin nginx
3.	下载并解压nginx软件包
tar zxvf nginx-1.13.7.tar.gz
4.	对nginx的主文件进行配置,编译,安装
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install
5.	将nginx的命令做软连接
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
6.	挂载使用nfs服务器上的共享资源
mount 192.168.31.40:/web2 /usr/local/nginx/html/
7.	启动nginx
nginx

nfs服务器上的部署

yum -y install nfs-utils rpcbind  #rpcbind默认已安装
配置共享目录
mkdir /web1
echo "

wawawaw

" > /opt/web1/index.html mkdir /web2 echo "

hahahaha

" > /opt/web2/index.html 资源共享 vim /etc/exports /web1 192.168.31.30/24(ro) /web2 192.168.31.50/24(ro) 将服务重启 systemctl restart nfs systemctl restart rpcbind 查看资源共享情况 showmount –e

访问测试

Haproxy+Keepalived_第1张图片
Haproxy+Keepalived_第2张图片

Haproxy日志管理

  1. 第一台调度器上的部署
在配置文件中做修改
vim /etc/haproxy/haproxy.cfg
log /dev/log    local0 info
log /dev/log    local0 notice

重启haproxy
systemctl restart haproxy.service

vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~

systemctl restart rsyslog.service

systemctl restart haproxy.service

  1. 第二台调度器上的部署
在配置文件中做修改
vim /etc/haproxy/haproxy.cfg
log /dev/log    local0 info
log /dev/log    local0 notice

重启haproxy
systemctl restart haproxy.service

vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~

systemctl restart rsyslog.service

systemctl restart haproxy.service

然后查看一下是否生成了日志文件
Haproxy+Keepalived_第3张图片
Haproxy+Keepalived_第4张图片

验证keepalived功能

将主调度器关闭后,进行访问测试
Haproxy+Keepalived_第5张图片
Haproxy+Keepalived_第6张图片
查看备用调度器的日志信息

tail -100 /var/log/messages

Haproxy+Keepalived_第7张图片
通过上述一系列验证,我们不难发现,主调度器关闭后,依然可以正常访问,因为虚拟地址已经漂移到了备用调度器上

然后我们将主调度器修复后,重新开启,然后查看主调度器的日志信息

tail -100 /var/log/messages

Haproxy+Keepalived_第8张图片
我们发现,主调度器成功i抢占,恢复正常功能。

你可能感兴趣的:(运维,linux,nginx,haproxy,nfs)