拓扑图
案例实施
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。查看”检测中“→“图形”选择监控的内容就可以看到监控的选项了,还可以自定义添加监控内容。