- 积分
- 16843
在线时间 小时
最后登录1970-1-1
|

楼主 |
发表于 2018-1-13 17:55:46
|
显示全部楼层
内容正式开始前,我已经在集群中添加了新的节点controller1(IP地址为10.0.0.14)。
% x# p1 g5 [% U5 [1 X' f8 w; ^4 z3 d" i d
) ]. V8 L' `) ?- y4 g( L X6 Z" l. o8 M% B. G$ ~$ c! {- X; B/ W" l9 I3 T: b
1 _2 \" v% ]( P( ]( @5 s在所有节点上安装软件:
1 F% ~, E, C. d# yum install -y mariadb-galera-server xinetd rsync* B5 S: E: A6 j
5 [0 o3 \% s1 Y- h8 b! r7 ?
3 E& u4 d- n" ?1 U3 u9 B在节点1初始化数据库:
h" t4 T0 @) ?% M2 O% f( i5 n' ]# systemctl start mariadb.service4 g* g/ N0 W S* t1 M1 V
# mysql_secure_installation& Z8 N q9 n o, u# i+ \, o- E' W
# mysql -u root -p -e "CREATE USER 'clustercheck'@'localhost' IDENTIFIED BY '123456';"/ ^: i( A0 t! D
# systemctl stop mariadb.service* e. q6 p; h# u5 i$ M. ?) ~2 J7 S4 s
. V! N3 B! e" Q) y3 D
+ [; u% S1 m) v0 r X: K1 P在所有节点上配置MariaDB和Galera:" e- ?/ Y$ j$ k* H
# vi /etc/my.cnf.d/galera.cnf* z7 O! |* K9 D! p: Q) c- t
[mysqld]
# v9 F# o3 ]; Q: ubinlog_format=ROW
; x c* ~( \& u* Q M$ }default-storage-engine=innodb
/ o \; w+ m6 F. e2 ainnodb_autoinc_lock_mode=2
$ z; x. c- l' Q6 [' @1 Pinnodb_locks_unsafe_for_binlog=1* a- v! g3 h$ l% t3 [% T
query_cache_size=0
- C9 l. w+ `: ^; gquery_cache_type=04 ~& T( w x( } ?0 U, D5 E6 d
bind-address=controller1
3 M7 M( M- R( Q! cwsrep_provider=/usr/lib64/galera/libgalera_smm.so
7 j2 l* w! |( V" T% \8 |wsrep_cluster_name="my_wsrep_cluster"2 H6 c7 D4 z0 r' O+ X
wsrep_cluster_address="gcomm://controller1,controller2,controller3"9 D# W) M5 D# X- u; y
wsrep_slave_threads=1
: }! j! g4 S4 `, P: Q5 E, A# R" Y2 iwsrep_certify_nonPK=1
) L+ S' q. ] m; e4 U- M% @0 T. ]wsrep_max_ws_rows=131072) ]3 g3 q6 ^" v7 }
wsrep_max_ws_size=1073741824
% O m5 e( L& e1 U' P/ ?- cwsrep_debug=0; X# g. c5 o- x2 r: w* S
wsrep_convert_LOCK_to_trx=0) F' N# }. a+ s) G, Q
wsrep_retry_autocommit=1
1 r# i( U% H8 Bwsrep_auto_increment_control=1- c4 [# N! R$ R: D5 ^8 g
wsrep_drupal_282555_workaround=0
% f6 j( f! l8 x) h1 z/ s Vwsrep_causal_reads=0
0 F$ h1 ^2 j' v: f7 Ewsrep_notify_cmd=8 V6 g- j v3 K# z, N) N3 R3 y
wsrep_sst_method=rsync/ _+ p' \+ ^$ {3 @* w* c
wsrep_sst_auth=root:/ E2 j+ v; @9 `: O% D
“bind-address=”配置成/etc/hosts中的本机名称。1 x0 \' V% |5 Q3 H9 k3 |6 a
注意:如果“bind-address=0.0.0.0”,则在本机所有IP的3306端口进行监听,包括VIP。这将导致后续haproxy无法在VIP的3306端口监听。8 y7 n( g9 D3 S6 `2 K3 n. U
5 }* B2 T- v, |: E: x0 R* }0 b% M/ ?- J
在节点1执行如下命令:+ `' w l. K7 O7 X3 R
# sudo -u mysql /usr/libexec/mysqld --wsrep-cluster-address='gcomm://' &
( W9 {- f" g6 z* ~* V, F需要记住屏幕上的进程id,后面有用。7 o$ y5 y% i' l. l8 v' Z
$ g: ~" q1 w* v( o. T
% Q9 {3 d8 S/ W2 {% C/ N. F5 d# t在节点2、节点3:
1 ]) c9 _/ S" R# systemctl start mariadb.service
. F3 m+ r. l4 z7 K! P! S: K# systemctl status -l mariadb.service
0 Y' \6 p% j3 |7 y3 H
1 U% I* A# Y k) w) c8 V* `. G$ u, u7 o0 c: _
在任意节点确认集群的成员数量:
% C9 z$ y P- M; @+ S# mysql -u root -e 'SELECT VARIABLE_VALUE as "wsrep_cluster_size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'9 a5 |; @5 U. c: G8 }( y5 H
+--------------------+
+ a# y2 C6 l# b& P$ f) ~) v- B| wsrep_cluster_size |) u( j' B* Y) ^$ p
+--------------------+
8 C. |% W2 ?3 R" Q V7 T| 3 |
1 t7 {4 v+ H. p% I" P. n' `! z+--------------------+
5 x3 v) p' F" U% n4 w( ~( N; X+ C) I
$ o: x9 P* G9 ]% K- b
以上状态均正常,重启节点1的服务:
. l% p. `2 {4 o+ @# kill <mysql PIDs>0 \" Z6 M5 s1 t" y6 t/ s
# systemctl start mariadb.service
# y8 J: w6 Z# w" B9 Q4 b& R
/ Q1 V' I9 ?7 p( Z! i+ u( U p2 V/ T! q0 I0 M8 g. j
. z/ z( g* I. Q) V# {: s " H# w+ b" _# ]( D9 J9 h
/ z+ m+ U3 j) V, }9 [6 R8 G在所有节点上创建健康检查登录信息文件:2 O/ I0 U4 V5 [8 K+ N* h4 P8 i
# vi /etc/sysconfig/clustercheck
2 m8 |& o0 h7 x- zMYSQL_USERNAME=clustercheck$ D4 _! M* K0 x3 l
MYSQL_PASSWORD=123456
. {$ E }6 A% g8 y) g& p* D" E* _MYSQL_HOST=localhost2 D# @9 n* g+ s/ t7 e, n
MYSQL_PORT=33065 \5 m/ l, b! P0 @
+ g. e9 n) j& \4 P! o: ?4 {9 m8 b8 ?. e. C0 ]2 t! f' f4 V0 T9 V
在所有节点上创建供HAProxy调用的健康检查服务:
% g6 C9 U( u, e" _1 \/ I#vi /etc/xinetd.d/galera-monitor0 J5 T E E0 s, x( h$ i! i/ Y
service galera-monitor
0 F6 c D* `- |! F5 m1 U0 p{; A( _% V5 `' Q5 v- o
port = 9200% G W2 {, G+ n+ T) U- P0 z. u2 [5 {
disable = no
9 b, ~# I& k+ x4 M$ Osocket_type = stream
: j! w! i" G1 A* c' Tprotocol = tcp
. z B/ C% G8 ?( Fwait = no/ f" y! Y- q$ p' [. d' [
user = root
4 R- \0 K9 e5 G: S4 e1 f kgroup = root
( y& M" a5 D" x, k' U8 jgroups = yes# G5 W- e$ C& Z2 T
server = /usr/bin/clustercheck2 N8 }& F" l" D
type = UNLISTED
/ c0 N$ e: s/ q- l8 I. ^per_source = UNLIMITED* T5 c+ t, U; t a1 ?) q( a# p
log_on_success =
$ V1 U& [8 p A' q7 i4 ilog_on_failure = HOST
" i/ ?+ w' ~) W5 |flags = REUSE
/ X0 Y( `/ p0 ?. _; p}) n& B5 K% j. ~! `3 n3 n+ C& u7 h' S
此处检查状态的端口为9200。
+ h+ \4 o# W- y6 J+ X( Y- v6 k" w3 B6 ]+ H
5 H T8 U5 L: [3 d) d在所有节点上启动xinetd服务,clustercheck需要这个服务:& N" \0 _: U/ S) L8 y9 n3 E
# systemctl daemon-reload
2 u2 ]4 I) V4 F# systemctl enable xinetd
* `" g* A2 u+ ~( v( D# systemctl start xinetd
1 ?. N, a) J- m( l+ Q$ B
0 E# J3 t3 s2 v: V g" f
' U' w! L6 s0 ]测试检查效果:, [- B* g5 I5 k$ V! G
# clustercheck+ {( Z0 t$ l, H7 [6 ^. E$ _
HTTP/1.1 200 OK
) y3 v- @1 c S. b, [3 dContent-Type: text/plain
, G( j6 _( c; K' @" i* pConnection: close% a* U6 S1 n$ M l" p
Content-Length: 321 N: Z$ H w8 u" E) e$ Y/ V
3 r1 V. Y9 O) [1 t3 b* |$ k% M8 ZGalera cluster node is synced.; P5 |" O$ ~; o& d6 M( a/ n
, }( b& _, _! v2 z" C o/ p2 G
或:; ]6 Y! F4 a8 Z3 v( y, A
# telnet 10.0.0.14 9200, E4 i3 @& a4 y: h$ A0 o- F
Trying 10.0.0.14...
- Z% D$ |( R- |5 GConnected to 10.0.0.14.
; A+ q" }2 y# m2 {) C6 {8 l2 oEscape character is '^]'.
4 ^0 @: }7 y' s* w( UHTTP/1.1 200 OK6 ]0 E2 x+ f: x$ \
Content-Type: text/plain7 \2 C5 ? g- T- J
Connection: close# M6 f3 G M. m9 ~8 }1 {4 b+ x7 y
Content-Length: 32- p0 _7 N4 T. n, B8 a
, A/ g+ T' f) m* _Galera cluster node is synced.
, t( b1 P( H6 d0 RConnection closed by foreign host.9 Y$ I5 P4 N6 i/ I( }3 E/ [9 Q- Q: C
$ O7 w, Z& ?$ i' b, q8 j d" K% k$ D
7 I3 C j; Y- C6 l3 E" E; b& C
* O5 X {* w: F9 i4 l2 Z/ Y& k8 ^在所有节点上配置haproxy.cfg:
; w+ O8 O$ \: D# _' o1 U9 I# vi /etc/haproxy/haproxy.cfg* x( b. v# E' F- u
global
6 H$ w2 h0 h7 D' pchroot /var/lib/haproxy1 f( e* e# q5 j# p# F
daemon
2 S* W% e: d6 u! \group haproxy
7 O% h4 z+ Q' n3 Y- P9 Q1 Cmaxconn 4000
$ c# V3 Y; n# x# ]+ Ypidfile /var/run/haproxy.pid. B* _1 m# L- V! z
user haproxy/ E/ ?4 H' Z c) M& e
7 n9 `' k* r3 b" u( {: p
defaults3 n: C8 C- [ H6 i* ^
log global
) {9 o5 C& v: H$ ^- smaxconn 4000
# t6 E. H, D6 ^7 e( i; A( |option redispatch
7 y/ y$ u* N/ kretries 3
& A0 O% \" Z; l5 htimeout http-request 10s
7 ]+ V$ ]- e, F K2 Jtimeout queue 1m F% g$ Y8 _ `
timeout connect 10s7 }. E( y8 Y& T
timeout client 1m3 d, h, D3 t4 b: K. F# v% \
timeout server 1m
& ?7 Y6 Q! p( U% otimeout check 10s) D- `1 G- U. P+ B) L
+ |; ~9 X$ W7 L! e* j$ O/ E2 g
listen galera_cluster
& @& p s4 F9 V! @* {bind 10.0.0.10:3306% B/ z# i( a& L+ c& t
balance source, @4 Q, r$ s# y! Y; s/ G
option httpchk
8 z. D% `6 ?! wserver controller1 10.0.0.14:3306 check port 9200 inter 2000 rise 2 fall 5" }1 L1 G. g) d" z" U5 h: t. N
server controller2 10.0.0.12:3306 check port 9200 inter 2000 rise 2 fall 53 ?+ s$ \; M: Y Q* X% ?
server controller3 10.0.0.13:3306 check port 9200 inter 2000 rise 2 fall 5+ B2 A F+ R! J8 ]9 w, |% g7 Y+ b
( a2 ?6 q$ P1 n5 W& w4 P7 I N, V# g( L; m8 j+ x, h
查看资源当前在哪个节点:
" y( \; \- D; k9 }( v# crm_mon7 R7 g9 Y m/ N4 J8 B4 n
$ p$ i1 _: @5 s/ J' b" O$ d% s! h8 s4 |' ~
重启资源所在节点的haproxy服务:
; V5 c4 }; l) W4 Z" C1 `, L, H# systemctl restart haproxy.service2 y4 b" R& w' c: U+ K( b1 g, N
# systemctl status -l haproxy.service |
|