基于haproxy负载均衡(http、mysql负载均衡)

负载均衡模式:

  • 四层负载(传输层)
  • 七层负载(应用层)
    区别:
  • 四层负载只负责传输,只会将请求交给后端来解析
  • TCP链接基于IP和端口来实现的,处理速度较快,并不安全
  • 实现四层负载的服务有 lvs nginx haproxy
  • 七层负载会进行解析和传输,如果通过url检测出请求时不正当的请求会进行拒绝,处理速度较慢,防止ddos的攻击,较安全
  • 调度器会与客户机建立TCP连接,并通过请求的url调度算法过滤出客户端请求的资源(index.php),交给合适的服务器,还会拒绝空连接(ddos)较安全
  • 实现七层负载的服务有 nginx haproxy 通过设置来做四层负载
    haproxy是一个典型的服务
    优点:
  • 可以对后端进行健康检查,地处 后端宕机的服务器
  • 是一个单进程的工作模式
  • 支持拒绝连接,防止ddos攻击
  • 支持透明代理
    调度算法:
  • roundrobin 动态轮询 weight(加权重)不需要重启haproxy
  • static -rr 静态轮询 weight(加权重)需要重启haproxy才会生效
  • leastconnect 最小链接
  • source 源地址散列
    haprox负载web:
    haproxy操作:
[root@CentOS2 ~]# yum -y install pcre-devel bzip2-devel
[root@CentOS2 ~]# uname -r	#查看内核版本安装时需要使用到内核版本
3.10.0-514.el7.x86_64
[root@CentOS2 ~]# tar zxf haproxy-1.4.24.tar.gz 
[root@CentOS2 ~]# cd haproxy-1.4.24/
[root@CentOS2 haproxy-1.4.24]# make TARGET=linux310 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy
[root@CentOS2 haproxy-1.4.24]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
[root@CentOS2 haproxy-1.4.24]# cd examples/	#haproxy的样例文件
[root@CentOS2 examples]# mkdir /etc/haproxy	#创建配置文件的存放目录
[root@CentOS2 examples]# cp haproxy.cfg /etc/haproxy/	#haproxy的配置文件
[root@CentOS2 examples]# cp haproxy.init /etc/rc.d/init.d/haproxy	#haproxy的启动脚本
[root@CentOS2 examples]# chmod a+x /etc/rc.d/init.d/haproxy	#加权限
[root@CentOS2 examples]# chkconfig --add haproxy	#浇入到系统任务中
[root@CentOS2 examples]# cd /etc/haproxy/
[root@CentOS2 haproxy]# vim haproxy.cfg 
  5         log 127.0.0.1   local1 notice #日志级别
  8 #       chroot /usr/share/haproxy #注释此行
  9         uid 99 #用户
 10         gid 99 #组
 11         daemon #后台运行
15 defaults #默认配置
 16         log     global #全局配置的日志格式
 17         mode    http #http七层 tcp四层 后端
 18         option  httplog #日志
 19         option  dontlognull #禁止空连接日志
 20         retries 3 #尝试和后端的连接次数
 21         redispatch #当连接到不正常的主机 会自动重定向到正常的主机
 22         maxconn 2000 #最大连接数
 23         contimeout      5000 #建立连接所用的时间为5000毫秒(5秒)
 24         clitimeout      50000 #客户端连接超时时间为50000毫秒(50秒)
 25         srvtimeout      50000 #后端服务器连接超时时间为50000毫秒(50秒)
#删除上行后的所有内容
 26 listen webserver 0.0.0.0:80 #集群名称监听的端口
 27         balance roundrobin #采取动态轮询的方式
 28         option httpchk GET /index.html #对后端主机进行健康检查使用get的请求方式 去访问index.htm|
 29         server web_one 192.168.1.3:80 check inter 2000 rise 3 fall 3
 30         server web_two 192.168.1.4:80 check inter 2000 rise 3 fall 3
#29-30行释义:
 - server 添加后端节点
 - web_one 后端节点名称
 - 192.168.1.3:80 后端节点IP
 - check 使用健康检测
 - inter 2000 每隔2000毫秒检查一次
 - rise 3 3次访问成功服务器正常
 - fall 3 3次访问失败服务器不正常
 - 可有可无(
 - cookie server_id 节点标识
 - weight x 节点设置权重
 - maxconn xxx 给后端节点的最大连接数
 - backup 将后端的节点设置为备份节点
)
[root@CentOS2 examples]# systemctl start haproxy

日志等级:

  • notice
  • info
  • debug
  • waring
  • erro

web操作:

#web1操作
[root@Centos3 ~]# yum -y install httpd
[root@Centos3 ~]# echo centos3 >/var/www/html/index.html
[root@Centos3 ~]# systemctl start httpd
[root@Centos3 ~]# netstat -anput | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      55749/httpd         
#web2操作
[root@CentOS4 ~]# yum -y install httpd
[root@CentOS4 ~]# echo centos4 >/var/www/html/index.html
[root@CentOS4 ~]# systemctl start httpd
[root@CentOS4 ~]# netstat -anput | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      56088/httpd         

客户端验证

[root@CentOS1 ~]# curl 192.168.1.2
centos3
[root@CentOS1 ~]# curl 192.168.1.2
centos4

haproxy负载均衡mysql
haproxy操作

[root@CentOS2 examples]# vim /etc/haproxy/haproxy.cfg
#更改为以下内容
  8 #       chroot /usr/share/haproxy
 17         mode    tcp
 18         option  tcplog
 26 listen dbbserver 0.0.0.0:3306
 27         balance roundrobin
 28         server db_one 192.168.1.3:3306 check port 3306 maxconn 100
 29         server db_two 192.168.1.4:3306 check port 3306 maxconn 100
[root@CentOS2 examples]# netstat -anput | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      16156/haproxy       

mariadb操作

#mariadb1操作
MariaDB [(none)]> grant all on *.* to "root"@"192.168.1.%" identified by "123.com";
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> create database one;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| one                |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

#mariadb2操作
MariaDB [(none)]> grant all on *.* to "root"@"192.168.1.%" identified by "123.com";
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> create database two;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| two                |
+--------------------+
5 rows in set (0.00 sec)

客户端验证

[root@CentOS1 ~]# yum -y install mariadb-server
[root@CentOS1 ~]# mysql -uroot -p123.com -P3306 -h 192.168.1.2	#192.168.1.2这里是haproxy负载均衡的IP
#参数释义:

 - -u 授权用户
 - -p 授权用户的密码
 - -P 指定端口
 - -h 指定要登陆的主机IP

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| one                |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> exit
Bye
[root@CentOS1 ~]# mysql -uroot -p123.com -P3306 -h 192.168.1.2
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| two                |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> exit
Bye

你可能感兴趣的:(架构1)