一、用keepalived實現nginx與lvs的高可用集群
keepalived+nginx高可用
環境:
node1: 192.168.31.233 keepalived+nginx master
node2: 192.168.31.72 keepalived+nginx slave
node3: 192.168.31.233 web1
node4: 192.168.31.26 web2
VIP: 192.168.31.100
1、node1,node2安裝 keepalived nginx軟件包
yum -y install nginx keepalived
2、node3,node4安裝httpd服務,并配置網頁
node3
yum -y install httpd
echo server3 >/var/www/html/index.html
systemctl start httpd.service
訪問測試
node4
yum -y install httpd
echo server4 >/var/www/html/index.html
systemctl start httpd.service
訪問測試
3、配置nginx負載均衡 <node1>
在http段內加入
upstream webserver {
server 192.168.31.26;
server 192.168.31.23;
}
在server段location內加入
proxy_pass http://webserver;
proxy_set_header X-Real-IP $remote_addr;
4、配置keepalived <node1>
global_defs {
notification_email {
root@localhost.com
}
notification_email_from admin@localhost.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #主服務器
interface ens33
virtual_router_id 51
priority 100 #優先級
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.31.100 #虛擬VIP,客戶段訪問的IP
}
}
5、拷貝nginx和keepalived的配置文件到node2服務器上,并修改keepalived的配置
scp /etc/nginx/nginx.conf 192.168.31.72:/etc/nginx/
scp /etc/keepalived/keepalived.conf 192.168.31.72:/etc/keepalived/
vim /etc/keepalived/keepalived.conf
state BACKUP #改為從服務器
6、啟動nginx、keepalived服務,并查看80端口是否起來
nginx
systemctl start keepalived.service
7、測試
http://192.168.31.100 通過訪問VIP能瀏覽到后端的網頁
可以看到VIP綁定到node1的網卡上
模擬node1節點故障,可以看到VIP轉移到node2節點上,訪問后端網頁正常(省略…)
keepalived+lvs高可用
環境:
node1: 192.168.31.233 keepalived+lvs-DR master
node2: 192.168.31.72 keepalived+lvs-DR slave
node3: 192.168.31.233 web1
node4: 192.168.31.26 web2
VIP: 192.168.31.100
client: 192.168.31.172
1、node1,node2安裝keepalived,ipvsadm軟件包
yum -y install keepalived ipvsadm
2、修改node1上的keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost.com
}
notification_email_from admin@localhost.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #主服務器
interface ens33
virtual_router_id 51
priority 100 #優先級
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.31.100
}
}
virtual_server 192.168.31.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
sorry_server 127.0.0.1 80
persistence_timeout 50
protocol TCP
real_server 192.168.31.26 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.31.23 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3、修改node2上的keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost.com
}
notification_email_from admin@localhost.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP #從服務器
interface ens33
virtual_router_id 51
priority 90 #優先級
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.31.100
}
}
virtual_server 192.168.31.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
sorry_server 127.0.0.1 80
persistence_timeout 50
protocol TCP
real_server 192.168.31.26 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.31.23 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
4、啟動node1,node2上的keepalived
systemctl start keepalived
VIP綁定到node1主服務器上
5、node3,node4安裝httpd,并創建啟動LVS-DR模式腳本
yum -y install httpd
vim realserver.sh
#!/bin/bash
VIP=192.168.31.100
. /etc/rc.d/init.d/functions
case “$1” in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce
echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo “RealServer Start OK”
;;
stop)
ifconfig lo:0 down
route del $VIP >/dev/null 2>&1
echo “0” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “0” >/proc/sys/net/ipv4/conf/lo/arp_announce
echo “0” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “0” >/proc/sys/net/ipv4/conf/all/arp_announce
echo “RealServer Stoped”
;;
*)
echo “Usage: $0 {start|stop}”
exit 1
esac
exit 0
bash realserver.sh start
6、客戶端訪問測試
for i in `seq 100`;do curl 192.168.31.100;sleep 1;done
<h1>RS3</h1>
<h1>RS4</h1>
<h1>RS3</h1>
<h1>RS4</h1>
<h1>RS3</h1>
<h1>RS4</h1>
###主服務器宕機時,備機可正常提供服務,訪問正常###
for i in `seq 100`;do curl 192.168.31.100;sleep 1;done
<h1>RS3</h1>
<h1>RS4</h1>
<h1>RS3</h1>
<h1>RS4</h1>
<h1>RS3</h1>
<h1>RS4</h1>
二、授權test用戶通過任意主機連接當前mysql,但每秒中最大查詢次數不得超過5次;此賬戶的同時連接次數不得超過3次
GRANT USAGE ON *.* TO test@’%’ WITH MAX_QUERIES_PER_HOUR 5;
GRANT USAGE ON *.* TO test@’%’ WITH MAX_USER_CONNECTIONS 3;
三、導入hellodb.sql生成數據庫,完成以下練習:
(1)在students表中,查詢年齡大于25歲,且為男性的同學的名字和年齡;
+————–+—–+
| Name | Age |
+————–+—–+
| Xie Yanke | 53 |
| Ding Dian | 32 |
| Yu Yutong | 26 |
| Shi Qing | 46 |
| Tian Boguang | 33 |
| Xu Xian | 27 |
| Sun Dasheng | 100 |
+————–+—–+
(2)以ClassID為分組依據,顯示每組的平均年齡;
> SELECT ClassID,avg(age) FROM students GROUP BY ClassID;
+———+———-+
| ClassID | avg(age) |
+———+———-+
| NULL | 63.5000 |
| 1 | 20.5000 |
| 2 | 36.0000 |
| 3 | 20.2500 |
| 4 | 24.7500 |
| 5 | 46.0000 |
| 6 | 20.7500 |
| 7 | 19.6667 |
+———+———-+
(3) 顯示第2題中平均年齡大于30的分組及平均年齡;
> SELECT ClassID,avg(age) FROM students GROUP BY ClassID HAVING avg(age)>30;
+———+———-+
| ClassID | avg(age) |
+———+———-+
| NULL | 63.5000 |
| 2 | 36.0000 |
| 5 | 46.0000 |
+———+———-+
(4) 顯示以L開頭的名字的同學的信息;
> SELECT * FROM students WHERE Name LIKE ‘L%’;
+——-+————-+—–+——–+———+———–+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+——-+————-+—–+——–+———+———–+
| 8 | Lin Daiyu | 17 | F | 7 | NULL |
| 14 | Lu Wushuang | 17 | F | 3 | NULL |
| 17 | Lin Chong | 25 | M | 4 | NULL |
+——-+————-+—–+——–+———+———–+
(5) 顯示TeacherID非空的同學的相關信息;
> SELECT * FROM students WHERE TeacherID IS NOT NULL;
+——-+————-+—–+——–+———+———–+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+——-+————-+—–+——–+———+———–+
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |
| 2 | Shi Potian | 22 | M | 1 | 7 |
| 3 | Xie Yanke | 53 | M | 2 | 16 |
| 4 | Ding Dian | 32 | M | 4 | 4 |
| 5 | Yu Yutong | 26 | M | 3 | 1 |
+——-+————-+—–+——–+———+———–+
(6) 以年齡排序后,顯示年齡最大的前10位同學的信息;
> SELECT * FROM students ORDER BY Age DESC LIMIT 10;
+——-+————–+—–+——–+———+———–+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+——-+————–+—–+——–+———+———–+
| 25 | Sun Dasheng | 100 | M | NULL | NULL |
| 3 | Xie Yanke | 53 | M | 2 | 16 |
| 6 | Shi Qing | 46 | M | 5 | NULL |
| 13 | Tian Boguang | 33 | M | 2 | NULL |
| 4 | Ding Dian | 32 | M | 4 | 4 |
| 24 | Xu Xian | 27 | M | NULL | NULL |
| 5 | Yu Yutong | 26 | M | 3 | 1 |
| 17 | Lin Chong | 25 | M | 4 | NULL |
| 23 | Ma Chao | 23 | M | 4 | NULL |
| 18 | Hua Rong | 23 | M | 7 | NULL |
+——-+————–+—–+——–+———+———–+
(7) 查詢年齡大于等于20歲,小于等于25歲的同學的信息;用三種方法;
方法一:
> SELECT * FROM students WHERE Age>=20 AND Age<=25;
+——-+—————+—–+——–+———+———–+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+——-+—————+—–+——–+———+———–+
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |
| 2 | Shi Potian | 22 | M | 1 | 7 |
| 9 | Ren Yingying | 20 | F | 6 | NULL |
| 11 | Yuan Chengzhi | 23 | M | 6 | NULL |
| 16 | Xu Zhu | 21 | M | 1 | NULL |
| 17 | Lin Chong | 25 | M | 4 | NULL |
| 18 | Hua Rong | 23 | M | 7 | NULL |
| 21 | Huang Yueying | 22 | F | 6 | NULL |
| 22 | Xiao Qiao | 20 | F | 1 | NULL |
| 23 | Ma Chao | 23 | M | 4 | NULL |
+——-+—————+—–+——–+———+———–+
方法二:
> SELECT * FROM students WHERE Age BETWEEN 20 AND 25;
+——-+—————+—–+——–+———+———–+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+——-+—————+—–+——–+———+———–+
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |
| 2 | Shi Potian | 22 | M | 1 | 7 |
| 9 | Ren Yingying | 20 | F | 6 | NULL |
| 11 | Yuan Chengzhi | 23 | M | 6 | NULL |
| 16 | Xu Zhu | 21 | M | 1 | NULL |
| 17 | Lin Chong | 25 | M | 4 | NULL |
| 18 | Hua Rong | 23 | M | 7 | NULL |
| 21 | Huang Yueying | 22 | F | 6 | NULL |
| 22 | Xiao Qiao | 20 | F | 1 | NULL |
| 23 | Ma Chao | 23 | M | 4 | NULL |
+——-+—————+—–+——–+———+———–+
方法三:
> SELECT * FROM students WHERE Age IN (20,21,22,23,24,25);
+——-+—————+—–+——–+———+———–+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+——-+—————+—–+——–+———+———–+
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |
| 2 | Shi Potian | 22 | M | 1 | 7 |
| 9 | Ren Yingying | 20 | F | 6 | NULL |
| 11 | Yuan Chengzhi | 23 | M | 6 | NULL |
| 16 | Xu Zhu | 21 | M | 1 | NULL |
| 17 | Lin Chong | 25 | M | 4 | NULL |
| 18 | Hua Rong | 23 | M | 7 | NULL |
| 21 | Huang Yueying | 22 | F | 6 | NULL |
| 22 | Xiao Qiao | 20 | F | 1 | NULL |
| 23 | Ma Chao | 23 | M | 4 | NULL |
+——-+—————+—–+——–+———+———–+
(8) 顯示前5位同學的姓名、課程及成績;
> SELECT st.Name,co.Course,sc.Score FROM students st,courses co,scores sc WHERE st.StuID=sc.StuID and sc.CourseID=co.CourseID LIMIT 5;
+————-+—————-+——-+
| Name | Course | Score |
+————-+—————-+——-+
| Shi Zhongyu | Kuihua Baodian | 77 |
| Shi Zhongyu | Weituo Zhang | 93 |
| Shi Potian | Kuihua Baodian | 47 |
| Shi Potian | Daiyu Zanghua | 97 |
| Xie Yanke | Kuihua Baodian | 88 |
+————-+—————-+——-+
(9) 顯示其成績高于80的同學的名稱及課程;
> SELECT st.Name,co.Course FROM students st,courses co,scores sc WHERE st.StuID=sc.StuID and sc.CourseID=co.CourseID AND sc.Score>80;
+————-+—————-+
| Name | Course |
+————-+—————-+
| Shi Zhongyu | Weituo Zhang |
| Shi Potian | Daiyu Zanghua |
| Xie Yanke | Kuihua Baodian |
| Ding Dian | Kuihua Baodian |
| Shi Qing | Hamo Gong |
| Xi Ren | Hamo Gong |
| Xi Ren | Dagou Bangfa |
| Lin Daiyu | Jinshe Jianfa |
+————-+—————-+
(10) 求前8位同學每位同學自己兩門課的平均成績,并按降序排列;
> SELECT st.Name,sc2.avg_score FROM (SELECT StuID,avg(Score) AS avg_score FROM scores GROUP BY StuID) AS sc2,students st where st.StuID=sc2.StuID ORDER BY avg_score DESC LIMIT 8;
+————-+———–+
| Name | avg_score |
+————-+———–+
| Shi Qing | 96.0000 |
| Shi Zhongyu | 85.0000 |
| Xi Ren | 84.5000 |
| Xie Yanke | 81.5000 |
| Ding Dian | 80.0000 |
| Lin Daiyu | 75.0000 |
| Shi Potian | 72.0000 |
| Yu Yutong | 51.0000 |
+————-+———–+
(11) 顯示每門課程課程名稱及學習了這門課的同學的個數;
> SELECT co2.Course,count(co2.StuID) FROM (SELECT co.Course,sc.StuID FROM courses co,scores sc WHERE co.CourseID=sc.CourseID) AS co2 GROUP BY co2.Course;
+—————-+——————+
| Course | count(co2.StuID) |
+—————-+——————+
| Dagou Bangfa | 2 |
| Daiyu Zanghua | 2 |
| Hamo Gong | 3 |
| Jinshe Jianfa | 1 |
| Kuihua Baodian | 4 |
| Taiji Quan | 1 |
| Weituo Zhang | 2 |
+—————-+—————–
原創文章,作者:N27_Vicent,如若轉載,請注明出處:http://www.www58058.com/82057
總體還不錯。
做類似的實驗,建議給出拓撲圖和實驗的效果會讓閱讀者更好的了解博文內容;繼續加油~