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
ไม่มีความคิดเห็น:
แสดงความคิดเห็น