一、安装haproxy作为端口转发服务器(主服务器:172.28.5.4,备服务器:172.28.5.8,浮点IP为:172.28.5.6)

1、安装依赖包

yum -y install wget  gcc gcc-c++

1、下载

cd /usr/local/src

wget https://github.com/haproxy/haproxy/archive/v1.5-dev20.tar.gz

2、解压

tar - zvxf v1.-dev20.tar.gz

cd haproxy-1.5-dev20

3、编译

查看内核版本
[root@localhost haproxy-1.5-dev20]# uname -a
Linux localhost.localdomain 3.10.-.el7.x86_64 # SMP Fri Apr :: UTC x86_64 x86_64 x86_64 GNU/Linux
make TARGET=linux310 ARCH=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

4、配置文件

mkdir /etc/haproxy
touch /etc/haproxy/haproxy.conf
vim /etc/haproxy/haproxy.conf

global
log 127.0.0.1 local2 ###[err warning info debug]
chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid ###haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
maxconn 65535 ###最大连接数,默认4000
daemon

defaults
mode tcp
log global
timeout connect 20s
timeout server 60s
timeout client 60s
retries 3

listen stats
mode http
bind 0.0.0.0:8888 #监听端口
stats refresh 10s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm Haproxy Manager #统计页面密码框上提示文本
stats auth admin:hl95smsjh #统计页面用户名和密码设置
stats hide-version #隐藏统计页面上HAProxy的版本信息

listen cmppv2
bind :7890 #监听端口
server s1 xxx.xxx.xxx.xxx:7890 #转发IP+端口

listen cmppv22
bind :7891 #监听端口
server s2 xxx.xxx.xxx.xxx:7891 #转发IP+端口

5、启动haproxy

ln -s /usr/local/haproxy/sbin/haproxy /usr/local/bin/
haproxy -f /etc/haproxy/haproxy.conf

6、查看启动结果

ps -ef|grep ha

启动成功

7、添加统计端口8888和我们测试用端口7890和7891到防火墙

firewall-cmd --zone=public --add-port=/tcp --permanent
firewall-cmd --zone=public --add-port=/tcp --permanent
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload

浏览器打开ip:8888/stats

目前两个端口的当前连接数都是0,找一台机器telnet测试

[root@zabbix_server src]# telnet 172.28.18.104
Trying 172.28.18.104...
Connected to 172.28.18.104.
Escape character is '^]'.

此时,7890端口对应的当前连接数为1

telnet 7891

[root@zabbix_server src]# telnet 172.28.18.104
Trying 172.28.18.104...
Connected to 172.28.18.104.
Escape character is '^]'.

此时7891对应的连接为1。

同样的在172.28.5.8的备份服务器上也安装haproxy。

至此haproxy转发服务器配置完毕

二、安装keepalived做haproxy主备服务器高可用

在两台服务器上分别安装keepalived

1、安装依赖包

yum -y install wget  pcre*  openssl-devel  zlib

2、下载

cd /usr/local/src
wget http://www.keepalived.org/software/keepalived-1.3.4.tar.gz

3、解压

tar -zxvf keepalived-1.3..tar.gz
cd keepalived-1.3.

4、编译

./configure --prefix=/usr/local/keepalived-1.3.
make && make install

5、配置文件

mkdir /etc/keepalived
touch /etc/keepalived/keepalived.conf
vim keepalived.conf

global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}


vrrp_script chk_haproxy { #调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整
script "/usr/local/keepalived-1.3.4/check_haproxy.sh"

timeout 10  #脚本执行超时设置为10秒,默认为2秒,采用默认值可能导致脚本还没有执行完就已经超时了,所以设置超时时间为10秒

interval 2 #每2秒检查执行一次
weight 2
fall 2 #如果连续两次检测为错误状态则认为服务部可用
rise 1 #检测一次成功就认为服务正常
}


vrrp_instance VI_1 { #配置虚拟路由实例
state MASTER #定义该节点为MASTER节点
interface em1 #定义VIP绑定的物理网卡
virtual_router_id 51 #设置虚路由拟路由id,同一集群的节点群必须相同
priority 150 #设定优先级
advert_int 1 #设定master与backup之间vrrp通告的时间间隔,单位是秒
#nopreempt #设定keepalived的切换模式,默认是抢占failover,这里是非抢占,没有启用
authentication { #定义验证方式与密码
auth_type PASS
auth_pass xxxxxx
}
#unicast_src_ip 172.28.18.104 #自己ip
#unicast_peer { ##单播模式
# 172.28.18.69 ##另一个ip
#}
virtual_ipaddress {
172.28.18.8
}
track_script { #用于追踪脚本执行状态,定义在vrrp_instance段中
chk_haproxy
}
}

 

将路径为/usr/local/src/keepalived-1.3.4/keepalived/etc/init.d的文件keepalived拷贝到/etc/init.d下

cp /usr/local/src/keepalived-1.3./keepalived/etc/init.d/keepalived /etc/init.d/

将路径为/usr/local/keepalived-1.3.4/etc/sysconfig/keepalived的文件拷贝到 /etc/sysconfig/keepalived

cp /usr/local/keepalived-1.3.4/etc/sysconfig/keepalived  /etc/sysconfig/
/usr/local/keepalived-1.3.4/check_haproxy.sh用于检测haproxy进程是否存在,不存在的话,尝试启动haproxy,如果启动没有成功,则关闭自己服务器的keepalived服务文件内容如下
#!/bin/bash
COUNT=$(ps -C haproxy --no-header |wc -l)
echo $COUNT if [ $COUNT -eq ]
then
haproxy -f /etc/haproxy/haproxy.conf 2>/dev/null
#echo "重启haproxy"
sleep
COUNT=$(ps -C haproxy --no-header |wc -l)
if [ $COUNT -eq ]
then
#echo "停止keepalived"
killall keepalived 2>/dev/null
fi fi

6、添加执行权限

chmod +x /etc/init.d/keepalived
chmod +x /usr/local/keepalived-1.3./check_haproxy.sh

7、添加keepalived到系统服务

chkconfig --add keepalived

8、启动

chkconfig --add keepalived

9、查看

service keepalived  status

启动成功

10、查看网卡的浮点IP设置

ip a

设置成功

同样在备份服务器172.28.5.8上也安装keppalived服务,唯一不同的是keepalived配置文件

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.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_script chk_haproxy { #调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整
script "/usr/local/keepalived-1.3.4/check_haproxy.sh"
timeout 10 #脚本执行超时设置为10秒,默认为2秒,采用默认值可能导致脚本还没有执行完就已经超时了,所以设置超时时间为10秒
interval 2 #每2秒检查执行一次
weight 2
fall 2 #如果连续两次检测为错误状态则认为服务部可用
rise 1 #检测一次成功就认为服务正常
} vrrp_instance VI_1 { #配置虚拟路由实例
state BACKUP #定义该节点为BACKUP节点
interface em1 #定义VIP绑定的物理网卡
virtual_router_id 51 #设置虚路由拟路由id,同一集群的节点群必须相同
priority 95 #设定优先级
advert_int 1 #设定master与backup之间vrrp通告的时间间隔,单位是秒
#nopreempt #设定keepalived的切换模式,默认是抢占failover,这里是非抢占,没有启用
authentication { #定义验证方式与密码
auth_type PASS
auth_type PASS
auth_pass hl951234
}
virtual_ipaddress {
172.28.5.6
}
track_script { #用于追踪脚本执行状态,定义在vrrp_instance段中
chk_haproxy
}
}
state BACKUP     #定义该节点为BACKUP节点
priority 95      #设定优先级,备份服务器优先级低一些。主服务器设置的是100
启动备份服务器keepalived服务

启动成功,但是从节点会抢占VIP,说明keepalived节点之间通信失败,此时注意两个问题

1、防火墙是否允许通行vrrp协议,具体操作

iptables:

 vim /etc/sysconfig/iptables
添加
-A INPUT -d 224.0.0.18 -j ACCEPT
service iptables restart

firewalld:

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT  --in-interface em1 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

2、第一种方法添加了还是不行,则可能是上联交换机禁用了组播方式,可以修改keepalivd配置文件,在virtual_ipaddress上添加如下内容改为单播方式

unicast_src_ip 172.28.5.4 #自己ip
unicast_peer { ##单播模式
172.28.5.8 ##另一个ip
}

重启keppalived主从节点服务,此时从节点不会再抢占vip了。

三、测试高可用

1、关闭主服务器172.28.5.4的keepalived服务

service keepalived stop

2、查看IP

ip a

此时浮点IP已经解绑

再关闭172.28.5.4haproxy服务

kill - 

此时telnet 172.28.5.4 7890,已经不能连接

但是 telnet 172.28.5.6 7890 ,依然可以连接,说明172.28.5.6IP已经漂移到172.28.5.8的备份服务器上

3、恢复主服务器haproxy以及keepalived服务

service keepliaved start

keepliaved会自动监测haproxy服务,并重启

查看ip

ip a

此时VIP已经成功漂移回主节点服务器,测试 telnet 172.28.5.6 7890成功连接。

在从节点服务器运行

ip a

此时VIP已经解绑。

 

linux下安装haproxy作为端口转发服务器,以及安装keepalived作为haproxy高可用方案的更多相关文章

  1. linux下最简单的端口转发工具

    linux下简单好用的工具rinetd,实现端口映射/转发/重定向 官网地址http://www.boutell.com/rinetd 软件下载wget http://www.boutell.com/ ...

  2. Centos 7.0 下安装 Zabbix server 3.0服务器的安装及 监控主机的加入(1)

    一.本系列分为6部分 1.Centos 7.0 下安装 Zabbix server 3.0服务器的安装及 监控主机的加入 2.Centos 6.5 下安装 Zabbix server 3.0服务器的安 ...

  3. linux下的php网站放到Windows服务器IIS下导入 .htaccess文件伪静态规则转换 (wordpress)

    需要特别注意的是: 1. .htacdess文件在 wordpress中 是可以生成的 安装 WP Super Cache后,开启该插件>>设置>>高级>>找到并点 ...

  4. Linux下Socket编程的端口问题( Bind error: Address already in use )

    Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...

  5. Linux下的暴力密码在线破解工具Hydra安装及其组件安装-使用

    Linux下的暴力密码在线破解工具Hydra安装及其组件安装-使用 hydra可以破解: http://www.thc.org/thc-hydra,可支持AFP, Cisco AAA, Cisco a ...

  6. [转载]Linux上使用ssl进行端口转发

    原文地址:Linux上使用ssl进行端口转发 作者:呼延十 背景介绍 作为一个后端程序员,经常要和别人联调接口,每当这时,总是被公司的各种,dev,qa,pre,prod环境搞得头疼,,,我真的只是想 ...

  7. linux下查看进程占用端口和端口占用进程命令

    Linux下查看进程占用端口: 查看程序对应进程号:ps –ef|grep 进程名 REDHAT :查看进程号所占用的端口号:netstat –nltp|grep 进程号 ubuntu:查看进程占用端 ...

  8. 在windows和linux下如何查看80端口占用情况?是被哪个进程占用?如何终止等

    一.在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入&quo ...

  9. linux下的php网站放到Windows服务器IIS下.htaccess文件伪静态规则转换

    此办法只适合于linux下的php网站放到Windows服务器IIS下 ,  网站除了主页面正常以外  子页面全部出现404错误    这里子页面出现404 错误是说明伪静态没有开启 什么是.htac ...

随机推荐

  1. BBS项目详解(forms快速创建登陆页面,登陆验证、通过阅读器进行头像上传的预览、内存管理器)

    BBS项目涉及的知识点 django中知识点 钩子函数(局部钩子和全局钩子) 1.局部钩子就是用来做合法性校验,比如用户名有没有被使用等 2.全局的就是用来做对比校验,比如两次输入的密码是否一致 3. ...

  2. [c#]_ELVE_Message多功能用法

     1.   当要显示如图3个按钮时,并要获得单击不同按钮的进行不同的相应时,可以在MessageBoxButtons后面添加一个.(应该英文的点,此处为了醒目,用中文代替)可以看到提示框下方需要几个按 ...

  3. Redis中存入存储的编码方式不一致解决问题

    在利用redis缓存的时候,存入的数据与取出的数据编码方式不一致解决办法. from redis import StrictRedis #ecoding = 'utf-8',默认解码方式为bytes, ...

  4. jQuery基础(二)DOM

    DOM节点的创建 jQuery节点创建与属性的处理 创建元素节点: $("<div></div>") 创建为文本节点: $("<div> ...

  5. zabbix安装、部署、lnmp(一)

    最近入手zabbix,准备好好的研究,好好的弄.   环境准备: mysql:5.6.29 PHP:5.6.12 Nginx:1.8.0 zabbix:3.2.6 操作系统:Centos6 用户:普通 ...

  6. java volatile

    volatile可以保证变量的可见性 当一个变量定义为volatile后,此变量对所有的线程具有可见性.这里的可见性是指当一个线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的. 每次使用v ...

  7. caffe-windows环境配置(github上官方BVLC/caffe的推荐配置方法详解)

    [转载来的文章:如有侵权,请联系我!我将马上删除!] 首先声明一下,如标题,本教程是caffe在windows系统上的配置方法,而且是github上官方BVLC/caffe目前推荐的配置方法,并不是使 ...

  8. c++11模拟boost元占位符placeholder

    准备实现meta programming的fold函数,发现自己缺少占位符实现,这样传入fold的transform op类(元函数)都不得不另外写个外覆类,其实我觉得没啥不好,简单直接,说实话干扰什 ...

  9. websocket简单理解

    实现及原理 Websocket是一种在单个TCP连接上进行全双工通讯的协议. WebSocket 首先发起一个 HTTP 请求,在请求头加上 `Upgrade` 字段,该字段用于改变 HTTP 协议版 ...

  10. Vue 重点 必须要记住的

    基础知识: vue的生命周期: beforeCreate/created. beforeMount/mounted. beforeUpdate/updated. beforeDestory/desto ...