CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN Keepaliving+HAProxy này triển khai các cấu hình cân bằng tải có tính sẵn sàng cao của MySQL do tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.
Giữ nguyên trạng thái sống.
Vì mysqlcluster được sử dụng trong môi trường sản xuất nên cần phải đạt được cân bằng tải có tính sẵn sàng cao và keepaliving+haproxy được cung cấp ở đây để đạt được điều đó.
Chức năng chính của keepaliving là thực hiện cách ly lỗi của máy thật và chuyển đổi lỗi giữa các bộ cân bằng tải. Nó có thể được chuyển đổi ở lớp 3, 4 và 5. Nó được triển khai thông qua ngăn xếp VRRPv2 (Giao thức dự phòng bộ định tuyến ảo).
Layer3: Keepaliving sẽ thường xuyên gửi gói dữ liệu ICMP (chương trình Ping mà chúng ta thường sử dụng) đến các máy chủ trong nhóm máy chủ. Nếu phát hiện địa chỉ IP của một dịch vụ nào đó không được kích hoạt, Keepaliving sẽ thông báo rằng máy chủ đó không hợp lệ. và gửi nó Bị loại khỏi cụm máy chủ, một ví dụ điển hình của tình trạng này là một máy chủ bị tắt trái phép. Phương thức Layer3 sử dụng địa chỉ IP của máy chủ có hợp lệ hay không làm tiêu chí để xác định xem máy chủ có hoạt động bình thường hay không.
Layer4: Chủ yếu dựa vào trạng thái của cổng TCP để xác định xem máy chủ có hoạt động tốt hay không. Ví dụ: cổng dịch vụ của máy chủ web thường là 80. Nếu Keepaliving phát hiện cổng 80 đó chưa được khởi động, Keepaliving sẽ xóa máy chủ khỏi nhóm máy chủ.
Layer5: Băng thông chiếm dụng trên mạng cũng lớn hơn. Keepaliving sẽ kiểm tra xem chương trình máy chủ có chạy bình thường theo cài đặt của người dùng hay không. Nếu không khớp với cài đặt của người dùng, Keepaliving sẽ xóa máy chủ khỏi nhóm máy chủ.
Thiết kế phần mềm 。

Sẽ có một quy trình duy nhất sau khi bắt đầu lưu giữ.
?
1
2
3
|
8352 ? Ss 0:00 /usr/sbin/keepalived
8353 ? S 0:00 _ /usr/sbin/keepalived
8356 ? S 0:01 _ /usr/sbin/keepalived
|
Tiến trình cha: quản lý bộ nhớ, quản lý tiến trình con, v.v.
Tiến trình con: Tiến trình con VRRP.
Quy trình con: Ví dụ về quy trình con kiểm tra tình trạng.
2台mysqlcluster 10.1.6.203 master 10.1.6.205 backup 。
vip 10.1.6.173 。
Cổng truy cập đích 10.1.6.173 3366 được thăm dò và chuyển tiếp tương ứng tới 10.1.6.203 3306 và 10.1.6.205 3306 thông qua haproxy.
Để xây dựng mysqlcluster, hãy tham khảo blog trước Tại đây, keepaliving được cài đặt trên 2 máy.
?
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
|
root@10.1.6.203:~
root@10.1.6.203:~
vrrp_script chk_haproxy {
kịch bản
"killall -0 haproxy"
khoảng thời gian 2
trọng lượng -2
}
vrrp_instance VI_1 {
giao diện eth1
chủ nhà nước
virtual_router_id 51
ưu tiên 101
không được ưu tiên
gỡ lỗi
địa chỉ ip ảo {
10.1.6.173
}
theo dõi tập lệnh {
chk_haproxy
}
thông báo_chủ
/etc/keepalived/scripts/start_haproxy
.sh
thông báo lỗi
/etc/keepalived/scripts/stop_keepalived
.sh
thông báo_dừng
/etc/keepalived/scripts/stop_haproxy
.sh
|
Cấu hình VRRPD bao gồm ba loại
- Nhóm đồng bộ VRRP
- Phiên bản VRRP
- Kịch bản VRRP
Các phiên bản VRRP và tập lệnh VRRP được sử dụng ở đây.
Chú ý đến các tùy chọn cấu hình
stat: Chỉ định trạng thái ban đầu của instance (Initial), nghĩa là sau khi cấu hình, trạng thái ban đầu của máy chủ này là những gì được chỉ định ở đây, nhưng những gì được chỉ định ở đây không được tính, vẫn phải xác định thông qua bầu cử và mức độ ưu tiên, nếu ở đây Đặt làm chính, nhưng nếu mức độ ưu tiên của nó thấp hơn mức ưu tiên khác thì cái này sẽ gửi mức độ ưu tiên của chính nó khi gửi thông báo. Nếu cái kia nhận thấy mức độ ưu tiên không cao bằng mức ưu tiên của nó thì nó sẽ chiếm ưu tiên. trạng thái chủ.
- giao diện: Card mạng được liên kết với instance, vì khi cấu hình IP ảo phải được thêm vào card mạng hiện có.
- mức độ ưu tiên 101: Đặt mức độ ưu tiên của nút này, nút có mức độ ưu tiên cao hơn là master
- gỡ lỗi: mức độ gỡ lỗi
- nopreempt: Đặt thành không ưu tiên
?
1
2
3
4
5
|
vrrp_script chk_haproxy {
script "killall -0 haproxy" # xác minh sự tồn tại của pid
khoảng 2 # kiểm tra cứ sau 2 giây khoảng thời gian thực hiện tập lệnh
trọng số -2 # thêm 2 điểm ưu tiên nếu OK Thay đổi mức độ ưu tiên do kết quả tập lệnh gây ra: 2 có nghĩa là mức độ ưu tiên +2 có nghĩa là mức độ ưu tiên -2;
}
|
Sau đó, tham chiếu nó trong phiên bản (vrrp_instance), tương tự như tham chiếu hàm trong tập lệnh: xác định nó trước, sau đó tham chiếu đến tên hàm.
?
1
2
3
|
theo dõi tập lệnh {
chk_haproxy
}
|
Lưu ý: Tập lệnh VRRP (vrrp_script) và phiên bản VRRP (vrrp_instance) thuộc cùng một cấp độ.
?
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@10.1.6.203:tập lệnh
ngủ
5
lấy=`địa chỉ ip |
va li
10.1.6.173 |
nhà vệ sinh
-tôi
tiếng vọng
$lấy >>
/etc/keepalived/scripts/start_ha
.log
nếu như
[ $lấy -
cân bằng
1 ]
sau đó
tiếng vọng
"`date +%c` thành công để nhận vip"
>>
/etc/keepalived/scripts/start_ha
.log
/usr/local/sbin/haproxy
-f
/etc/haproxy/haproxy
.cfg
khác
tiếng vọng
"`ngày +%c` không thể nhận được vip"
>>
/etc/keepalived/scripts/start_ha
.log
là
root@10.1.6.203:tập lệnh
#!/bin/bash
pid=`pidof được giữ nguyên`
nếu như
[ $pid ==
""
]
sau đó
tiếng vọng
"`ngày +%c` không có id tiến trình được giữ nguyên"
>>
/etc/keepalived/scripts/stop_keep
.log
khác
tiếng vọng
"`ngày +%c` sẽ dừng keepalived "
>>
/etc/keepalived/scripts/stop_keep
.log
/etc/init
.đ
/giữ nguyên
dừng lại
là
/etc/init
.đ
/giữ nguyên
dừng lại
root@10.1.6.203:tập lệnh
#!/bin/bash
pid=`pid của haproxy`
tiếng vọng
"`ngày +%c` dừng haproxy"
>>
/etc/keepalived/scripts/stop_ha
.log
giết
-9 $pid
|
Cấu hình 10.1.6.205 theo cách tương tự.
?
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
|
root@10.1.6.205:~
vrrp_script chk_haproxy {
kịch bản
"killall -0 haproxy"
khoảng thời gian 2
trọng lượng 2
}
vrrp_instance VI_1 {
giao diện eth1
trạng thái SAO LƯU
virtual_router_id 51
ưu tiên 100
địa chỉ ip ảo {
10.1.6.173
}
theo dõi tập lệnh {
chk_haproxy
}
thông báo_chủ
/etc/keepalived/scripts/start_haproxy
.sh
thông báo lỗi
/etc/keepalived/scripts/stop_keepalived
.sh
thông báo_dừng
/etc/keepalived/scripts/stop_haproxy
.sh
}
|
HAProxy 。
Tiếp theo, chúng tôi sẽ giới thiệu haproxy.
HAProxy là một phần mềm proxy dựa trên các ứng dụng TCP (Lớp 4) và HTTP (Lớp 7). Nó cũng có thể được sử dụng làm bộ cân bằng tải. Nó cũng có thể bảo vệ máy chủ khỏi bị lộ. mạng. , thông qua bản đồ cổng. Nó cũng đi kèm với một trang để theo dõi trạng thái máy chủ.
Cài đặt haproxy.
?
1
2
3
4
5
|
wget -O
/tmp/haproxy-1
.4.22.
mất
.gz http:
//haproxy
.1wt.eu
/tải xuống/1
.4
/src/haproxy-1
.4.22.
mất
.gz
mất
xvfz
/tmp/haproxy-1
.4.22.
mất
.gz-C
/tmp/
đĩa CD
/tmp/haproxy-1
.4.22
làm
MỤC TIÊU=linux26
làm
cài đặt
|
Haproxy cần thực hiện kiểm tra tình trạng trên mỗi máy chủ mysqlcluster.
1. Định cấu hình haproxy.cfg trên hai máy chủ tương ứng.
?
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
root@10.1.6.203:tập lệnh
toàn cầu
maxconn 51200
quỷ dữ
nbproc 1
tập tin pid
/etc/haproxy/haproxy
.pid
mặc định
chế độ tcp
tùy chọn chuyển phát lại
tùy chọn phá thai đóng
thời gian chờ kết nối 5000 giây
thời gian chờ của khách hàng 50000 giây
máy chủ thời gian chờ 50000 giây
Nhật ký 127.0.0.1 local0
cân bằng vòng tròn
nghe proxy
liên kết 10.1.6.173:3366
chế độ tcp
tùy chọn httpchk
máy chủ db1 10.1.6.203:3306 trọng lượng 1 kiểm tra cổng 9222 inter 12000 tăng 3 giảm 3
máy chủ db2 10.1.6.205:3306 trọng lượng 1 kiểm tra cổng 9222 inter 12000 tăng 3 giảm 3
lắng nghe haproxy_stats
chế độ http
liên kết 10.1.6.173:8888
tùy chọn httplog
làm mới số liệu thống kê 5 giây
thống kê uri
/trạng thái
thống kê lĩnh vực Haproxy Manager
thống kê xác thực admin:p@a1SZs24
gốc@10.1.6.205:~$
con mèo
/etc/haproxy/haproxy
.cfg
toàn cầu
maxconn 51200
quỷ dữ
nbproc 1
tập tin pid
/etc/haproxy/haproxy
.pid
mặc định
chế độ tcp
tùy chọn chuyển phát lại
tùy chọn phá thai đóng
thời gian chờ kết nối 5000 giây
thời gian chờ của khách hàng 50000 giây
máy chủ thời gian chờ 50000 giây
Nhật ký 127.0.0.1 local0
cân bằng vòng tròn
nghe proxy
liên kết 10.1.6.173:3366
chế độ tcp
tùy chọn httpchk
máy chủ db1 10.1.6.203:3306 trọng lượng 1 kiểm tra cổng 9222 inter 12000 tăng 3 giảm 3
máy chủ db2 10.1.6.205:3306 trọng lượng 1 kiểm tra cổng 9222 inter 12000 tăng 3 giảm 3
lắng nghe haproxy_stats
chế độ http
liên kết 10.1.6.173:8888
tùy chọn httplog
làm mới số liệu thống kê 5 giây
thống kê uri
/trạng thái
thống kê lĩnh vực Haproxy Manager
thống kê xác thực admin:p@a1SZs24
|
2. Cài đặt xinetd.
3. Thêm tập lệnh dịch vụ xinetd và số cổng mysqlchk vào mỗi nút.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
root@10.1.6.203:~
dịch vụ mysqlchk
{
cờ = TÁI SỬ DỤNG
socket_type = luồng
cổng = 9222
chờ đợi = không
người dùng = không ai
máy chủ =
/opt/mysqlchk
log_on_failure += ID NGƯỜI DÙNG
vô hiệu hóa = không
per_source = KHÔNG GIỚI HẠN
liên kết = 10.1.6.173
}
root@10.1.6.203:~
mysqlchk 9222
/tcp
|
4. Viết tập lệnh dịch vụ giám sát mysqlchk.
?
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
root@10.1.6.203:~
-rwxr--r-- 1 không ai root 1994 2013-09-17 11:27
/opt/mysqlchk
root@10.1.6.203:~
#!/bin/bash
Máy chủ MYSQL
"máy chủ cục bộ"
SOCKET_MYSQL=
"/var/run/mysqld/mysqld.sock"
TÊN NGƯỜI DÙNG MYSQL=
"mysqlchkusr"
MẬT KHẨU MYSQL=
"bí mật"
MYSQL_OPTS=
"-N -q -A"
TMP_FILE=
"/dev/shm/mysqlchk.$$.out"
TỆP_LỖI_ERR=
"/dev/shm/mysqlchk.$$.err"
BUỘC_THẤT_BẠI=
"/dev/shm/proxyoff"
MYSQL_BIN=
"/opt/mysqlcluster/mysql-cluster-gpl-7.2.6-linux2.6-x86_64/bin/mysql"
KIỂM TRA_QUERY=
"chọn 1"
kiểm tra trước khi bay()
{
vì
TÔI
TRONG
"$TMP_FILE"
"$ERR_FILE"
;
LÀM
nếu như
[ -f
"$Tôi"
];
sau đó
nếu như
[ ! -w $I ];
sau đó
tiếng vọng
-Và
"Dịch vụ HTTP/1.1 503 không khả dụng"
tiếng vọng
-Và
"Loại nội dung: Loại nội dung: văn bản/thuần túy"
tiếng vọng
-Và
" "
tiếng vọng
-Và
"Không thể viết vào $I "
tiếng vọng
-Và
" "
ra
1
là
là
xong
}
trả về_ok()
{
tiếng vọng
-Và
"HTTP/1.1 200 Đồng ý"
tiếng vọng
-Và
"Loại nội dung: text/html"
tiếng vọng
-Và
"Độ dài nội dung: 43"
tiếng vọng
-Và
" "
tiếng vọng
-Và
" "
rm
TỆP_TMP
ra
0
}
trả về_thất bại()
{
tiếng vọng
-Và
"Dịch vụ HTTP/1.1 503 không khả dụng"
tiếng vọng
-Và
"Loại nội dung: text/html"
tiếng vọng
-Và
"Độ dài nội dung: 42"
tiếng vọng
-Và
" "
Nhưng
-Và
's/ $/ /'
$ERR_TỆP
tiếng vọng
-Và
" "
rm
TỆP_TMP
ra
1
}
kiểm tra trước khi bay
nếu như
[ -f
"$FORCE_FAIL"
];
sau đó
tiếng vọng
"$FORCE_FAIL đã tìm thấy"
> $ERR_FILE
trả về_thất_bại;
là
$MYSQL_BIN $MYSQL_OPTS --host=$MYSQL_HOST --socket=$MYSQL_SOCKET --user=$MYSQL_USERNAME --password=$MYSQL_PASSWORD -e
"$KIỂM TRA_QUERY"
> $TMP_FILE 2> $ERR_FILE
nếu như
[ $? -
nó là
0 ];
sau đó
trả về_thất_bại;
là
trả về được;
|
Bài kiểm tra.
2 nút cho phép lưu giữ (nút chính sẽ nhận được VIP và tự động lấy haproxy) và xinetd.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
root@10.1.6.203:~
1: lo: mtu 16436 qdisc trạng thái noqueue KHÔNG XÁC ĐỊNH
liên kết
/vòng lặp lại
00:00:00:00:00:00 Brd 00:00:00:00:00:00
inet 127.0.0.1
/8
phạm vi máy chủ lo
2: eth0: mtu 1500 qdisc pfifo_fast trạng thái XUỐNG qlen 1000
liên kết
/ ê-te
00:26:b9:36:0f:81 brd ff:ff:ff:ff:ff:ff
mạng 211.151.105.186
/26
brd 211.151.105.191 phạm vi toàn cầu eth0
3: eth1: mtu 1500 qdisc pfifo_fast trạng thái LÊN qlen 1000
liên kết
/ ê-te
00:26:b9:36:0f:83 brd ff:ff:ff:ff:ff:ff
inet 10.1.6.203
/24
brd 10.1.6.255 phạm vi toàn cầu eth1
inet 10.1.6.173
/32
phạm vi toàn cầu eth1
4: eth2: mtu 1500 qdisc trạng thái noop TẮT qlen 1000
liên kết
/ ê-te
00:26:b9:36:0f:85 brd ff:ff:ff:ff:ff:ff
5: eth3: mtu 1500 qdisc trạng thái noop XUỐNG qlen 1000
liên kết
/ ê-te
00:26:b9:36:0f:87 brd ff:ff:ff:ff:ff:ff
root@10.1.6.203:~
tcp 0 0 10.1.6.173:3366 0.0.0.0:* NGHE 1042
/haproxy
tcp 0 0 10.1.6.203:8888 0.0.0.0:* NGHE 1042
/haproxy
udp 0 0 0.0.0.0:56562 0.0.0.0:* 1042
/haproxy
root@10.1.6.203:~
tcp 0 0 10.1.6.203:9222 0.0.0.0:* NGHE 30897
/xinetd
root@10.1.6.203:~
root 1042 1 0 Tháng 9 năm 17 ? 00:00:00
/usr/local/sbin/haproxy
-f
/etc/haproxy/haproxy
.cfg
|
Bài kiểm tra
Truy cập cơ sở dữ liệu cluster thông qua vip10.1.6.173 3366 (lưu ý quyền tài khoản dave cần thêm 3 ip10.1.6.203, 10.1.6.205, 10.1.6.173).
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
root@10.1.6.203:mgm
Nhập mật khẩu:
Chào mừng đến với màn hình MySQL. Các lệnh kết thúc bằng ; hoặc g.
Kết nối MySQL của bạn
nhận dạng
là 1344316
Phiên bản máy chủ: 5.5.22-ndb-7.2.6-gpl-log MySQL Cluster Community Server (GPL)
Kiểu
'giúp đỡ;'
hoặc
'h'
vì
giúp đỡ. Loại
'c'
ĐẾN
thông thoáng
bộ đệm.
mysql> hiển thị cơ sở dữ liệu;
+------------------+
| Cơ sở dữ liệu |
+------------------+
| lược đồ thông tin |
| dave |
|
Bài kiểm tra
|
+------------------+
3 hàng
TRONG
bộ
(0,01 giây)
mysql>
|
Tự động treo thủ công, haproxy và cơ sở dữ liệu vip10.1.6.173 sẽ tự động chuyển sang 10.1.6.205 và sẽ không ảnh hưởng đến quyền truy cập vip.
Kiểm tra trạng thái của từng nút thông qua vip và haproxy.
http://10.1.6.173:8888/status 。

Cuối cùng, bài viết này về cấu hình Keepaliving+HAProxy để đạt được cân bằng tải khả dụng cao của MySQL có tại đây. Nếu bạn muốn biết thêm về cấu hình của Keepaliving+HAProxy để đạt được cân bằng tải khả dụng cao của MySQL, vui lòng tìm kiếm bài viết CFSDN. tiếp tục Duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!