环境说明:

一、环境准备

以下配置基本上是每一次都要提前准备的,所以准备的命令我就不详细列出了,前面有一个一键优化的脚本,可以使用脚本进行自动化的处理,避免多次重复操作的困扰。

#检查防火墙
[root@mylinux1~]#iptables-L-n
ChainINPUT(policyACCEPT)
targetprotoptsourcedestination
ChainFORWARD(policyACCEPT)
targetprotoptsourcedestination
ChainOUTPUT(policyACCEPT)
targetprotoptsourcedestination
#检查SELinux
[root@mylinux1~]#getenforce
Disabled
#检查时间同步
[root@mylinux1~]#crontab-l
0****/usr/sbin/ntpdate210.72.145.4464.147.116.229time.nist.gov
#设置yum源
mkdir-p/etc/yum.repos.d/bak
mv/etc/yum.repos.d/*.*/etc/yum.repos.d/bak/
wget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-6.repo
yumcleanall
yummakecache
#设置主机名
sed-i'/^HOSTNAME/s/^/#/'/etc/sysconfig/network
sed-i'/#HOSTNAME/aHOSTNAME=[主机名]'/etc/sysconfig/network
hostname[主机名]

二、安装Haproxy

[root@mylinux1~]#mkdir-p/opt/tools
[root@mylinux1~]#cd/opt/tools/
[root@mylinux1tools]#ll
total2608
-rw-r--r--1rootroot1360582Sep3011:02haproxy-1.5.18.tar.gz
[root@mylinux1tools]#tar-zxfhaproxy-1.5.18.tar.gz
[root@mylinux1tools]#cdhaproxy-1.5.18
[root@mylinux1haproxy-1.5.18]#ls
CHANGELOGCONTRIBUTINGebtreeincludeMakefileROADMAPSUBVERSVERDATE
contribdocexamplesLICENSEREADMEsrctestsVERSION
[root@mylinux1haproxy-1.5.18]#mkdir-p/usr/local/haproxy
[root@mylinux1haproxy-1.5.18]#makeTARGET=linux26ARCH=x86_64PREFIX=/usr/local/haproxy/
[root@mylinux1haproxy-1.5.18]#makeinstallPREFIX=/usr/local/haproxy
[root@mylinux1haproxy-1.5.18]#cd/usr/local/haproxy/
[root@mylinux1haproxy]#tree
├──doc
│└──haproxy
│├──architecture.txt
│├──configuration.txt
│├──haproxy-en.txt
│└──haproxy-fr.txt
├──sbin
│└──haproxy
└──share
└──man
└──man1
└──haproxy.1
6directories,6files

三、修改haproxy相关系统配置

1、生成配置文件

[root@mylinux1haproxy-1.5.18]#mkdir-p/usr/local/haproxy/conf
[root@mylinux1haproxy-1.5.18]#cpexamples/haproxy.cfg/usr/local/haproxy/conf/

2、开启IPv4转发

[root@mylinux1conf]#sed-i'/net.ipv4.ip_forward/s/0/1/'/etc/sysctl.conf
[root@mylinux1conf]#sysctl-p
net.ipv4.ip_forward=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.default.accept_source_route=0
kernel.sysrq=0
kernel.core_uses_pid=1
net.ipv4.tcp_syncookies=1
kernel.msgmnb=65536
kernel.msgmax=65536
kernel.shmmax=68719476736
kernel.shmall=4294967296
fs.file-max=2097152
fs.nr_open=2097152
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=1200
net.ipv4.ip_local_port_range=102465000
net.ipv4.tcp_max_syn_backlog=81920

3、创建haproxy相关目录

[root@mylinux1conf]#mkdir-p/usr/local/haproxy/logs
[root@mylinux1conf]#mkdir-p/usr/local/haproxy/var/{run,chroot}

4、创建haproxy用户

[root@mylinux1conf]#idhaproxy
id:haproxy:Nosuchuser
[root@mylinux1conf]#useraddhaproxy-s/sbin/nologin
[root@mylinux1conf]#idhaproxy
uid=606(haproxy)gid=606(haproxy)groups=606(haproxy)

5、配置rsyslog记录haproxy日志

在haproxy.cfg中global区域添加下面一行:

log 127.0.0.1 local0 warning

然后修改rsyslog配置文件rsyslog.conf:

[root@mylinux1conf]#echo-e"#Haproxylogsetting\nlocal0.*/usr/local/haproxy/logs/haproxy.log\n#End">>/etc/rsyslog.conf
[root@mylinux1conf]#tail-3/etc/rsyslog.conf
#Haproxylogsetting
local0.*/usr/local/haproxy/logs/haproxy.log
#End

再修改rsyslog的设置:

[root@mylinux1conf]#cp/etc/sysconfig/rsyslog/etc/sysconfig/rsyslog.bak$(date+%F)
[root@mylinux1conf]#vi/etc/sysconfig/rsyslog
[root@mylinux1conf]#tail-2/etc/sysconfig/rsyslog
#SYSLOGD_OPTIONS="-c5"
SYSLOGD_OPTIONS="-c2-m0-r-x"
[root@mylinux1conf]#diff/etc/sysconfig/rsyslog.bak2016-09-30/etc/sysconfig/rsyslog
5c5,6
<SYSLOGD_OPTIONS="-c5"
---
>#SYSLOGD_OPTIONS="-c5"
>SYSLOGD_OPTIONS="-c2-m0-r-x"

此时,我们发现在CentOS 6.5上使用netstat命令无法显示514端口的监听状态,而使用lsof命令也无法查看端口514上的服务,如下:

[root@mylinux1~]#netstat-lntup|grep514
[root@mylinux1~]#lsof-i:514
[root@mylinux1~]#

然后还需要修改rsyslog.conf中的一个配置:

[root@mylinux1~]#sed-i'/imudp/s/^#//'/etc/rsyslog.conf
[root@mylinux1~]#sed-i'/UDPServerRun514/s/^#//'/etc/rsyslog.conf
[root@mylinux1~]#grepimudp/etc/rsyslog.conf
$ModLoadimudp
[root@mylinux1~]#grepUDPServerRun/etc/rsyslog.conf
$UDPServerRun514

最后重启rsyslog服务:

[root@mylinux1conf]#/etc/init.d/rsyslogrestart
Shuttingdownsystemlogger:[OK]
Startingsystemlogger:[OK]

再次尝试去看一下514端口的监听状态和服务:

[root@mylinux1~]#lsof-i:514
COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME
rsyslogd2436root3uIPv4249570t0UDP*:syslog
rsyslogd2436root4uIPv6249580t0UDP*:syslog
[root@mylinux1~]#netstat-tunlp|grep514
udp000.0.0.0:5140.0.0.0:*2436/rsyslogd
udp00:::514:::*2436/rsyslogd

四、编辑haproxy配置文件

下面给出基于tcp的haproxy代理的配置文件内容:

[root@mylinux1conf]#cathaproxy.cfg
#thisconfigneedshaproxy-1.1.28orhaproxy-1.2.1
global
log127.0.0.1local0#日志将记录在本机,通过local0设备输出
log127.0.0.1:514local0warning#定义haproxy日志级别,这里是warning
pidfile/usr/local/haproxy/var/run/haproxy.pid#定义PID文件位置
daemon#以守护进程(后台)方式运行
maxconn20480#默认的最大连接数,不能超过ulimit-n限制
chroot/usr/local/haproxy/var/chroot#设置chroot的运行路径,是一种安全策略
userhaproxy#运行haproxy的用户
grouphaproxy#运行haproxy用户的组
spread-checks3
nbproc1#设置进程数量
defaults
logglobal
retries3#3次连接失败就认为是服务器不可用,也可以通过后面设置
optionredispatch#当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
maxconn2000#默认的最大连接数
timeoutconnect5000#连接超时时长,单位为ms
timeoutclient50000#客户端超时时长
timeoutserver50000#服务器超时时长
listenssh
bind172.16.100.121:80#绑定的IP和端口
modetcp#haproxy工作在http的7层模式中的哪一层,这里是tcp
balanceroundrobin#轮询
timeoutserver15s
timeoutconnect30s
servermylinux3192.168.100.181:22checkport22#后端服务器信息,IP和端口,还有检查端口
servermylinux4192.168.100,182:22checkport22

五、启动haproxy并测试

1、启动haproxy

使用以下命令测试haproxy的配置文件是否可用:

[root@mylinux1conf]#/usr/local/haproxy/sbin/haproxy-fhaproxy.cfg-c
Configurationfileisvalid

然后使用如下命令启动haproxy:

[root@mylinux1conf]#/usr/local/haproxy/sbin/haproxy-fhaproxy.cfg-D

可以通过下面的方法检查haproxy是否启动:

[root@mylinux1conf]#ps-ef|grephaproxy
haproxy15501018:25?00:00:00/usr/local/haproxy/sbin/haproxy-fhaproxy.cfg-D
root15531015018:26pts/100:00:00grephaproxy
[root@mylinux1conf]#lsof-i:80
COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME
haproxy1550haproxy4uIPv4120880t0TCP172.16.100.121:http(LISTEN)

2、测试haproxy代理ssh

上面的配置文件中,使用haproxy的eth1的地址172.16.100.121的80端口来代理后端mylinux3和mylinux4上的22端口,也就是ssh服务,这样只要客户端使用ssh 172.16.100.121的80端口就可以远程访问后端两台服务器的ssh服务了,下面来测试一下是否如预想的那样。

[root@mylinux1conf]#ssh-p80172.16.100.121
Theauthenticityofhost'[172.16.100.121]:80([172.16.100.121]:80)'can'tbeestablished.
RSAkeyfingerprintisea:b0:45:d6:fa:48:60:41:a9:e4:f7:30:b9:ed:16:a4.
Areyousureyouwanttocontinueconnecting(yes/no)?yes
Warning:Permanentlyadded'[172.16.100.121]:80'(RSA)tothelistofknownhosts.
root@172.16.100.121'spassword:
Lastlogin:FriSep3012:42:122016from192.168.100.1
[root@mylinux4~]#hostname
mylinux4.contoso.com
[root@mylinux4~]#ipa|grep192.168.100
inet192.168.100.182/24brd192.168.100.255scopeglobaleth0

好的,成功的通过haproxy代理远程到了mylinux4这一台主机上。

dawei

【声明】:淮南站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。