环境说明:
一、环境准备
以下配置基本上是每一次都要提前准备的,所以准备的命令我就不详细列出了,前面有一个一键优化的脚本,可以使用脚本进行自动化的处理,避免多次重复操作的困扰。
#检查防火墙 [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这一台主机上。