ads

วันพุธที่ 16 กรกฎาคม พ.ศ. 2557

Setup tungsten MutiMaster MySQL


Setup tungsten MutiMaster MySQL


set ชื่อ server ที่เรียกหาระหว่างกัน ใน /etc/hosts
vi /etc/hosts
100.77.169.105   T-MA1-DataMDB1
100.77.169.106   T-MA2-DataMDB2
100.77171.163   MD1-DataMDB3
100.77171.164   MD2-DataMDB4

[Master 1 - Master X ทำทุกเครือง]
- ติดตั้ง mysql ตามปกติ
ติดตั้ง software ที่ต้องใช้งาน
- yum install java java-1.7.0-openjdk java-1.7.0-openjdk-devel ruby rsync -y
defalult  java จะ set path ให้เลยลองเช็ค
# more /etc/bash.bashrc
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_06
export PATH=$PATH:$JAVA_HOME/bin
ทดสอบ Ruby ว่าติดตั้งเรียบร้อยหรือไม่
$ echo "p 'hello'" | ruby -ropenssl
จะต้องแสดงข้อความ "hello"
- Add user Tungsten และ set password
# useradd -m -G mysql -s /bin/bash tungsten
# passwd tungsten
( ใส่ password ที่ตอ้งการ )
-  ขั้นตอนการทำ key authen

[Master1]
แก้กร๊ปที่ allow ใน sshd_config
# vi /etc/ssh/sshd_config     เพิ่ม tungsten
AllowGroups root tungsten

# su tungsten
$ ssh-keygen  (enter ผ่านไม่มีพาสเวิร์ด)
 [tungsten@T-MA2-DataMDB5 root]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tungsten/.ssh/id_rsa):
Created directory '/home/tungsten/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tungsten/.ssh/id_rsa.
Your public key has been saved in /home/tungsten/.ssh/id_rsa.pub.
The key fingerprint is:
8b:68:73:46:e8:ee:e9:74:69:a7:13:15:b5:e9:d3:06 tungsten@T-MA2-DataMDB5
The key's randomart image is:
+--[ RSA 2048]----+
|         ..      |
|        .  o     |
|         .E      |
|     .  .. o     |
|    . ..S o o    |
|   . o.o . o     |
|    * B.o        |
|   + B.o         |
|   o= ..         |
+-----------------+
จะได้ไฟล์  /home/tungsten/.ssh/id_rsa.pub  ของเครืองนั้นไว้
- สร้างไฟล์ authorized_keys2  ไว้เก็บ key แต่ละเครือง
$ touch path /home/tungsten/.ssh/authorized_keys2
$ chmod 644  /home/tungsten/.ssh/authorized_keys2
พ่น key ของเครืองนั้นเข้าไฟล์  authorized_keys2
$ cat id_rsa.pub >> authorized_keys2

[Master2]
แก้กร๊ปที่ allow ใน sshd_config  ทำทุกเครืองให้ครบ Server 3 , Server 4
# vi /etc/ssh/sshd_config     เพิ่ม tungsten
AllowGroups root tungsten
Genkey ออกมาเช่นเดียวกัน     เมื่อได้ไฟล์ id_rsa.pub  ทำการ copy key ไว้เป็นชื่ออื่นแล้วส่งไปที่เครือง Master1 จะได้ไม่งง
$ cp  id_rsa.pup id_rsa.pub_serv2
$ scp id_rsa.pub_serv2 root@100.77.169.105:/tmp/
ถ้ามีเครือง 3, 4 ก็ไล่ทำไปเรือยๆ  เช่นเดียวกันโดยได้ key แล้ว copy เป็นชื่อต่อท้ายต่างกัน แล้วส่งข้ามไปยังเครือง 1  ไฟล์ืจะได้ไม่ทับกัน
[master3]
$ cp  id_rsa.pup id_rsa.pub_serv3
$ scp id_rsa.pub_serv3 root@100.77.169.105:/tmp/

[master4]
$ cp  id_rsa.pup id_rsa.pub_serv4
$ scp id_rsa.pub_serv4 root@100.77.169.105:/tmp/


เมื่อเรากลับมาดูที่เครือง 1
[ Master1]
$ cd /tmp/
จะมีไฟล์    id_rsa.pub_serv2  id_rsa.pub_serv3  id_rsa.pub_servxxx  ( ถ้ามีหลายเครือง)  เราก็ cat key เหล่านี้ไปเรวมมนไฟล์ authen เลย
$ cat  id_rsa.pub_serv2 >> /home/tungsten/.ssh/authorized_keys2
$ cat  id_rsa.pub_serv3 >> /home/tungsten/.ssh/authorized_keys2
$ cat  id_rsa.pub_serv4 >> /home/tungsten/.ssh/authorized_keys2

สุดท้ายที่เครือง 1 ไฟล์ authorized_keys2 ที่เครือง Master1 จะมี key ทุกเครืองในไฟล์นี้
[tungsten@Dev-Tungsten2 .ssh]$ more authorized_keys2   เช่น
ssh-rsa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7WEVC2rStSzpXMDLBmr6ADTRx4Zsrz76Y2TzBMd
STi8V6wPXX/nhK/Mn8gn9KhTiIH6v+EKs27cEvSuqOpbfL1G5U67iDyZjlpCF6JPRKyXi0xKN1hpVQKXxgpgf6YKkW/DXHyBBcrAd5/fW0uTpC23AZLw9x03lNiSk0BTU098KqA6CS7MPNUg4zOMgsSZPvynB1N62S7rVJ2
PpuGqW0knwcS/nRd6RNH4/sT3XVY2qYTJBTUFNYTLJpQ== tungsten@T-MA1-DataMDB1
ssh-rsa BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBkC4q51SexUGdIDkf8K0pQjjnFIeWBnZ5IYKpq6K7
Bj0vYCR51a5XmHo70XuQP9YWMHeZVw4seQNkHFNdkn0ewixmZNZIDCpmEP9LVWxckdWJSu6vQCUC4+3ai17xcTisLanxdDe4fzkbyB3R/EZHu9FyZZZho+9NOsKDWof99a781xKWTF85mh0Qk1NfsMAJXWUn2TE+ivg1xrJ
XAW2DfY9UYhHtE1wso85T+W0rop/GN/1DcbphvDWSqww== tungsten@T-MA2-DataMDB2
ssh-rsa CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCREB/VMRmVe7VyN+czgXgKZeDWB2NZkuYF16bH74EW
owgx2l5fw1cZV9VrAFoIogPvu9s8fxXJzxvIjbK4JCc7y8OYEljnUfuemlrxDu1efxjZcPLZK8TmMQXX7Xhl0K9wO5eaiLi6mDI4sPbB2w1SQqA/JxOXQ4Y/GYUQ/LOLwikRrtSddMmyGJMZ4ETtiAn7FOeaaUc7jBBB71T
SHcH+af+BKLKpvAE30b28h48xjdh1520KoNOwYIN+56Q== tungsten@MD1-DataMDB3
ssh-rsa DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDh4oPIorFEYkmGbrLnE1qqsaV7dYyaYiGUDrb
wBJF6V2AnTwJVgAsBkjtfoZlgGNDgJAEeprHjOnBgu0W8fQVXl0+kuR7r+4SzdfPtI2qQiejeCx2yQ6TBUCAgO4d088fdS28/r3AC17NLiFQD9f2IhG3kx0cFOVVJQ0/0Z8Br4hkdCLDr+MfDmuGJyhiGemZ+MBmxluFkSR
N37xggmhs5veyltMVYPvZQtGIo/y2ynLKtfsN/iCwyMw== tungsten@MD2-DataMDB4

เราก็ทำการส่ง key ดังกล่าวจากเครือง 1 ไปให้กับทุกเครืองที่เราทำให้ครบ
$ scp authorized_keys2 tungsten@100.77.169.106:/home/tungsten/.ssh/
$ scp authorized_keys2 tungsten@100.77171.163:/home/tungsten/.ssh/
$ scp authorized_keys2 tungsten@100.77171.164:/home/tungsten/.ssh/
ถ้ามีเครรือง 3,4 ก็ก๊อบไปวางเรือยๆ  แล้วทดสอบ ssh ข้ามหากัน

su tungsten
[tungsten@Dev-Tungsten1 mysql]$ ssh 100.77.169.106
Last login: Thu Apr  3 15:12:01 2014 from dev-tungsten1
[tungsten@Dev-Tungsten2 ~]$
ทดสอบ ssh ทุกเครืองให้ครบ 3,4
- เตรียม Databases
แก้ไขค่า config my.cnf  เพิ่มค่าลงไปดังนี้  ทุกเครื่องจะต่างกันที่ id

[Master1]

server-id       = 1   <<= ลำดับ id  server
auto_increment_increment = 4  <<= จำนวน server ที่จะทำ
auto_increment_offset = 1
default-storage-engine=InnoDB
sync_binlog=1
log_bin = mysql-bin
innodb_buffer_pool_size = 512M
max_allowed_packet=48m
innodb_flush_log_at_trx_commit=2


เพิ่ม grant
เสร็จแล้วทำการ grant สิทธิ์ใน mysql ให้ user นั้น
>grant all on *.* to tungstenuser@'%' identified by 'tungstenpassword' with grant option;
>FLUSH PRIVILEGES;


**จะเห็นได้ว่า auto_increment_increment = 4 ดังนั้น sql ของโปรแกรมตารางไหนที่เป็น auto increment เช่นพวก ID ต่างๆ  มันจะกระโดดๆ ไปทีละ 4 เพราะ server ทุกตัวสามารถเขียนได้ไหมจึงต้องเว้นค่าให้เครืองอื่นๆ ในการเขียน data ลงไปนั่นเอง

Setup tungsten
[Master1]
ดาวโหลดเวอร์ช่น ปัจจุบันที่ https://code.google.com/p/tungsten-replicator/downloads/list
# wget https://tungsten-replicator.googlecode.com/files/tungsten-replicator-2.2.0-292.tar.gz
แล้วแตกไฟล์เพื่อทำการคอนฟิก ไว้ที่ /opt
# tar -xzf tungsten-replicator-2.2.0-292.tar.gz -C /opt
# cd tungsten-replicator-2.2.0-292
สร้างไฟล์ setup-masters.sh  แล้วใส่ค่า ชื่อ Server ที่เราตั้งในไฟล์  /etc/host ,  ตั้งค่าไฟล์คอนฟิก my.cnf , user -pass ของ tungsten ใน mysql เที่เรา
# vi setup-masters.sh
 ตั้งค่าประมาณนี้

#! /bin/bash
MYSQL_CONF=/etc/my.cnf
./tools/tpm install four_musketeers \
    --thl-log-fsync=true \
    --topology=all-masters \
    --home-directory=/opt/replicator/ \
    --replication-user=tungsten \
    --replication-password=tungsten \
    --masters=T-MA1-DataMDB1,T-MA2-DataMDB2,MD1-DataMDB3,MD2-DataMDB4 \
    --master-services=DB1,DB2,DB3,DB4 \
    --start


ทำการติดตั้ง Tungsten Replicator โดยใช้คำสั่งด้านล่าง ตัว Tungsten Replicator จะทำการติดตั้งลงใน master1 และ master2 ...  โดยอัตโนมัติ
$ cd /opt/tungsten-replicator-2.2.0-292
$  ./setup-masters.sh
รอบแรกจะพบ error บางเพราะสคริปจะสร้าง folder /opt/replicator ที่เครือง Master1 ให้แต่  ไม่มี permission เขียนไฟล์
# chown -R tungsten:tungsten  /opt/replicator

เปลี่ยน user ปัจจุบันให้เป็น tungsten
$ su tungsten
และที่เครือง Server อืนๆ ก็สร้างให้ด้วยเช่นกัน
[Master2]
# mkdir /opt/replicator
# chown -R tungsten:tungsten  /opt/replicator

[Master3]
# mkdir /opt/replicator
# chown -R tungsten:tungsten  /opt/replicator

[Master4]
# mkdir /opt/replicator
# chown -R tungsten:tungsten  /opt/replicator

และกลับมารันคำสั่งอีกรอบ
[Master1]
[tungsten@Dev-Tungsten1 tungsten-replicator]$ ./setup-masters.sh
ผลประมาณนี้

NOTE  >> Data service(s) four_musketeers updated in /opt/tungsten-replicator-2.2.0-292/deploy.cfg
..which: no innobackupex-1.5.1 in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
which: no innobackupex-1.5.1 in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
.which: no innobackupex-1.5.1 in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
WARN  >> master1 >> We suggest adding "open_files_limit=65535" to the MySQL configuration file for tungsten@Master1:3306 (WITH PASSWORD) (MySQLSettingsCheck)
WARN  >> master1 >> Add '*       -    nofile  65535' to your /etc/security/limits.conf and restart MySQL to make sure the setting takes effect (MySQLSettingsCheck)
.WARN  >> master1 >> MyISAM tables exist within this instance - These tables are not crash safe and may lead to data loss in a failover (MySQLMyISAMCheck)
which: no innobackupex-1.5.1 in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
WARN  >> master2 >> MyISAM tables exist within this instance - These tables are not crash safe and may lead to data loss in a failover (MySQLMyISAMCheck)
WARN  >> master1 >> We suggest adding "open_files_limit=65535" to the MySQL configuration file for tungsten@Master1:3306 (WITH PASSWORD) (MySQLSettingsCheck)
WARN  >> master1 >> Add '*       -    nofile  65535' to your /etc/security/limits.conf and restart MySQL to make sure the setting takes effect (MySQLSettingsCheck)
WARN  >> master1 >> MyISAM tables exist within this instance - These tables are not crash safe and may lead to data loss in a failover (MySQLMyISAMCheck)
WARN  >> master2 >> MyISAM tables exist within this instance - These tables are not crash safe and may lead to data loss in a failover (MySQLMyISAMCheck)
.which: no innobackupex-1.5.1 in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
which: no innobackupex-1.5.1 in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
which: no innobackupex-1.5.1 in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
.which: no innobackupex-1.5.1 in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
.......
#####################################################################
# Next Steps
#####################################################################
Once your services start successfully replication will begin.
To look at services and perform administration, run the following command
from any database server.
  /opt/replicator//tungsten/tungsten-replicator/bin/trepctl services
Configuration is now complete.  For further information, please consult
Tungsten documentation, which is available at docs.continuent.com.
NOTE  >> Command successfully completed


แสดงว่าเรียบร้อยแล้ว  ลองทดสอบดู service tunsten ดู

[tungsten@T-MA1-DataMDB1 .ssh]$ /opt/replicator//tungsten/tungsten-replicator/bin/trepctl services
Processing services command...
NAME              VALUE
----              -----
appliedLastSeqno: 807937
appliedLatency  : 0.137
role            : master
serviceName     : db1
serviceType     : local
started         : true
state           : ONLINE
NAME              VALUE
----              -----
appliedLastSeqno: 245
appliedLatency  : 0.0
role            : slave
serviceName     : db2
serviceType     : remote
started         : true
state           : ONLINE
NAME              VALUE
----              -----
appliedLastSeqno: 2805017
appliedLatency  : 0.613
role            : slave
serviceName     : db3
serviceType     : remote
started         : true
state           : ONLINE
NAME              VALUE
----              -----
appliedLastSeqno: 143
appliedLatency  : 0.0
role            : slave
serviceName     : db4
serviceType     : remote
started         : true
state           : ONLINE
Finished services command...
เรียบร้อย ONLINE หมดแล้ว  ลองทดสอบด้วยการ ลบ data ที่เครือง Master1 หรือ update ที่ Master2  Master3  Master4ดู  ข้อมูลอัพเดทเหมือนกันเป็นอันว่าใช้ได้
เพิ่ม service ให้ระบบ CentOS สตาร์ท
# ln -s /home/tungsten/tungsten/tungsten-replicator/bin/replicator /etc/init.d/replicator
# chkconfig --add replicator
# chkconfig replicator on
refer:
add node multiserver
https://code.google.com/p/tungsten-replicator/wiki/TRCMultiMasterInstallation#Install_a_three_masters_replication
http://datacharmer.blogspot.com/2013/07/tpm-multi-master-composer.html
https://code.google.com/p/tungsten-replicator/wiki/TungstenReplicatorCookbook


ไม่มีความคิดเห็น:

แสดงความคิดเห็น