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

楼主 |
发表于 2018-1-13 17:55:46
|
显示全部楼层
内容正式开始前,我已经在集群中添加了新的节点controller1(IP地址为10.0.0.14)。& E+ |$ D& y$ g4 u) a! d; R! b! K4 X r3 r
# e* ~% z( P H6 P; R1 f7 l
) \3 Z" q5 H, ~5 S7 X- k3 k4 X* d7 P
/ m; A8 P3 h7 R在所有节点上安装软件:
8 w; U, \. S9 n. W+ K1 v3 v" t# yum install -y mariadb-galera-server xinetd rsync- l9 X) C9 x( W5 l5 v6 P
0 Q7 M# E6 x: h8 l' D
: \: U& d1 z6 Q( I; E
在节点1初始化数据库:
- t% b9 _; j5 @4 `# systemctl start mariadb.service
3 s# |2 N7 S O+ m V1 B" l( X; q# mysql_secure_installation
) i8 v! v9 P6 I F" R. v# mysql -u root -p -e "CREATE USER 'clustercheck'@'localhost' IDENTIFIED BY '123456';"6 f7 h' E5 B9 I: e$ s
# systemctl stop mariadb.service' `4 ~6 ~. Z5 s {8 u. z
* A8 t; }: ]" p! k7 P6 ]% n
/ U& B- D: g. @7 _# [2 J在所有节点上配置MariaDB和Galera:
# t* y# u( l; N& q+ Y# vi /etc/my.cnf.d/galera.cnf
) @1 v, n1 D/ O& g( Q[mysqld] X! ^' A0 e# {: @+ ]
binlog_format=ROW ^7 _* m- ]4 \; y: c
default-storage-engine=innodb0 U. h1 H: @( h% |
innodb_autoinc_lock_mode=2( F) U" v* ?+ M+ N
innodb_locks_unsafe_for_binlog=1
0 Y& |0 j" N/ Qquery_cache_size=0/ T% n! w: X. M2 |8 t: }4 m
query_cache_type=04 [ |/ J2 T4 M% \, Q$ W
bind-address=controller1
& U( S$ H, ^- d2 b% n6 w, [+ S+ wwsrep_provider=/usr/lib64/galera/libgalera_smm.so) p- @- _4 z0 p3 v. R
wsrep_cluster_name="my_wsrep_cluster"! B9 g1 Y/ Y1 ~
wsrep_cluster_address="gcomm://controller1,controller2,controller3"
8 I+ V. |8 o0 Y5 rwsrep_slave_threads=1
7 D1 e. K) K& E7 K6 xwsrep_certify_nonPK=14 j) ` a4 k# z8 k
wsrep_max_ws_rows=131072
% O! l" M% k( X3 X3 Bwsrep_max_ws_size=1073741824
+ s* G' I8 t- ~. W8 J& `wsrep_debug=0
' u( \8 X# O# }% V/ e$ x2 m8 kwsrep_convert_LOCK_to_trx=07 G! E" V! w2 R( D5 \3 J. ]3 `
wsrep_retry_autocommit=17 p. b) T9 Y6 n8 \
wsrep_auto_increment_control=1
" v' i( ?' O' V* wwsrep_drupal_282555_workaround=0
; ~4 H- u9 Z3 N0 Y" \( dwsrep_causal_reads=0
2 d" _) O, V/ Dwsrep_notify_cmd=2 R3 Q* B, c v
wsrep_sst_method=rsync
2 y! g/ R( c! b* o# ?wsrep_sst_auth=root:
' G8 W3 |5 X0 H: q: o“bind-address=”配置成/etc/hosts中的本机名称。
# n1 ?" v2 A ?注意:如果“bind-address=0.0.0.0”,则在本机所有IP的3306端口进行监听,包括VIP。这将导致后续haproxy无法在VIP的3306端口监听。& p2 \$ j l# a4 P% x; c
0 [/ T4 R: B7 `' k3 D! Q8 q- B
! c1 }$ {( O" Q% [在节点1执行如下命令:+ w" k. {+ H4 p
# sudo -u mysql /usr/libexec/mysqld --wsrep-cluster-address='gcomm://' &' u; _1 r% e- r& }5 b) G' g3 L
需要记住屏幕上的进程id,后面有用。
$ ?& C! {7 ?6 [1 O7 j- D+ V# L: T
l) |3 t) u, ^在节点2、节点3:: |% U# I: {5 X' |# T" R
# systemctl start mariadb.service2 v+ h9 D" ]* u1 d
# systemctl status -l mariadb.service
7 E4 [8 W: I( c0 e8 ~5 H+ V1 H) }) X% T% D
. u* R2 A9 C+ W0 C: g
在任意节点确认集群的成员数量:5 |7 J9 h8 [7 v9 [; [) B1 ^* s7 ~
# mysql -u root -e 'SELECT VARIABLE_VALUE as "wsrep_cluster_size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"'$ `/ {0 i1 J" [$ i; ~. Y! O
+--------------------+& S! |3 L) `9 u. l$ e
| wsrep_cluster_size |/ s0 O5 z9 C b9 i; b. {
+--------------------+
0 p+ c- m3 ?" ?! }* P| 3 |
' ~9 n; \) x! z- H9 |5 j! O+--------------------++ M9 ^/ @; g5 f( n& p
( [* f( ~! Z' @, Y7 u6 ^( j+ h( [
以上状态均正常,重启节点1的服务:
* M4 Q9 o% z& d- F/ r# kill <mysql PIDs>3 z8 d, b9 ? V: w" ~* t. Q6 G' I' k
# systemctl start mariadb.service
, o: M4 r5 R. L5 Z" t( g
4 D1 r: E6 c( e# B& s
4 d1 g$ u& j: @' D) i( B k% n; ?: O% G6 \
& y) M+ J; g" w8 P
) m J' R" S7 L2 _ E; }2 ]在所有节点上创建健康检查登录信息文件:
R# r7 }# r, w X, x# vi /etc/sysconfig/clustercheck
+ M: u+ B6 Z! O/ E- J" oMYSQL_USERNAME=clustercheck
9 b- P, V- u: o. a1 ~* qMYSQL_PASSWORD=123456
; i+ z7 h. J5 _% ^MYSQL_HOST=localhost
) M* g! a: x$ T1 f" I' |MYSQL_PORT=3306
% l; W8 S( m" D. s+ r
t3 h8 ^, k- Q6 y: E8 x2 k( t: F" m" V8 {/ z
在所有节点上创建供HAProxy调用的健康检查服务:+ X7 G9 W: o$ z1 C- l+ W
#vi /etc/xinetd.d/galera-monitor
[$ _/ z" B0 z+ vservice galera-monitor
5 n0 ]- z( `0 N3 r{
' E' j# b" L6 z( p& s6 A" rport = 92002 m2 x! l" X0 l
disable = no
9 |" ^9 E% F$ a/ F. W0 X* u. Xsocket_type = stream% Q; B! k; |; R( e) ^* N& q: t
protocol = tcp
- N; S0 s; D, u, t3 W) s% Lwait = no
2 O2 x, m0 Q5 n( ]7 {user = root
1 y: n$ r1 \' `+ A) h8 ^- M& mgroup = root8 A) Q( a. j! S( h: _. I) D1 _
groups = yes& O! |/ J( [; Z2 ^% a( p( a
server = /usr/bin/clustercheck7 r! k6 ^+ w9 i3 w. Z
type = UNLISTED
& H& K4 x+ G: S. O0 C: Y+ @* Rper_source = UNLIMITED
7 P* Z5 K8 L! R7 O! g" xlog_on_success =
; g* n% _$ H3 D7 d2 V6 r2 klog_on_failure = HOST7 @7 L3 m/ ]. O8 m" c
flags = REUSE5 G7 ~! E0 r k9 }1 J
}
$ o! _+ A; g& z5 Y+ H, x此处检查状态的端口为9200。0 \* D! L( p S, v6 j( ~4 m* L+ x
/ {: L2 L7 d+ T$ P9 b# @8 t! F: s/ U
( x l& \' L% R0 L6 m
在所有节点上启动xinetd服务,clustercheck需要这个服务:& @6 P1 t$ O' ?/ I, c6 I& ?
# systemctl daemon-reload' b7 {* J5 |& t0 X, ^5 e
# systemctl enable xinetd/ U( e& I1 p& G$ g& m. }1 U- G
# systemctl start xinetd) {0 N7 z5 o0 ?; O- I& G
! }" E& I$ c h- y/ r0 F8 P1 T4 Z* }, k3 x: J2 b2 \6 B* N5 s, W
测试检查效果:
! T. F i3 u$ a$ c& d {# clustercheck+ k1 w4 D6 L8 Z3 P
HTTP/1.1 200 OK9 D( M) {& B5 m0 S" x1 S
Content-Type: text/plain
4 G; j& U% Y- Y/ ~Connection: close o. {0 `8 U z7 I; Z
Content-Length: 328 e3 ]; @0 f s4 \: j; e' H' X
/ o, T% H3 ~" Z7 P7 {1 yGalera cluster node is synced. R5 d: y3 H9 ^4 g1 u7 x' [" Z
' h6 b3 u' J. K9 r* L8 L或:) O0 j( J/ q3 V8 h5 Z
# telnet 10.0.0.14 9200
/ m% _6 \0 g. Y; pTrying 10.0.0.14..., U# o7 b. E: F0 p/ c' H9 z9 {: N
Connected to 10.0.0.14.
% {+ O6 a- [- \( F7 UEscape character is '^]'.# a( g! ~# h6 Z! k1 d
HTTP/1.1 200 OK
0 N0 V; G6 g- K/ }$ {' y5 _. pContent-Type: text/plain1 C& k$ Y7 A5 B+ g4 m9 D
Connection: close( A) f0 E- W& [4 `. ~( i! a
Content-Length: 32
8 R/ s3 E1 Q( a4 c) q. e( I) D1 u0 {* p @
Galera cluster node is synced.1 \& |) O# X: m, l* b
Connection closed by foreign host.# ?$ {1 |" D5 t# C: Z
6 P; T2 V$ G' i, h, z
( t: q n, u9 U+ s2 \& x+ Z( J. {
$ R( f% b4 V* [- J: k, U$ t在所有节点上配置haproxy.cfg:
: m* Z Q4 T) [1 z# vi /etc/haproxy/haproxy.cfg+ b. D$ F! P/ g, Z
global9 w5 ~: c& { x1 i
chroot /var/lib/haproxy" p/ `& z8 \3 O- E% C
daemon
' E9 D" h. U+ V+ _2 i$ O0 S5 _ v* qgroup haproxy Z8 o1 E7 f9 L" z5 V1 v' `
maxconn 4000; D. B* O" R1 @' `- J
pidfile /var/run/haproxy.pid
# a' M0 U1 s) z% W+ Guser haproxy
' s3 E9 z0 T/ X" B* y+ Y% Y; d# p2 A
: f% W, j. Z; I7 _( m% ^0 Ddefaults
4 w1 n, a8 t- q: Y: {' V8 rlog global
& D& P$ g& w; pmaxconn 4000
" A6 n+ y4 |% Y, Boption redispatch
; ]) H }1 o- B0 S3 S l5 Q) n, uretries 3
: g: I$ V# } q2 D, ?- ntimeout http-request 10s
4 ^# f& Q+ A' H! Ptimeout queue 1m/ u* e- o2 ^: z" {
timeout connect 10s
& s3 U. Q+ \8 p% xtimeout client 1m0 ~+ {" h9 z6 w+ {+ p- J, f
timeout server 1m
1 X* y v6 p; j R. f1 J: I6 itimeout check 10s0 I( p7 T" v3 m- J$ o* i' N, i9 _
O0 `4 |2 P8 t
listen galera_cluster
+ ^' x7 B+ O a+ \( w* h9 tbind 10.0.0.10:3306
; u+ n" s/ J1 o% c, ]2 c- v3 Xbalance source/ n5 F- y- C6 E9 j( F1 h6 m4 B* i$ k# e
option httpchk) ?; W2 k. u- B' X" i& w
server controller1 10.0.0.14:3306 check port 9200 inter 2000 rise 2 fall 5/ F' N* B9 e4 s' p
server controller2 10.0.0.12:3306 check port 9200 inter 2000 rise 2 fall 5$ s/ o- M3 m' E7 j4 v5 j Y
server controller3 10.0.0.13:3306 check port 9200 inter 2000 rise 2 fall 5. i' I+ }1 S5 a. d) N* v/ t3 X
6 Z- c% P* }0 K5 c: m- d
L& }4 A/ F3 D P' ?) d' t1 R; |
查看资源当前在哪个节点:
# e/ k8 x" L# e- |2 N# crm_mon
% i4 ?% d. o, _2 c( G# P1 @- k7 U# x8 @ ~# e5 \ e* X
/ A5 c2 a0 e& d重启资源所在节点的haproxy服务:0 S* i4 g B+ v- @' L/ C
# systemctl restart haproxy.service7 C1 `6 R7 Q( Z( o' L
# systemctl status -l haproxy.service |
|