【群集】——keepalived+LVS-DR+GFS+zabbix

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 【群集】——keepalived+LVS-DR+GFS+zabbix

拓扑图

案例实施

1、环境配置

       环境要求:如图所示配置IP地址,所有主机桥接到vmnet1,并关闭防火墙和Selinux。GFS两台服务器分别添加两块20G的磁盘,客户端使用宿主机。

1.1、配置IP地址

       关于IP的配置这里以web1为例,只有web1和web2添加两块网卡,相对比其他服务器的配置只是多一块需要配置的网卡,其他服务器正常配置IP即可。

1. [root@web1 ~]# systemctl stop firewalld
2. [root@web1 ~]# systemctl disable firewalld
3. [root@web1 ~]# setenforce 0
4. [root@web1 ~]# cd /etc/sysconfig/network-scripts/
5. [root@web1 network-scripts]# vim ifcfg-ens33
6. ......省略部分内容
7. BOOTPROTO=static
8. NAME=ens33
9. DEVICE=ens33
10. ONBOOT=yes
11. IPADDR=192.168.1.3
12. NETMASK=255.255.255.0
13. [root@web1 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
14. [root@web1 network-scripts]# vim ifcfg-ens36
15. ......省略部分内容
16. BOOTPROTO=static
17. NAME=ens36
18. DEVICE=ens36
19. ONBOOT=yes
20. IPADDR=200.0.0.3
21. NETMASK=255.255.255.0
22. [root@web1 network-scripts]# systemctl restart network

1.2、GFS添加磁盘

       关于磁盘可以开机前添加,会自动识别磁盘。若开机后添加可以执行以下命令识别磁盘。

1. echo "- - -" >> /sys/class/scsi_host/host0/scan
2. echo "- - -" >> /sys/class/scsi_host/host1/scan
3. echo "- - -" >> /sys/class/scsi_host/host2/scan

       到目前的配置,web1和web2可以ping通全网,而公网和私网则不能相互ping通。GFS1和GFS2每台服务器上都有一块sdb磁盘。

2、Keepalived

       搭建Keepalived实现Lvs的双机热备。本次使用yum方式安装keepalived和ipvsadm管理工具。LVS1和LVS2都需要那种,这里以LVS1为例。

1. [root@lvs1 ~]# yum -y install keepalived ipvsadm
2. [root@lvs1 ~]# systemctl enable keepalived

2.1、配置主调度器

1. [root@lvs1 ~]# cd /etc/keepalived/
2. [root@lvs1 keepalived]# cp keepalived.conf keepalived.conf.back
3. [root@lvs1 keepalived]# vim keepalived.conf
4. ! Configuration File for keepalived
5. 
6. global_defs {
7.  ......省略部分内容
8.    router_id LVS1           //主调度器名称
9. }
10.  
11. vrrp_instance VI_1 {
12.     state MASTER            //主调度器的热备状态
13.    interface ens33         //修改接口网卡
14.     virtual_router_id 51
15.     priority 100
16.     advert_int 1
17.     authentication {
18.         auth_type PASS
19.         auth_pass 1111
20.     }
21.     virtual_ipaddress {
22.        200.0.0.100         //配置漂移地址
23.     }
24. }   
25. [root@lvs1 keepalived]# systemctl start keepalived
26. [root@lvs1 keepalived]# ip addr show dev ens33          //查看漂移地址
27. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
28.     link/ether 00:0c:29:16:da:97 brd ff:ff:ff:ff:ff:ff
29.     inet 200.0.0.1/24 brd 200.0.0.255 scope global ens33
30.       valid_lft forever preferred_lft forever
31.     inet 200.0.0.100/32 scope global ens33              //此时漂移地址在主调度器上
32.       valid_lft forever preferred_lft forever
33.     inet6 fe80::c3cf:e745:3647:394a/64 scope link 
34.       valid_lft forever preferred_lft forever

2.2、配置备份调度器

1. [root@lvs2 ~]# cd /etc/keepalived/
2. [root@lvs2 keepalived]# cp keepalived.conf keepalived.conf.bak
3. [root@lvs2 keepalived]# vim keepalived.conf
4. ! Configuration File for keepalived
5. 
6. global_defs {
7. ......省略部分内容
8.    router_id LVS2               //备份调度器名称
9. }  
10. 
11. vrrp_instance VI_1 {
12.     state BACKUP                //备份调度器的热备状态
13.    interface ens33             //修改接口网卡
14.     virtual_router_id 51
15.     priority 99                 //修改优先级别
16.     advert_int 1
17.     authentication {
18.         auth_type PASS
19.         auth_pass 1111
20.     }
21.     virtual_ipaddress {
22.        200.0.0.100             //配置漂移地址
23.     }
24. }  
25. [root@lvs2 keepalived]# systemctl start keepalived
26. [root@lvs2 keepalived]# ip addr show dev ens33              //查看漂移地址
27. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
28.     link/ether 00:0c:29:55:f7:8d brd ff:ff:ff:ff:ff:ff
29.     inet 200.0.0.2/24 brd 200.0.0.255 scope global ens33
30.       valid_lft forever preferred_lft forever
31.     inet6 fe80::15ae:efbc:5794:874b/64 scope link 
32.       valid_lft forever preferred_lft forever

       备份服务器仍处于备份状态,因此备份服务器不会为ens33接口添加VIP地址。当主服务器失效时,VIP地址才会过来,达到了双机热备的功能。

3、LVS-DR

3.1、负载均衡

       两台LVS都需要配置选项3.1中的内容(关闭ICMP重定向,配置策略)。

3.1.1、关闭icmp重定向

1. [root@lvs1 ~]# vim /etc/sysctl.conf
2. net.ipv4.conf.all.send_redirects = 0
3. net.ipv4.conf.default.send_redirects = 0
4. net.ipv4.conf.ens33.send_redirects = 0
5. [root@lvs1 ~]# sysctl -p

3.1.2、配置负载分配策略

1. [root@lvs1 ~]# ipvsadm -C               //清除原有策略
2. [root@lvs1 ~]# ipvsadm -A -t 200.0.0.100:80 -s rr
3. [root@lvs1 ~]# ipvsadm -a -t 200.0.0.100:80 -r 200.0.0.3 -g -w 1
4. [root@lvs1 ~]# ipvsadm -a -t 200.0.0.100:80 -r 200.0.0.4 -g -w 1
5. [root@lvs1 ~]# ipvsadm-save             //保存策略
6. -A -t lvs1:http -s rr
7. -a -t lvs1:http -r 200.0.0.3:http -g -w 1
8. -a -t lvs1:http -r 200.0.0.4:http -g -w 1
9. [root@lvs1 ~]# systemctl enable ipvsadm

3.2、配置主调度器

       通过配置文件添加两台web节点。

1. [root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
2. vrrp_instance VI_1 {            //在vrrp配置模块下面添加节点
3. ......省略部分内容
4.     virtual_ipaddress {
5.        200.0.0.100
6.     }
7. }
8. ......省略部分内容
9. virtual_server 200.0.0.100 80 {             //以下内容需要修改添加节点信息
10.     delay_loop 15
11.     lb_algo rr 
12.     lb_kind DR 
13.     protocol TCP
14.    
15.     real_server 200.0.0.3 80 {
16.         weight 1
17.         TCP_CHECK {
18.             connect_port 80
19.             connect_timeout 3
20.             nb_get_retry 3
21.             delay_before_retry 4
22.         }   
23.     }
24.     real_server 200.0.0.4 80 {
25.         weight 1
26.         TCP_CHECK {
27.             connect_port 80
28.             connect_timeout 3
29.             nb_get_retry 3
30.             delay_before_retry 4
31.         }
32.     }
33. }
34. [root@lvs1 ~]# systemctl restart keepalived

3.3、配置备份调度器

       相同的方法配置完主调度器后,接着配置备份调度器。

1. [root@lvs2 ~]# vim /etc/keepalived/keepalived.conf
2. vrrp_instance VI_1 {                        //在vrrp配置模块下面添加节点
3. ......省略部分内容
4.     virtual_ipaddress {
5.        200.0.0.100
6.     }
7. }
8. ......省略部分内容
9. virtual_server 200.0.0.100 80 {             //以下内容需要修改添加节点信息
10.     delay_loop 15
11.     lb_algo rr 
12.     lb_kind DR 
13.     protocol TCP
14.    
15.     real_server 200.0.0.3 80 {
16.         weight 1
17.         TCP_CHECK {
18.             connect_port 80
19.             connect_timeout 3
20.             nb_get_retry 3
21.             delay_before_retry 4
22.         }   
23.     }
24.     real_server 200.0.0.4 80 {
25.         weight 1
26.         TCP_CHECK {
27.             connect_port 80
28.             connect_timeout 3
29.             nb_get_retry 3
30.             delay_before_retry 4
31.         }
32.     }
33. }
34. [root@lvs2 ~]# systemctl restart keepalived

4、GFS

4.1、web端

       GFS的配置如下表所示,两台服务器实现复制卷,复制卷的名称为share。

       在两个web服务器将share复制卷挂载到web服务器的/var/www/html下。

IP 主机名 挂载盘 挂载目录
192.168.1.1 gfs1 /dev/sdb(20G) /b3
192.168.1.2 gfs2 /dev/sdb(20G) /b3

4.1.1、web配置VIP

       每个web服务器上都需要配置漂移地址(VIP)。

1. [root@web1 ~]# cd /etc/sysconfig/network-scripts/
2. [root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
3. [root@web1 network-scripts]# vim ifcfg-lo:0
4. DEVICE=lo:0
5. IPADDR=200.0.0.100
6. NETMASK=255.255.255.255
7. ONBOOT=yes
8. [root@web1 network-scripts]# ifup lo:0
9. [root@web1 network-scripts]# ifconfig lo:0
10. lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
11.         inet 200.0.0.100  netmask 255.255.255.255
12.         loop  txqueuelen 1  (Local Loopback)
13. 
14. [root@web1 network-scripts]# vim /etc/rc.local
15. ......省略部分内容
16. /sbin/route add -host 200.0.0.100 dev lo:0          //添加一条路由
17. [root@web1 network-scripts]# route add -host 200.0.0.100 dev lo:0

4.1.2、关闭部分arp应答

1. [root@web1 ~]# vim /etc/sysctl.conf
2. net.ipv4.conf.all.arp_ignore = 1
3. net.ipv4.conf.all.arp_announce = 2
4. net.ipv4.conf.default.arp_ignore = 1
5. net.ipv4.conf.default.arp_announce = 2
6. net.ipv4.conf.lo.arp_ignore = 1
7. net.ipv4.conf.lo.arp_announce = 2
8. [root@web1 ~]# sysctl -p

4.1.3、配置httpd

1. [root@web1 ~]# yum -y install httpd
2. [root@web1 ~]# echo "111" > /var/www/html/index.html 
3. [root@web1 ~]# systemctl start httpd
4. [root@web1 ~]# systemctl enable httpd

4.2、配置GFS端

       两台GFS服务器都需要配置,以下gfs1和gfs2配置相同,我以gfs1为例,gfs2相反配置即可。

1. [root@gfs1 ~]# vim /etc/hosts                   //GFS本地节点解析
2. 192.168.1.1 node1
3. 192.168.1.2 node2
4. [root@gfs1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
5. [root@gfs1 ~]# systemctl start glusterd
6. [root@gfs1 ~]# systemctl enable glusterd
7. [root@gfs1 ~]# gluster peer probe node1         //本身在gfs1上操作,所以node1也可以不执行
8. peer probe: success. Probe on localhost not needed
9. [root@gfs1 ~]# gluster peer probe node2
10. peer probe: success.
11. [root@gfs1 ~]# gluster peer status              //查看GFS群集状态
12. Number of Peers: 1
13. 
14. Hostname: node2
15. Uuid: 16bc8386-0168-4c21-8ed3-e762f1bd8c77
16. State: Peer in Cluster (Connected)

4.2.1、创建复制卷

       使用fdisk命令创建一个20G的磁盘空间为sdb1并格式化。两台GFS服务器创建成复制卷,卷名为share。

1. [root@gfs1 ~]# fdisk /dev/sdb
2. n→p→回车→回车→回车→w保存退出
3. [root@gfs1 ~]# mkfs.xfs /dev/sdb1
4. [root@gfs1 ~]# gluster volume create share replica 2 node1:/b1 node2:/b1 force
5. volume create: share: success: please start the volume to access data
6. [root@gfs1 ~]# gluster volume start share
7. volume start: share: success

4.2.2、web挂载复制卷

web1配置如下:

1. [root@web1 ~]# yum -y install glusterfs glusterfs-fuse
2. [root@web1 ~]# vim /etc/hosts
3. 192.168.1.1 node1
4. 192.168.1.2 node2
5. [root@web1 ~]# mount -t glusterfs node1:share /var/www/html/
6. [root@web1 ~]# df -h
7. 文件系统             容量  已用  可用 已用% 挂载点
8. /dev/mapper/cl-root   17G  3.8G   14G   23% /
9. devtmpfs             473M     0  473M    0% /dev
10. tmpfs                489M  144K  489M    1% /dev/shm
11. tmpfs                489M  7.1M  482M    2% /run
12. tmpfs                489M     0  489M    0% /sys/fs/cgroup
13. /dev/sda1           1014M  173M  842M   18% /boot
14. tmpfs                 98M   12K   98M    1% /run/user/0
15. /dev/sr0              53M   53M     0  100% /media
16. node1:share           17G  3.8G   14G   23% /var/www/html

web2配置如下:

1. [root@web2 ~]# yum -y install glusterfs glusterfs-fuse
2. [root@web2 ~]# vim /etc/hosts
3. 192.168.1.1 node1
4. 192.168.1.2 node2
5. [root@web2 ~]# mount -t glusterfs node1:share /var/www/html/
6. [root@web2 ~]# df -hT
7. 文件系统            类型            容量  已用  可用 已用% 挂载点
8. /dev/mapper/cl-root xfs              17G  3.9G   14G   23% /
9. devtmpfs            devtmpfs        473M     0  473M    0% /dev
10. tmpfs               tmpfs           489M  144K  489M    1% /dev/shm
11. tmpfs               tmpfs           489M  7.1M  482M    2% /run
12. tmpfs               tmpfs           489M     0  489M    0% /sys/fs/cgroup
13. /dev/sda1           xfs            1014M  173M  842M   18% /boot
14. tmpfs               tmpfs            98M   12K   98M    1% /run/user/0
15. /dev/sr0            iso9660          53M   53M     0  100% /media
16. node1:share         fuse.glusterfs   17G  3.8G   14G   23% /var/www/html

       到目前为止,复制卷就已经创建完了。下一步需要测试了,在挂载盘中创建文件,查看网页内容。

4.2.3、测试

       在上面挂了盘以后,之前的内容就已经消失了,所以还得从新创建一个新的网页内容。在web1上创建一个内容,内容会同步到web2上,客户端查看的内容就会是后面创建的内容。

1. [root@web1 ~]# echo "666" > /var/www/html/index.html
2. ......web2查看网页内容
3. [root@web2 ~]# cat /var/www/html/index.html 
4. 666

5、zabbix

       无监控不运维,最后搭建Zabbix服务器分别监控LVS服务器和web服务器的性能。

5.1、安装

5.1.1、创建zabbix源

       挂盘后将文件复制到创建的目录中,yum仓库目录指向zabbix。

1. [root@zabbix ~]# mkdir /zabbix
2. [root@zabbix ~]# cp /media/* /zabbix
3. [root@zabbix ~]# cd /zabbix
4. [root@zabbix zabbix]# createrepo .
5. [root@zabbix ~]# rm -rf /etc/yum.repos.d/*
6. [root@zabbix ~]# vim /etc/yum.repos.d/a.repo
7. [a]
8. name=a
9. baseurl=file:///zabbix
10. gpgcheck=0

5.1.2、安装MariaDB

1. [root@zabbix ~]# yum -y install mariadb-server mariadb
2. [root@zabbix ~]# systemctl start mariadb
3. [root@zabbix ~]# systemctl enable mariadb
4. [root@zabbix ~]# mysqladmin -u root password "123"

5.1.3、安装Zabbix

1. [root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
2. [root@zabbix ~]# mysql -u root -p
3. Enter password:             //输入密码
4. MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
5. Query OK, 1 row affected (0.00 sec)
6. MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by "456";
7. Query OK, 0 rows affected (0.00 sec)

5.1.4、配置zabbix

1. [root@zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql-3.4.1/create.sql.gz | mysql -uzabbix -p zabbix 
2. Enter password: 
3. [root@zabbix ~]# cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.bak
4. [root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf
5. DBHost=localhost
6. DBPassword=456
7. [root@zabbix ~]# cp /etc/zabbix/zabbix_agentd.conf /etc/zabbix/.zabbix_agent.conf.bak
8. [root@zabbix ~]# vim /etc/zabbix/zabbix_agentd.conf 
9. Server=200.0.0.10                       //客户端被动等待指定服务器来查询数据
10. ServerActive=200.0.0.10                 //客户端主动提交数据到指定的服务器
11. Hostname=Zabbix server                  //主机名称
12. [root@zabbix ~]# systemctl start zabbix-server
13. [root@zabbix ~]# systemctl enable zabbix-server
14. Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
15. [root@zabbix ~]# systemctl start zabbix-agent
16. [root@zabbix ~]# systemctl enable zabbix-agent
17. Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
18. [root@zabbix ~]# systemctl start httpd
19. [root@zabbix ~]# systemctl enable httpd
20. Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
21. [root@zabbix ~]# vim /etc/httpd/conf.d/zabbix.conf
22.         php_value date.timezone Asia/Shanghai
23. [root@zabbix ~]# systemctl restart httpd

5.2 、zabbix界面优化

       浏览器输入http://200.0.0.10/zabbix,用户名默认为Admin密码为zabbix,登录即可见到默认页面。为了页面的美观可以修改中文字体,修改乱码等。

5.3、监控LVS

       被监控端安装软件,配置基本相同,这里先只监控LVS主服务器了。

1. [root@lvs1 ~]# mount /dev/cdrom /media
2. mount: /dev/sr0 写保护,将以只读方式挂载
3. [root@lvs1 ~]#  rpm -ivh /media/zabbix-agent-3.2.6-1.el7.x86_64.rpm 
4. 警告:/media/zabbix-agent-3.2.6-1.el7.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY
5. 准备中...                          ################################# [100%]
6. 正在升级/安装...
7.   1:zabbix-agent-3.2.6-1.el7         ################################# [100%]

       被监控端修改配置文件

1. [root@lvs1 ~]# vim /etc/zabbix/zabbix_agentd.conf
2. Hostname=LVS-01
3. ServerActive=200.0.0.1
4. Server=200.0.0.1
5. [root@lvs1 ~]# systemctl start zabbix-agent
6. [root@lvs1 ~]# systemctl enable zabbix-agent
7. Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
8. [root@lvs1 ~]# netstat -anpt | grep agent
9. tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      3764/zabbix_agentd  
10. tcp6       0      0 :::10050                :::*                    LISTEN      3764/zabbix_agentd

5.3.1、web界面配置

       新建主机,监控LVS。查看”检测中“→“图形”选择监控的内容就可以看到监控的选项了,还可以自定义添加监控内容。

查看验证

5.4、监控web

       被监控端安装软件,配置基本相同,这里只监控web2了。

1. [root@web2 ~]# rpm -ivh /media/zabbix-agent-3.2.6-1.el7.x86_64.rpm 
2. 警告:/media/zabbix-agent-3.2.6-1.el7.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY
3. 准备中...                          ################################# [100%]
4. 正在升级/安装...
5.   1:zabbix-agent-3.2.6-1.el7         ################################# [100%]
6. [root@web2 ~]# vim /etc/zabbix/zabbix_agentd.conf
7. Hostname=web2
8. ServerActive=200.0.0.4
9. Server=200.0.0.4
10. [root@web2 ~]# systemctl start zabbix-agent
11. [root@web2 ~]# systemctl enable zabbix-agent
12. [root@web2 ~]# netstat -antp | grep agent
13. tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      49560/zabbix_agentd 
14. tcp6       0      0 :::10050                :::*                    LISTEN      49560/zabbix_agentd

5.4.1、web界面配置

       新建主机,监控web。查看”检测中“→“图形”选择监控的内容就可以看到监控的选项了,还可以自定义添加监控内容。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 负载均衡 应用服务中间件
LVS负载均衡群集——NAT模式实操
LVS负载均衡群集——NAT模式实操
752 0
|
存储 负载均衡 网络协议
LVS负载均衡群集—DR直接路由
LVS负载均衡群集—DR直接路由
105 0
|
网络协议 调度
|
负载均衡 网络协议 调度
|
存储 负载均衡 网络协议
LVS负载均衡群集
LVS负载均衡群集
191 0
|
SQL 监控 负载均衡
群集综合LVS-DR实施
群集综合LVS-DR实施
74 0
|
存储 负载均衡 算法
Linux--LVS负载均衡群集
Linux--LVS负载均衡群集
112 0
|
负载均衡 Linux 调度
使用keepalived(HA)+LVS实现高可用负载均衡群集,调度器的双机热备
使用keepalived(HA)+LVS实现高可用负载均衡群集,调度器的双机热备
189 1
使用keepalived(HA)+LVS实现高可用负载均衡群集,调度器的双机热备
|
存储 负载均衡 Linux
LVS+Keepalived高可用群集
LVS+Keepalived高可用群集
LVS+Keepalived高可用群集
|
存储 负载均衡 并行计算
LVS负载均衡群集——NAT模式实例
LVS负载均衡群集——NAT模式实例
LVS负载均衡群集——NAT模式实例
下一篇
无影云桌面