nginx和php一般开多进程提高处理能力
top输入之后按h是帮助
top
按1显示cpu核心
http://www.haproxy.org/
用lst长期 支持版本
[root@app1 ~]#yum list haproxy
haproxy.x86_64 1.5.18-8.el7 base 查看这个软件的版本
[root@app1 ~]#yum install haproxy -y yum安装软件haproxy
查看按照帮助文档
下载软件
## yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate 下载编译安装需要的安装包
[root@byhaproxy ~]#cd /data/
[root@client data]#tar xf haproxy-1.8.20.tar.gz
[root@byhaproxy data]#cd haproxy-1.8.20
[root@byhaproxy data]#make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy
开始编译
[root@byhaproxy haproxy-1.8.20]#make install PREFIX=/usr/local/haproxy
开始安装
[root@byhaproxy data]#cat /etc/redhat-release 查看操作系统
CentOS Linux release 7.5.1804 (Core)
- linux2628 for Linux 2.6.28, 3.x, and above (enables splice and tproxy)
[root@byhaproxy data]#uname -a 查看内核版本
Linux byhaproxy 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@byhaproxy haproxy-1.8.20]#./haproxy -v 查看版本是否正确
HA-Proxy version 1.8.20 2019/04/25
Copyright 2000-2019 Willy Tarreau
[root@byhaproxy haproxy-1.8.20]#./haproxy -h 查看启动参数
[root@byhaproxy haproxy-1.8.20]#./haproxy -vv shows known build options
OPTIONS = USE_ZLIB=1 USE_CPU_AFFINITY=1 USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1
查看他的编译参数
[root@byhaproxy haproxy-1.8.20]#cp haproxy /usr/sbin/ 把可执行程序,考到存放命令的目录里
[root@byhaproxy haproxy-1.8.20]#vim /usr/lib/systemd/system/haproxy.service 编辑启动脚本
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
[root@byhaproxy haproxy-1.8.20]#mkdir /etc/haproxy/ 创建配置文件的目录
[root@byhaproxy haproxy-1.8.20]#find ./* -name *.cfg 搜索配置文件
[root@byhaproxy haproxy-1.8.20]#vim ./examples/option-http_proxy.cfg
这个是示例的配置文件
[root@yum ~]#systemctl start haproxy
[root@yum ~]#ss -tnl
LISTEN 0 128 *:5000 *:* 查看
[root@yum ~]#ps -ef | grep haproxy 查看他的进程号
root 1822 1 0 08:28 ? 00:00:00 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
haproxy 1823 1822 0 08:28 ? 00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
haproxy 1824 1823 0 08:28 ? 00:00:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
root 1836 1766 0 08:30 pts/0 00:00:00 grep --color=auto haproxy
这个就相当于串行的进程,父进程不一样他的内存空间也不一样
yum安装的和最新编译安装的启动脚本不一样的,配置文件的参数不支持
[root@byhaproxy haproxy-1.8.20]#vim /etc/haproxy/haproxy.cfg 修改配置文件
global
maxconn 100000
chroot /usr/local/haproxy
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
nbproc 2
cpu-map 1 0
cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
pidfile /usr/local/haproxy/run/haproxy.pid
log 127.0.0.1 local3 info
defaults
option http-keep-alive
option forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth haadmin:q1w2e3r4ys
listen web_port
bind 0.0.0.0:80
mode http
log global
server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
[root@byhaproxy haproxy-1.8.20]#systemctl start haproxy启动服务
[root@byhaproxy haproxy-1.8.20]#ps -ef | grep haproxy 过滤进程
root 3031 1 0 08:38 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody 3033 3031 0 08:38 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody 3034 3031 0 08:38 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
root 3048 1875 0 08:39 pts/1 00:00:00 grep --color=auto haproxy
主进程3011 其他的nobody的父进程都是3011,这样他们就有共同的父进程,这个是进程的关系
[root@byhaproxy haproxy-1.8.20]#vim /etc/haproxy/haproxy.cfg
#nbproc 2
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
把这几个注释掉
[root@byhaproxy haproxy-1.8.20]#systemctl restart haproxy
[root@byhaproxy haproxy-1.8.20]#ps -ef | grep haproxy 再次查看进程,这个就是多进程工作没有开,从进程编号可以看出来
root 3059 1 0 08:41 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody 3061 3059 0 08:41 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
root 3065 1875 0 08:41 pts/1 00:00:00 grep --color=auto haproxy
listen web_port
bind 0.0.0.0:8080
mode http
log global
server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
frontend web
bind 173.22.90.8:80 监听地址
use_backend web_host
backend web_host
server web1 173.22.90.7:80 后端服务器地址
server web2 173.22.90.10:80 后端服务器地址
[root@byhaproxy haproxy-1.8.20]#systemctl restart haproxy
[root@byhaproxy haproxy-1.8.20]#ss -ntl 查看监听端口
LISTEN 0 128 173.22.90.8:80 *:* 监听本机ip地址的端口
[root@app2 yum.repos.d]#yum install httpd -y 安装HTTP的服务
[root@app1 ~]#cd /var/www/html/
[root@app2 html]#mkdir apps
[root@app2 html]#mkdir app1
[root@app1 html]#cd app1/
[root@app1 app1]#vim index.html 创建一个主页
173.22.90.7
[root@app1 app1]#systemctl start httpd
[root@byhaproxy haproxy-1.8.20]#vim /etc/haproxy/haproxy.cfg
bind 173.22.90.8:80
use_backend web_host
backend web_host
server web1 173.22.90.7:80
# server web2 173.22.90.10:80 注释掉一个
[root@byhaproxy haproxy-1.8.20]#echo "alias hapr='systemctl restart haproxy'" >>/etc/profile 定义重启别名
[root@byhaproxy haproxy-1.8.20]#source /etc/profile
出现apache的界面
访问页面的后端服务器
[root@nginxserver ~]#yum install httpd -y 安装http服务
[root@nginxserver ~]#cd /var/www/html/
[root@nginxserver html]#mkdir app2
[root@nginxserver html]#vim app2/index.html 编写页面
app2
[root@app2 html]# systemctl start httpd 启动服务
[root@byhaproxy haproxy-1.8.20]#vim /etc/haproxy/haproxy.cfg
server web1 173.22.90.7:80
server web2 173.22.90.11:80 取消注释
通过haproxy访问后端服务器的app2
image.png
[root@byhaproxy ~]#vim /etc/haproxy/haproxy.cfg
#frontend web
# bind 173.22.90.8:80
#use_backend web_host
#backend web_host
# server web1 173.22.90.7:80
# server web2 173.22.90.11:80
listen web 使用listen更方便,文字的行数少
bind 173.22.90.8:80
server web1 173.22.90.11:80
[root@byhaproxy ~]#hapr
[root@byhaproxy ~]#ss -ntl
LISTEN 0 128 173.22.90.8:80 *:* 查看端口还在监听状态
查看访问的页面
maxconn 100000 可以接受最大连接数10万
chroot /usr/local/haproxy 锁定到这个目录里,防止别人取得haproxy权限去访问其他的目录
[root@byhaproxy haproxy]#id 99
uid=99(nobody) gid=99(nobody) groups=99(nobody)
[root@byhaproxy haproxy]#ps -ef | grep haproxy 使用的是nobody的用户运行的,这个是内部账户
root 4626 1 0 10:04 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
nobody 4628 4626 0 10:04 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
root 5044 4788 0 10:12 pts/1 00:00:00 grep --color=auto haproxy
[root@byhaproxy haproxy]#vim /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin 这个账户是nologin的bash环境的账户,或者在建一个账户把shell环境改成nobody就可以了
[root@byhaproxy haproxy]#useradd haproxy -s /sbin/nologin 创建账户并且指定bash类型
查看当前的id haproxy的号
uid=1000(haproxy) gid=1000(haproxy) groups=1000(haproxy)
[root@byhaproxy haproxy]#vim /etc/haproxy/haproxy.cfg
uid 1000
gid 1000
[root@byhaproxy haproxy]#hapr
[root@byhaproxy haproxy]#ps -ef | grep haproxy 这个时候进程账户换了
root 5371 1 0 10:19 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
haproxy 5372 5371 0 10:19 ? 00:00:00 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
root 5388 4788 0 10:19 pts/1 00:00:00 grep --color=auto haproxy
daemon就是以守护进程方式运行
[root@byhaproxy haproxy]#vim /etc/haproxy/haproxy.cfg
nbproc 2
cpu-map 1 0 就是把haproxy的第一个进程绑定到第0个cpu核心上
cpu-map 2 1 就是把haproxy的第2个进程绑定到第1个cpu核心上
[root@byhaproxy haproxy]#cat /proc/cpuinfo
查看cpu的核心
[root@byhaproxy ~]#yum install psmisc -y
[root@yum ~]#vim /etc/haproxy/haproxy.cfg
nbthread 2
[root@yum ~]#systemctl restart haproxy
[root@yum ~]#ps -ef | grep haproxy 报错没有起来
root 1596 1510 0 10:47 pts/0 00:00:00 grep --color=auto haproxy
[root@byhaproxy haproxy]#pstree -p 7016 查看主进程 ,主进程下边有线程
haproxy(7016)─┬─haproxy(7017)
└─haproxy(7018)
[root@yum ~]#vim /etc/haproxy/haproxy.cfg 开启多进程
nbproc 2
cpu-map 1 0
cpu-map 2 1
[root@yum ~]#systemctl restart haproxy
重启服务