虚拟化容器,大数据,DBA,中间件,监控。

HAProxy与LVS综合----搭建LNMP源码编译结合HAProxy或LVS负载均衡

02 02月
作者:admin|分类:应用管理

HAProxy与LVS综合----搭建LNMP源码编译结合HAProxy或LVS负载均衡

实战一:实现LNMP与Keepalived、HAProxy做反向代理

框架图:

实现原理:

1、当A用户访问网站时,此时需要经过防火墙,防火墙将用户访问的IP地址处理后,如果允许访问,则就访问到HAroxy作为转发的反向代理服务器,用户通过访问VIP地址,然后转发到后端nginx和php服务器上;

2、后端服务器需要最少有两台备用,访问的数据要一致,当一台web服务器宕机后,另一台还能正常工作;

3、Keepalived作为对HAProxy健康性检查,一般最少有两台主机,作为主从备用,如果HAProxy、keepalived、nginx其中之一宕机后,就将VIP地址漂移到另一台HAProxy主机上;

4、HAProxy也会通过VIP地址及3306端口绑定,转发到后端mysql数据库上。

1、修改A主机的keepalived和HAProxy的配置文件

修改A主机的keepalived配置文件:vim /etc/keepalived/keepalived.conf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

global_defs {

notification_email {

root@localhost 收邮件地址

}

notification_email_from root@localhost 发邮件地址

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id ka1

vrrp_skip_check_adv_addr

vrrp_iptables

vrrp_garp_interval 0

vrrp_gna_interval 0

}

vrrp_script chk_haproxy {

script /etc/keepalived/chk_haproxy.sh 添加一个脚本检测机制,检测haproxy是否宕机,宕机时直接降级,VIP就跳转至从服务器上

interval 2 时间间隔2秒

weight -50 优先级减50

fall 3

rise 5

timeout 2

}

vrrp_instance VI_1 {

state MASTER 为主节点

interface ens33

virtual_router_id 50 路由ID要和从节点一致

priority 100 优先级100

unicast_src_ip 192.168.37.7 绑定单播地址,本地的IPD地址

unicast_peer {

192.168.37.17 目标从节点的IP地址

}

advert_int 2

authentication {

auth_type pass

auth_pass 123456

}

virtual_ipaddress {

192.168.37.100 dev ens33 label ens33:1 绑定VIP地址

}

track_script {

chk_haproxy 调用上面检测脚本的命名

}

}

在/etc/keepalived目录下创建一个检测haproxy状态的脚本,用来调用。

1

2

3

[root@rs2keepalived]#cat chk_haproxy.sh

#!/bin/bash

killall -0 haproxy 发送信号,检测haproxy是否存活

修改A主机的haproxy配置文件:vim /etc/haproxy/haproxy.cfg

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

global

maxconn 100000

chroot /usr/local/haproxy

stats socket /var/lib/haproxy/haproxy.sock1 mode 600 level admin process 1

stats socket /var/lib/haproxy/haproxy.sock2 mode 600 level admin process 2

user haproxy

group haproxy

daemon

nbproc 2

cpu-map 1 0

cpu-map 2 1

#cpu-map 3 2

#cpu-map 4 3

pidfile /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

bind :9527

stats enable

stats hide-version

stats uri /haproxy-status

stats realm HAPorxy\Stats\Page

stats auth haadmin:123456

stats auth admin:123456

stats refresh 30s

stats admin if TRUE

listen web_port

bind 0.0.0.0:80

mode http

log global

server web1 127.0.0.1:80 check inter 3000 fall 2 rise 5

#官网业务访问入口=====================================

listen WEB_PORT_80

bind 0.0.0.0:80 监控后端服务端口

mode tcp

server web1 192.168.37.27:80 check inter 3000 fall 3 rise 5

server web2 192.168.37.37:80 check inter 3000 fall 3 rise 5

listen MySQL_PORT

bind 0.0.0.0:3306 在haproxy中监测数据库端口

mode tcp

server web1 192.168.37.47:3306 cookie web-47 check inter 3000 fall 3 rise 5

2、修改B主机的Keepalived和HAProxy配置文件

修改B主机的keepalived配置文件:vim /etc/keepalived/keepalived.conf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

global_defs {

notification_email {

root@localhost

}

notification_email_from root@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id ka2

vrrp_skip_check_adv_addr

vrrp_iptables

vrrp_garp_interval 0

vrrp_gna_interval 0

}

vrrp_script chk_haproxy {

script /etc/keepalived/chk_haproxy.sh

interval 2

weight -50

fall 3

rise 5

timeout 2

}

vrrp_instance VI_1 {

state BACKUP 作为从节点

interface ens33

virtual_router_id 50

priority 80

unicast_src_ip 192.168.37.17

unicast_peer {

192.168.37.7

}

advert_int 2

authentication {

auth_type pass

}

virtual_ipaddress {

192.168.37.100 dev ens33 label ens33:1

}

track_script {

chk_haproxy

}

}

在/etc/keepalived目录下创建一个检测haproxy状态的脚本,用来调用。

1

2

3

[root@rs2keepalived]#cat chk_haproxy.sh

#!/bin/bash

killall -0 haproxy 发送信号,检测haproxy是否存活

修改B主机的haproxy配置文件:vim /etc/haproxy/haproxy.cfg

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

global

maxconn 100000

chroot /usr/local/haproxy

stats socket /var/lib/haproxy/haproxy.sock1 mode 600 level admin process 1

stats socket /var/lib/haproxy/haproxy.sock2 mode 600 level admin process 2

user haproxy

group haproxy

daemon

nbproc 2

cpu-map 1 0

cpu-map 2 1

#cpu-map 3 2

#cpu-map 4 3

pidfile /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

bind :9527

stats enable

stats hide-version

stats uri /haproxy-status

stats realm HAPorxy\Stats\Page

stats auth haadmin:123456

stats auth admin:123456

stats refresh 30s

stats admin if TRUE

listen web_port

bind 0.0.0.0:80

mode http

log global

server web1 127.0.0.1:80 check inter 3000 fall 2 rise 5

#官网业务访问入口=====================================

listen WEB_PORT_80

bind 0.0.0.0:80

mode tcp

server web1 192.168.37.27:80 check inter 3000 fall 3 rise 5

server web2 192.168.37.37:80 check inter 3000 fall 3 rise 5

listen MySQL_PORT

bind 0.0.0.0:3306

mode tcp

server web1 192.168.37.47:3306 cookie web-47 check inter 3000 fall 3 rise 5

3、在C主机编译安装nginx软件(1.14.2版本)

官网下载地址:http://nginx.org/en/download.html

1、下载好的nginx源码包进行解压

1

[root@centos27src]#tar -xvf nginx-1.14.2.tar.gz

2、安装nginx相关的依赖包

1

2

3

4

yum install -y vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate \

gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel \

net-tools iotop bc zip unzip zlib-devel bash-completion nfs-utils automake libxml2 \

libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed

3、然后切换到nginx目录下,指定源码编译安装的路径

1

2

3

4

5

6

7

8

9

10

11

12

./configure --prefix=/apps/nginx \

--user=www \

--group=www \

--with-http_ssl_module \

--with-http_v2_module \

--with-http_realip_module \

--with-http_stub_status_module \

--with-http_gzip_static_module \

--with-pcre \

--with-stream \

--with-stream_ssl_module \

--with-stream_realip_module

4、最后进行make编译

1

[root@centos27nginx-1.14.2]#make -j 2 && make install

5、创建一个nginx调用目录

1

2

3

4

5

[root@centos27nginx-1.14.2]#mkdir /data/nginx/wordpress -p

[root@centos27nginx-1.14.2]#vim /data/nginx/wordpress/index.php 创建一个index.php测试页面

phpinfo();

?>

6、创建一个server目录,配置nginx文件,指定nginx测试页面路径,调用include函数

1

2

3

[root@centos27server]#cd /apps/nginx/conf

[root@centos27conf]#mkdir server

[root@centos27conf]#vim test.conf

配置nginx文件:vim test.conf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

server {

listen 80;

server_name www.magedu.net;

location / {

root /data/nginx/wordpress;

index index.php index.html index.htm;

}

location ~ \.php$ {

root /data/nginx/wordpress;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

}

在nginx主配置文件中调用test.conf配置文件

1

2

3

4

[root@centos27conf]#vim /apps/nginx/conf/nginx.conf

include /apps/nginx/conf/server/*.conf;

}

7、检查nginx语法是否正确,成功后就启动nginx服务

1

2

3

4

5

[root@centos27conf]#/apps/nginx/sbin/nginx -t

nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /apps/nginx/conf/nginx.conf test is successful 已经OK,成功

[root@centos27conf]#ln -s /apps/nginx/sbin/nginx /usr/sbin 创建软链接

[root@centos27conf]#nginx 启动nginx服务

4、在C主机编译安装php软件(5.0以上版本)

1、在C主机解压php压缩包并安装相关的依赖包

1

2

3

[root@centos27php-7.1.30]#cd /usr/local/src

[root@centos27php-7.1.30]#tar -vxf php-7.1.30.tar.gz

[root@centos27php-7.1.30]#cd php-7.1.30/

安装开发包组

1

[root@centos7 ~]# yum groupinstall "development tools"

安装相关依赖包

1

2

3

4

[root@centos7 ~]# yum -y install wget vim pcre pcre-devel openssl openssl-devel libicudevel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype \

freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap \

openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt \

libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel php-mysql

2、切换到解压后的php目录下,进行源码编译

1

2

3

4

5

6

7

./configure --prefix=/apps/php --enable-fpm --with-fpm-user=www \

--with-fpm-group=www --with-pear --with-curl --with-png-dir --with-freetype-dir \

--with-iconv --with-mhash --with-zlib --with-xmlrpc --with-xsl --with-openssl \

--with-mysqli --with-pdo-mysql --disable-debug --enable-zip --enable-sockets \

--enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-exif \

--enable-wddx --enable-bcmath --enable-calendar --enable-shmop --enable-dba \

--enable-sysvsem --enable-sysvshm --enable-sysvmsg

3、指定安装包路径

1

[root@centos27php-7.1.30]#make -j 2 && make install

4、进入php的www程序目录,并将里边的用户名和组名修改为www。

1

2

3

4

5

[root@centos27php-fpm.d]#cd /apps/php/etc/php-fpm.d

[root@centos27php-fpm.d]#cp www.conf.default www.conf

[root@centos27php-fpm.d]#vim www.conf 修改启动用户账号

user www

group www

5、创建一个系统账号,复制php.ini-production文件到配置文件目录下,并起名为php.ini

1

2

[root@centos27php-fpm.d]#useradd www -u 2019 -s /sbin/nologin 此UID要和D主机的php程序的用户名及UID要一致。

[root@centos27etc]#cp /usr/local/src/php-7.1.30/php.ini-production /apps/php/etc/php.ini

6、切换到配置文件目录下,将php默认主程序改名。

1

2

[root@centos27etc]#cd /apps/php/etc

[root@centos27etc]#cp php-fpm.conf.default php-fpm.conf

7、启动php-fpm程序

1

[root@centos27etc]#/apps/php/sbin/php-fpm -c /apps/php/etc/php.ini

查看php状态,此时php的9000端口已经打开。

在C主机开始配置wordpress文件

1、将wordpress包下载下来并存放在指定的目录

1

2

[root@centos27wordpress]#cd /data/nginx/wordpress

[root@centos27wordpress]#rz

2、解压wordpress压缩包,并将wordpress目录、压缩包及之前测试的index.php文件移动到其他地方

1

2

3

4

5

6

7

8

9

[root@centos27wordpress]#mv index.php wordpress-5.0.1-zh_CN.tar.gz /opt/ 将测试的文件及压缩包移动到opt目录

[root@centos27wordpress]#ls

wordpress

[root@centos27wordpress]#mv wordpress/* . 将wordpress目录移动到当前目录

[root@centos27wordpress]#ls

index.php wordpress wp-blog-header.php wp-content wp-links-opml.php wp-mail.php wp-trackback.php

license.txt wp-activate.php wp-comments-post.php wp-cron.php wp-load.php wp-settings.php xmlrpc.php

readme.html wp-admin wp-config-sample.php wp-includes wp-login.php wp-signup.php

[root@centos27wordpress]#mv wordpress /opt 将wordpress空目录移走

3、将wordpress配置文件进行修改,关联到数据库。

1

2

[root@centos27wordpress]#cp wp-config-sample.php wp-config.php

[root@centos27wordpress]#chown -R www.www . 将此目录及以下的文件权限修改为www,否则无法上传图片

修改wordpress配置文件,关联到数据库

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[root@centos27wordpress]#vim wp-config.php

define('DB_NAME', 'wordpress');

/** MySQL数据库用户名 */

define('DB_USER', 'wordpress');

/** MySQL数据库密码 */

define('DB_PASSWORD', 'centos');

/** MySQL主机 */

define('DB_HOST', '192.168.37.100'); 写上VIP的地址。

/** 创建数据表时默认的文字编码 */

define('DB_CHARSET', 'utf8');

访问以下网站生成随机数,将数据路内容修改也可以。

5、在D主机编译安装nginx软件

官网下载地址:http://nginx.org/en/download.html

1、下载好的nginx源码包进行解压

1

[root@centos27src]#tar -xvf nginx-1.14.2.tar.gz

2、安装nginx相关的依赖包

1

2

3

4

yum install -y vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate \

gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel \

net-tools iotop bc zip unzip zlib-devel bash-completion nfs-utils automake libxml2 \

libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed

3、然后切换到nginx目录下,指定源码编译安装的路径

1

2

3

4

5

6

7

8

9

10

11

12

./configure --prefix=/apps/nginx \

--user=www \

--group=www \

--with-http_ssl_module \

--with-http_v2_module \

--with-http_realip_module \

--with-http_stub_status_module \

--with-http_gzip_static_module \

--with-pcre \

--with-stream \

--with-stream_ssl_module \

--with-stream_realip_module

4、最后进行make编译

1

[root@centos27nginx-1.14.2]#make -j 2 && make install

5、创建一个nginx调用目录

1

2

3

4

5

[root@centos27nginx-1.14.2]#mkdir /data/nginx/wordpress -p

[root@centos27nginx-1.14.2]#vim /data/nginx/wordpress/index.php 创建一个index.php测试页面

phpinfo();

?>

6、创建一个server目录,配置nginx文件,指定nginx测试页面路径,调用include函数

1

2

3

[root@centos27server]#cd /apps/nginx/conf

[root@centos27conf]#mkdir server

[root@centos27conf]#vim test.conf

配置nginx文件:vim test.conf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

server {

listen 80;

server_name www.magedu.net;

location / {

root /data/nginx/wordpress;

index index.php index.html index.htm;

}

location ~ \.php$ {

root /data/nginx/wordpress;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

}

在nginx主配置文件中调用test.conf配置文件

1

2

3

4

[root@centos27conf]#vim /apps/nginx/conf/nginx.conf

user www; 用户名称和php名称一致

include /apps/nginx/conf/server/*.conf;

}

7、检查nginx语法是否正确,成功后就启动nginx服务

1

2

3

4

[root@centos27conf]#/apps/nginx/sbin/nginx -t

nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /apps/nginx/conf/nginx.conf test is successful 已经OK,成功

[root@centos27conf]#/apps/nginx/sbin/nginx 启动nginx服务

6、D主机编译安装php软件(5.0以上版本)

1、在D主机解压php压缩包并安装相关的依赖包

1

2

3

[root@centos27php-7.1.30]#cd /usr/local/src

[root@centos27php-7.1.30]#tar -vxf php-7.1.30.tar.gz

[root@centos27php-7.1.30]#cd php-7.1.30/

安装开发包组

1

[root@centos7 ~]# yum groupinstall "development tools"

安装相关依赖包

1

2

3

4

[root@centos7 ~]# yum -y install wget vim pcre pcre-devel openssl openssl-devel libicudevel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype \

freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap \

openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt \

libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel php-mysql

2、切换到解压后的php目录下,进行源码编译

1

2

3

4

5

6

7

./configure --prefix=/apps/php --enable-fpm --with-fpm-user=www \

--with-fpm-group=www --with-pear --with-curl --with-png-dir --with-freetype-dir \

--with-iconv --with-mhash --with-zlib --with-xmlrpc --with-xsl --with-openssl \

--with-mysqli --with-pdo-mysql --disable-debug --enable-zip --enable-sockets \

--enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-exif \

--enable-wddx --enable-bcmath --enable-calendar --enable-shmop --enable-dba \

--enable-sysvsem --enable-sysvshm --enable-sysvmsg

3、指定安装包路径

1

[root@centos27php-7.1.30]#make -j 2 && make install

在D主机开始配置wordpress文件

1、将wordpress包下载下来并存放在指定的目录

1

2

[root@centos37wordpress]#cd /data/nginx/wordpress

[root@centos37wordpress]#rz

2、解压wordpress压缩包,并将wordpress目录、压缩包及之前测试的index.php文件移动到其他地方

1

2

3

4

5

6

7

8

9

[root@centos37wordpress]#mv index.php wordpress-5.0.1-zh_CN.tar.gz /opt/ 将测试的文件及压缩包移动到opt目录

[root@centos37wordpress]#ls

wordpress

[root@centos37wordpress]#mv wordpress/* . 将wordpress目录移动到当前目录

[root@centos37wordpress]#ls

index.php wordpress wp-blog-header.php wp-content wp-links-opml.php wp-mail.php wp-trackback.php

license.txt wp-activate.php wp-comments-post.php wp-cron.php wp-load.php wp-settings.php xmlrpc.php

readme.html wp-admin wp-config-sample.php wp-includes wp-login.php wp-signup.php

[root@centos37wordpress]#mv wordpress /opt 将wordpress空目录移走

3、将wordpress配置文件进行修改,关联到数据库。

1

2

[root@centos27wordpress]#cp wp-config-sample.php wp-config.php

[root@centos27wordpress]#chown -R www.www . 将此目录及以下的文件权限修改为www,否则无法上传图片

修改wordpress配置文件,关联到数据库

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[root@centos37wordpress]#vim wp-config.php

define('DB_NAME', 'wordpress');

/** MySQL数据库用户名 */

define('DB_USER', 'wordpress');

/** MySQL数据库密码 */

define('DB_PASSWORD', 'centos');

/** MySQL主机 */

define('DB_HOST', '192.168.37.100'); 写上VIP的地址。

/** 创建数据表时默认的文字编码 */

define('DB_CHARSET', 'utf8');

访问以下网站生成随机数,将数据路内容修改也可以。

7、后端E主机编译安装二进制mysql数据库

执行此脚本可以编译安装完成二进制数据库。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

[root@routersrc]#cd /usr/local/src 切换到此目录下

[root@routersrc]#tar -xvf mysql-5.6.34-onekey-install.tar.gz 解压数据库文件

[root@routersrc]#cat mysql-install.sh

#!/bin/bash

DIR=`pwd`

NAME="mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz"

FULL_NAME=${DIR}/${NAME}

DATA_DIR="/data/mysql"

yum install vim gcc gcc-c++ wget autoconf net-tools lrzsz iotop lsof iotop bash-completion -y

yum install curl policycoreutils openssh-server openssh-clients postfix -y

if [ -f ${FULL_NAME} ];then

echo "安装文件存在"

else

echo "安装文件不存在"

exit 3

fi

if [ -h /usr/local/mysql ];then

echo "Mysql 已经安装"

exit 3

else

tar xvf ${FULL_NAME} -C /usr/local/src

ln -sv /usr/local/src/mysql-5.6.34-linux-glibc2.5-x86_64 /usr/local/mysql

if id mysql;then

echo "mysql 用户已经存在,跳过创建用户过程"

fi

useradd mysql -s /sbin/nologin

if id mysql;then

chown -R mysql.mysql /usr/local/mysql/* -R

if [ ! -d /data/mysql ];then

mkdir -pv /data/mysql && chown -R mysql.mysql /data -R

/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql/

cp /usr/local/src/mysql-5.6.34-linux-glibc2.5-x86_64/support-files/mysql.server /etc/init.d/mysqld

chmod a+x /etc/init.d/mysqld

cp ${DIR}/my.cnf /etc/my.cnf

ln -sv /usr/local/mysql/bin/mysql /usr/bin/mysql

/etc/init.d/mysqld start

else

echo "MySQL数据目录已经存在,"

exit 3

fi

fi

fi

执行安装数据库脚本:

1

[root@routersrc]#bash mysql-install.sh

创建数据库,并创建一个数据库用户名及授权

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[root@routersrc]#mysql

Welcome to the MariaDB monitor. Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.6.34 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> create database wordpress; 创建数据库

Query OK, 1 row affected (0.00 sec)

MySQL [(none)]> grant all on wordpress.* to "wordpress"@'192.168.37.%' identified by 'centos'; 创建数据库名称

Query OK, 0 rows affected (0.01 sec)

MySQL [(none)]> flush privileges; 刷新数据库

Query OK, 0 rows affected (0.00 sec)

在后端E主机安装nfs共享包

1、安装nfs-utils包

1

[root@routersrc]#yum install nfs-utils -y

2、新建一个共享目录,并修改配置文件,将新建的目录共享出来,授予都写权限。

1

[root@routersrc]#mkdir /nfsdata/wordpress -p

修改配置文件,将目录共享

1

2

[root@routersrc]#vim /etc/exports

/nfsdata/wordpress *(insecure,rw,async,no_root_squash) 避免客户端连接此nfs共享的目录是存在端口大于1024而被拒绝,需要加上insecure选项

3、启动nfs服务器,并设置为开机启动

1

2

[root@routersrc]#systemctl start nfs 如果需要重启nfs,最好是重新加载,避免重启带来重新注册端口。

[root@routersrc]#systemctl enable nfs

在E主机安装完成nfs之后,我们需要在A或B主机进行验证一下此nfs文件是否可以挂载,是否可以看到此目录。

在A主机安装nfs-utils包,然后挂载后端E主机的nfs路径,此时可以看到目录文件即可。

1

2

3

4

5

6

7

[root@centos7~]#yum install nfs-utils -y

[root@centos7~]#showmount -e 192.168.37.47 查看nfs共享的目录

Export list for 192.168.37.47:

/nfsdata/wordpress * 可以查看到nfs共享的目录

[root@centos7~]#mount -t nfs 192.168.37.47:/nfsdata/wordpress /mnt/ 测试挂载成功即可

[root@centos_17~]#umount /mnt 取消挂载

最后查看wordpress搭建效果

在本地windows的hosts文件中对后端服务器的IP地址进行域名解析

访问网页,此时就可以访问成功,并进行登录测试。

此时就可以创建自己的博客内容:

由于后端有两个nginx 服务器,此时宕机一个服务器,还是可以在后端进行服务,此时将一个nginx服务器宕机,然后在另一台主机插入图片。

此时,再开启宕机的nginx服务器,就不会查看到另一台主机插入的图片,为了让每个web服务器提供的内容都一致,我们就需要将nginx服务器内容进行挂载在缓存服务器上。

将数据最全的web服务器进行挂载在nfs缓存服务器上

原理:为了让每个web服务器提供的内容都一致,我们就需要将nginx服务器内容进行挂载在缓存服务器上,共享在nfs服务器上的文件内容就会一致。

1、切换到之前上传图片的目录下,并对图片进行备份

1

2

3

4

5

6

7

[root@ka2wordpress]#cd /data/nginx/wordpress/wp-content/uploads/

[root@ka2uploads]#ls

2019

[root@ka2uploads]#cd 2019/12/

[root@ka212]#ls

26e07453fd1af76d.jpg 6d4d71f6da71f8a8.jpg

[root@ka212]#cp -p * /opt

2、在挂载nfs服务器之前,需要将web服务器(D主机)停止。

1

2

3

[root@ka212]#nginx -s stop 停止nginx服务进行挂载

[root@ka2uploads]#mount -t nfs 192.168.37.47:/nfsdata/wordpress /data/nginx/wordpress/wp-content/uploads/ 由于挂载之后就会没有之前的图片数据

[root@ka2rh]#cp -p /opt/ /data/nginx/wordpress/wp-content/uploads 此时需要将备份在opt目录下的数据进行复制到upload目录下。

3、此时一台web服务器(D主机)的内容挂载在后端nfs服务器上,将另一台主机的nginx服务(C主机)停止,也进行挂载

1

2

[root@lvs112]#nginx -s stop

[root@lvs112]#mount -t nfs 192.168.37.47:/nfsdata/wordpress /data/nginx/wordpress/wp-content/uploads/

开始测试效果:

将第一台挂载的web服务器(D主机)停止,查看此时另一台web服务器(C主机)是否可以同时访问一样的内容,此时可以看到,可以访问到两张图片。

1

2

[root@ka2wp-content]#nginx -s stop 停止掉图片最全的nginx服务(第一台挂载的服务器D主机)

[root@lvs112]#nginx 开启C主机的nginx服务器

将hosts文件写成VIP地址,让HAProxy服务器做IP地址调度转发,此时访问的网页也是正常访问。

实战二:实现LNMP与LVS-DR模式负载均衡调度转发功能

框架图:

实现原理:

1、当A用户访问网站时,此时需要经过防火墙,防火墙将用户访问的IP地址处理后,如果允许访问,则就访问到LVS作为转发的反向代理服务器,用户通过访问VIP地址,然后转发到后端nginx和php服务器上;

2、后端服务器需要最少有两台备用,访问的数据要一致,当一台web服务器宕机后,另一台还能正常工作;

3、Keepalived作为对后端nginx服务器健康性检查,一般最少有两台Keepalived主机,作为主从备用,如果一台keepalived或者nginx宕机后,就将VIP地址漂移到另一台keepalived主机上。

4、LVS通过VIP地址对后端nginx服务器进行转发,作为负载均衡效果。

1、在A主机上配置keepalived和LVS规则

1、在A主机配置keepalived和LVS规则:vim /etc/keepalived/keepalived.conf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

global_defs {

notification_email {

root@localhost

}

notification_email_from root@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id ka1

vrrp_skip_check_adv_addr

vrrp_iptables

vrrp_garp_interval 0

vrrp_gna_interval 0

}

vrrp_instance VI_1 {

state MASTER

interface ens33

virtual_router_id 50

priority 100

unicast_src_ip 192.168.37.7

unicast_peer {

192.168.37.17

}

advert_int 2

authentication {

auth_type pass

auth_pass 123456

}

virtual_ipaddress {

192.168.37.100 dev ens33 label ens33:1 添加VIP地址

}

}

virtual_server 192.168.37.100 80 { VIP地址,调度到后端服务器

delay_loop 6

lb_algo rr

lb_kind DR

protocol TCP

real_server 192.168.37.27 80 { 后端服务器1

weight 1

TCP_CHECK { TCP模式

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

real_server 192.168.37.37 80 { 后端服务器2

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

查看规则生效情况:可以看到当前LVS配置TCP模式,指定VIP地址做转发(192.168.37.100),后端服务器提提供服务。

1

2

3

4

5

6

7

[root@rs2keepalived]#ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.37.100:80 rr

-> 192.168.37.27:80 Route 1 0 0

-> 192.168.37.37:80 Route 1 0 0

2、在B主机上配置keepalived和LVS规则

在B主机上配置文件:vim /etc/keepalived/keepalived.conf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

global_defs {

notification_email {

root@localhost

}

notification_email_from root@localhost

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id ka2

vrrp_skip_check_adv_addr

vrrp_iptables

vrrp_garp_interval 0

vrrp_gna_interval 0

}

vrrp_instance VI_1 {

state BACKUP

interface ens33

virtual_router_id 50

priority 80

unicast_src_ip 192.168.37.17

unicast_peer {

192.168.37.7

}

advert_int 2

authentication {

auth_type pass

auth_pass 123456

}

virtual_ipaddress {

192.168.37.100 dev ens33 label ens33:1

}

}

virtual_server 192.168.37.100 80 {

delay_loop 6

lb_algo rr

lb_kind DR

protocol TCP

real_server 192.168.37.27 80 {

weight 1

TCP_CHECK{

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

real_server 192.168.37.37 80 {

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

3、在后端服务器C绑定VIP地址到lo回环网卡上

执行以下脚本,可以将VIP地址绑定在lo回环网卡上

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

[root@lvs1~]#cat lvs_dr_rs.sh

#!/bin/bash

#Author:wangxiaochun

#Date:2017-08-13

vip=192.168.37.100

mask='255.255.255.255'

dev=lo:1

rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null

service httpd start &> /dev/null && echo "The httpd Server is Ready!"

echo "

`hostname`

" > /var/www/html/index.html

case $1 in

start)

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig $dev $vip netmask $mask #broadcast $vip up

#route add -host $vip dev $dev

echo "The RS Server is Ready!"

;;

stop)

ifconfig $dev down

echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

echo "The RS Server is Canceled!"

;;

*)

echo "Usage: $(basename $0) start|stop"

exit 1

;;

esac

执行脚本:

1

[root@lvs1~]#bash lvs_dr_rs.sh start

查看绑定结果:

4、在后端服务器D绑定VIP地址到lo回环网卡上

执行以下脚本,可以将VIP地址绑定在lo回环网卡上

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

[root@lvs1~]#cat lvs_dr_rs.sh

#!/bin/bash

#Author:wangxiaochun

#Date:2017-08-13

vip=192.168.37.100

mask='255.255.255.255'

dev=lo:1

rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null

service httpd start &> /dev/null && echo "The httpd Server is Ready!"

echo "

`hostname`

" > /var/www/html/index.html

case $1 in

start)

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig $dev $vip netmask $mask #broadcast $vip up

#route add -host $vip dev $dev

echo "The RS Server is Ready!"

;;

stop)

ifconfig $dev down

echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

echo "The RS Server is Canceled!"

;;

*)

echo "Usage: $(basename $0) start|stop"

exit 1

;;

esac

执行脚本:

1

[root@lvs1~]#bash lvs_dr_rs.sh start

查看绑定结果:

执行以下脚本,可以将VIP地址绑定在lo回环网卡上

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

[root@lvs1~]#cat lvs_dr_rs.sh

#!/bin/bash

#Author:wangxiaochun

#Date:2017-08-13

vip=192.168.37.100

mask='255.255.255.255'

dev=lo:1

rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null

service httpd start &> /dev/null && echo "The httpd Server is Ready!"

echo "

`hostname`

" > /var/www/html/index.html

case $1 in

start)

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig $dev $vip netmask $mask #broadcast $vip up

#route add -host $vip dev $dev

echo "The RS Server is Ready!"

;;

stop)

ifconfig $dev down

echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 0> /proc/sys/net/ipv4/conf/all/arp_announce

echo 0> /proc/sys/net/ipv4/conf/lo/arp_announce

echo "The RS Server is Canceled!"

;;

*)

echo "Usage: $(basename $0) start|stop"

exit 1

;;

esac

执行脚本:

1

[root@lvs1~]#bash lvs_dr_rs.sh start

查看绑定结果:

nginx、php、mysql、以及后端存储nfs服务器,在实现haproxy时已搭建,详情看上面操作。

只需要将后端nginx服务器C主机和D主机进行修改关联数据库的IP地址,有几个后端服务器,就需要修改几个IP地址。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[root@centos37wordpress]#cd /data/nginx/wordpress/

[root@centos37wordpress]#vim wp-config.php

/** WordPress数据库的名称 */

define('DB_NAME', 'wordpress');

/** MySQL数据库用户名 */

define('DB_USER', 'wordpress');

/** MySQL数据库密码 */

define('DB_PASSWORD', 'centos');

/** MySQL主机 */

define('DB_HOST', '192.168.37.47'); 修改为后端数据库的IP地址

/** 创建数据表时默认的文字编码 */

define('DB_CHARSET', 'utf8');

下来我们来验证下LVS作为负载均衡调度器进行转发效果:

将本地windows的hosts文件的VIP地址进行域名解析:

访问wordpress地址,此时就可以进行访问:

浏览448 评论0
返回
目录
返回
首页
HAProxy之三----keepalived配合脚本对HAProxy、ping网关实现高可用检测 HAProxy之一----HAPproxy配置参数详解