首先要准备四台虚拟机
两台RIP一台VIP一台客户端
RIP的网关一定要指定到VIP同网段地址上
然后就是在rip上安装httpd然后更改网址首页为
RS1 server 192.168.26.100
RS2 server 192.168.26.101
两台都要安装和更改
VIP机器上,需要安装ipvsadm ,然后地址是RIP设置的网关,还要同网段
然后再加一个网卡和客户端同一网段
客户端网段和新添加网卡 网段为172.16.1.0/24
安装完ipvsadm之后,我们就可以添加机器了
ipvsadm -A -t 172.16.1.15:80 -s rr
ipvsadm -a -t 172.16.1.15:80 -r 192.168.26.100 -m
ipvsadm -a -t 172.16.1.15:80 -r 192.168.26.101 -m
我们也可以吧这些命令给保存起来
ipvsadm -Sn > /etc/sysconfig/ipvsadm
后面这个地址是调度规则的文件可以保存到这里面
当然,我们做到这一步可以测试下能不能访问,访问的时候需要在客户端上访问
[root@localhost ~]# curl 172.16.1.15
RS2 server 192.168.26.101
[root@localhost ~]# curl 172.16.1.15
RS1 server 192.168.26.100
[root@localhost ~]# curl 172.16.1.15
RS2 server 192.168.26.101
[root@localhost ~]# curl 172.16.1.15
RS1 server 192.168.26.100
[root@localhost ~]#
当然我们还可以吧规则给清空
ipvsadm -C
然后查看规则
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
发现没有规则
这时候需要导入我们刚刚保存到文件里的配置文件
ipvsadm -R < /etc/sysconfig/ipvsadm
再次查看
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.1.15:80 rr
-> 192.168.26.100:80 Masq 1 0 0
-> 192.168.26.101:80 Masq 1 0 0
发现又回来了
还有一个小技巧
我们刚开始安装ipvsadm是没有启动的
这时候我们给他清除然后在开机自启和启动
[root@localhost ~]# ipvsadm -C
[root@localhost ~]# systemctl enable ipvsadm.service && systemctl start ipvsadm.service
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.1.15:80 rr
-> 192.168.26.100:80 Masq 1 0 0
-> 192.168.26.101:80 Masq 1 0 0
[root@localhost ~]#
发现规则又出现了
调度MYSQL
在RIP两台机子上安装mysql
然后在客户端上安装mysql
RIP上的两台装完需要授权
grant all on *.* to test@'%' identified by '123456';
两台都要做
然后返回lvs服务器上添加
ipvsadm -A -t 172.16.1.15:3306 -s rr
ipvsadm -a -t 172.16.1.15:3306 -r 192.168.26.100 -m
ipvsadm -a -t 172.16.1.15:3306 -r 192.168.26.101 -m
这一步做完,我们要怎么才能验证呢
我们可以把RIP上的两台server_id给修改成他们ip
set global server_id=100;
set global server_id=101;
然后在客户端上查看(客户端上也要安装mysql)
mysql -utest -h 172.16.1.15 -p123456 -e 'select @@server_id'
第一次访问是100 第二次是101
[root@localhost ~]# mysql -utest -h 172.16.1.15 -p123456 -e 'select @@server_id'
+-------------+
| @@server_id |
+-------------+
| 100 |
+-------------+
[root@localhost ~]# mysql -utest -h 172.16.1.15 -p123456 -e 'select @@server_id'
+-------------+
| @@server_id |
+-------------+
| 101 |
+-------------+
[root@localhost ~]# mysql -utest -h 172.16.1.15 -p123456 -e 'select @@server_id'
+-------------+
| @@server_id |
+-------------+
| 100 |
+-------------+
[root@localhost ~]# mysql -utest -h 172.16.1.15 -p123456 -e 'select @@server_id'
+-------------+
| @@server_id |
+-------------+
| 101 |
+-------------+
当我们停止这个服务的时候,ipvsadm会自动保存一份到调度规则文件里面
(适用于没有提前保存到调度配置文件的事故)
我们也可以修改算法
ipvsadm -E -t 172.16.1.15:80 -s wrr
ipvsadm -e -t 172.16.1.15:80 -r 192.168.26.100 -w 3 -m
-m一定不能忘记,要不然,默认就是DR模式
这一步做完可以查看下
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.1.15:80 wrr
-> 192.168.26.100:80 Masq 3 0 1
-> 192.168.26.101:80 Masq 1 0 1
TCP 172.16.1.15:3306 rr
-> 192.168.26.100:3306 Masq 1 0 0
-> 192.168.26.101:3306 Masq 1 0 0
发现100的算法权值变成了3
然后去客户端查看下
[root@localhost ~]# curl 172.16.1.15
RS1 server 192.168.26.100
[root@localhost ~]# curl 172.16.1.15
RS1 server 192.168.26.100
[root@localhost ~]# curl 172.16.1.15
RS1 server 192.168.26.100
[root@localhost ~]# curl 172.16.1.15
RS2 server 192.168.26.101
发现访问100的时候变成了3次,说明之前的修改成功了
nat也是支持端口映射的
我们也可以吧100地址的端口改为8080
首先要把100里的httpd配置文件吧Linsten80改为8080
然后重启httpd服务
回到lvs机器上,在修改之前需要吧原来100:80端口给删除掉然后再添加
ipvsadm -d -t 172.16.1.15:80 -r 192.168.26.100
ipvsadm -a -t 172.16.1.15:80 -r 192.168.26.100:8080 -w 3 -m
添加的时候端口号就是得8080了,要不然访问不了,模式也要指定
查看一下
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.1.15:80 wrr
-> 192.168.26.100:8080 Masq 3 0 0
-> 192.168.26.101:80 Masq 1 0 0
TCP 172.16.1.15:3306 rr
-> 192.168.26.100:3306 Masq 1 0 0
-> 192.168.26.101:3306 Masq 1 0 0
发现8080已经添加进来了,进客户端测试下
[root@localhost ~]# curl 172.16.1.15
RS2 server 192.168.26.101
[root@localhost ~]# curl 172.16.1.15
RS1 server 192.168.26.100
[root@localhost ~]# curl 172.16.1.15
RS1 server 192.168.26.100
[root@localhost ~]# curl 172.16.1.15
RS1 server 192.168.26.100
[root@localhost ~]# curl 172.16.1.15
RS2 server 192.168.26.101
最后要说一下,当我们stop ipvsadm时候,他会自动执行下面这个命令
ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm"
这个命令会保存你调度规则的命令