tungsten

#########################

Tungsten Replicator的基本支持
一、系統要求
ruby 1.8.5 or later (ruby --version)
Ruby openssl libraries ( echo "p 'OK'" | ruby -ropenssl )
Java 1.6 or later (java -version)
GNU tar (tar --version)
rsync 並啓動

二、用戶權限要求
1、新建用戶tungsten,且屬於mysql組,這樣tugsten纔有權限讀取MYSQL binlog目錄
useradd tungsten -g mysql
2、用戶必須能對所有服務器有SSH權限,且無需要密碼。可通過 ssh-agent來完成

 

 

 

 使用tungsten實現mysql-->mongodb的同步

 搭建tungsten-replicator
master端(mysql安裝略):

修改mysql的配置文件(/home/work/mysql_3306/conf/my.cnf)

log-bin=mysql-bin
server-id=1 #(注意這裏一定要server-id,而不是server_id)
open_files_limit = 65535
max_allowed_packet=52m
innodb_flush_lot_at_trx_commit=2
sync_binlog=1
binlog_checksum=none
character-set-server=utf8
collation-server=utf8_general_ci
innodb_flush_method=O_DIRECT

 

創建用於replicator連接mysql的用戶:

grant all privileges on *.* to tungsten@'%' identified by '123456' with grant option;

 

創建replicator:
tar -zxvf tungsten-replicator-3.0.0-524.tar.gz
cd tungsten-replicator-3.0.0-524
./tools/tpm install alpha \
--master=192.168.1.111 \
--datasource-mysql-conf=/home/work/mysql_3306/conf/my.cnf \
--install-directory=/home/work/tungsten \
--replication-user=tungsten \
--replication-password=123456 \
--replication-port=3306 \
--enable-heterogenous-master=true \
--property=replicator.filter.pkey.addColumnsToDeletes=true \
--property=replicator.filter.pkey.addPkeyToInserts=true \
--start

 

 

slave端(mongodb)

安裝mongodb

創建replicator
./tools/tpm install alpha \
--datasource-type=mongodb \
--install-directory=/home/work/tungsten \
--master=192.168.1.111 \
--members=192.168.1.222 \
--enable-heterogenous-slave=true \
--topology=master-slave \
--start=true

 

 

ssh等效配置:
主:

ssh-keygen -t rsa
ssh-keygen -t dsa

備:
ssh-keygen -t rsa
ssh-keygen -t dsa

在主上work用戶執行以下操作
cat ~/.ssh/id_rsa.pub >> ./.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >> ./.ssh/authorized_keys
ssh 192.168.1.111 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh 192.168.1.222 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys 192.168.1.222:~/.ssh/authorized_keys

有時會出現有一個節點能不使用密碼連上第二個節點,但另一個節點卻不行:
chmod -R 700 ~/.ssh


三、網絡要求
1、所有用戶可以通過hostname
hostname --ip-address必須返回一個IP(如果用IP方式可以不用配置host)

2、程序應用對外開放接口
3306 (MySQL database)
2112 (Tungsten THL)
10000 (Tungsten RMI)
10001 (JMX management)

四、數據庫要求
1、必須支持bin-log,且不同server有不同的server-id

設置MYSQL支持bin-log
修改配置文件my.cnf


點擊(此處)摺疊或打開

  1. [mysqld]
  2.     # Master replication settings.
  3.     log-bin=mysql-bin
  4.     server-id=1
  5.     max_allowed_packet=48m
  6.     innodb_flush_lot_at_trx_commit=2
  7.     sync_binlog=1

注:
default-storage-engine 必須爲innodb引擎
innodb_buffer_pool_size 512M爲最低設置
max_allowed_packet最低設置爲16M,建議48M。如果設置的較小,複製過程中將報錯 "Packet for query is too large"
innodb_flush_lot_at_trx_commit=2 and sync_binlog=1 ,此設置是爲防止BinLog崩潰,如未設置,install過程中會報warn
之後重新啓動MYSQL

binlog-ignore-db = tungsten_tungsten

執行tungsten會往數據庫裏寫數據,所所加上這句。不讓這句寫入binlog ;tungsten_服務名
2、數據庫必須支持innodb
默認搜索引擎要設置爲innodb
MYSQL5.1設置爲,修改配置文件my.cnf

default-table-type=innodb
MYSQL5.5默認引擎爲innodb,無需設置

3、必須有能所有SERVER都有權限的用戶,可通過mysql -u USER -pPASSWORD -P PORT -h HOST 連接
創建Tungsten Replicator數據用戶與數據庫,


點擊(此處)摺疊或打開

  1. mysql> grant all on *.* to root@'hostIP' identified by 'password' with grant option;
  2.     mysql> grant all on *.* to tungsten@'hostIP' identified by 'password' with grant option;

注:此處除了master與slave要相互有權限之外,還要對自己的localhost有權限;

Tungsten Replicator的安裝(Tungsten Replicator 2.0.4 及2.0.6亦可)
一、下載Tungsten Replicator


點擊(此處)摺疊或打開

cd /usr/local/src/
    wget http://tungsten-replicator.googlecode.com/files/tungsten-replicator-2.0.4.tar.gz
    tar zxvf tungsten-replicator-2.0.4.tar.gz
    mv tungsten-replicator-2.0.4 /usr/local/tungsten
    chown -R tungsten /usr/local/tungsten

二、用tungsten-installer安裝master-slave模式
可通過./tools/tungsten-installer --help-all 查看所有參數
datasource-user與password 要有權限均可以master與slave中執行MYSQL權限
service-name可以隨意取名
home-directory爲tungsten目錄
start-and-report 爲配置並啓動,用這個參數執行後會自動啓動replicator,並且conf中寫入services等相關配置


點擊(此處)摺疊或打開

./tools/tungsten-installer --master-slave
    --master-host=masterhost
    --datasource-user=tungsten
    --datasource-password=badpwd
    --datasource-port=3306
    --cluster-hosts=masterhost ,slavehost
    --service-name=tungsten
    --home-directory=/usr/local/tungsten
    --start-and-report

執行過程中,可能會出現SSH權限、MYSQL權限報錯、mysqldump路徑報錯等;
如果兩個HOST的SSH端口不是默認的22,要加入參數--net-ssh-option=port=19000

執行中會輸出 大概如下內容


點擊(此處)摺疊或打開

  1. ...
  2.     Processing services command...
  3.     NAME VALUE
  4.     ---- -----
  5.     appliedLastSeqno: -1
  6.     appliedLatency : -1.0
  7.     role : slave
  8.     serviceName : tungsten
  9.     serviceType : local
  10.     started : true
  11.     state : ONLINE
  12.     Finished services command...


只要SSH互通,slave暫時不需設置。
執行完成後,會同時在masterslave兩臺上出現tungsten_tungsten數據庫、同時有replicator進程,且打開10000端口;
查看tungsten_tungsten數據庫


點擊(此處)摺疊或打開

mysql> show tables;
    +-----------------------------+
    | Tables_in_tungsten_tungsten |
    +-----------------------------+
    | consistency |
    | heartbeat |
    | trep_commit_seqno |
    | trep_shard |
    +-----------------------------+
    4 rows in set (0.00 sec)


其中trep_commit_seqno 表會一直記錄最新的binlog和最新的posttion


點擊(此處)摺疊或打開

  1. mysql> select * from trep_commit_seqnoG;
  2.     *************************** 1. row ***************************
  3.     task_id: 0
  4.     seqno: 0
  5.     fragno: 0
  6.     last_frag: 1
  7.     source_id: 192.168.0.12
  8.     epoch_number: 0
  9.     eventid: mysql-bin.000039:0000000000000427;140
  10.     applied_latency: 0
  11.     update_timestamp: 2013-02-18 15:28:12
  12.     shard_id: tungsten_tungsten
  13.     extract_timestamp: 2013-02-18 15:28:12
  14.     1 row in set (0.00 sec)


更新數據內容後重新執行,查看數據ID已發生變化 ,且slave端數據庫已和master數據同步;

Tungsten Replicator的備份與恢復功能
Tungsten Replicator提供了簡單的備份與恢復的功能 ,使用了兩個簡單的plugins(mysqldump and xtrabackup)
配置文件中已經默認配置了BackUp相關功能,可做相應修改
配置文件位置爲/usr/local/tungsten/tungsten-replicator/conf/,列出如下幾個重要參數


點擊(此處)摺疊或打開

  1. less tungsten-replicator/conf/static-tungsten.properties |grep backup
  2.     replicator.backup.default=mysqldump
  3.     ...
  4.     replicator.backup.agent.mysqldump.mysqldumpOptions=--opt --all-databases --add-drop-database
  5.     replicator.storage.agent.fs.directory=/usr/local/tungsten/backups/tungsten
  6.     replicator.backup.agent.mysqldump.hotBackupEnabled=true
  7.     replicator.backup.agent.xtrabackup.hotBackupEnabled=true
  8.     replicator.backup.agent.xtrabackup.options=user=${replicator.global.db.user}&password=${replicator.global.db.password}&host=${replicator.global.db.host}&port=${replicator.global.db.port}&directory=/tmp/innobackup&archive=/tmp/innobackup.tar&mysqldatadir=/var/lib/mysql/&mysql_service_command=/etc/init.d/mysql


可在配置文件中加入replicator.auto_backup=true,設置自動備份
注:備份與恢復 都要在offline的情況下執行,狀態爲“OFFLINE:NORMAL”,如不正常情況會出現“OFFLINE:ERROR”,則會恢復失敗

查看Replicator當前狀態

  1. ./tungsten-replicator/bin/trepctl status
  2. ...
  3. state : ONLINE

設置爲offline狀態,並備份與恢復

  1. ./tungsten-replicator/bin/trepctl status
  2. ...
  3. state : OFFLINE:NORMAL
  4. Finished status command...
  1. # ./tungsten-replicator/bin/trepctl backup
  2. Backup completed successfully; URI=storage://file-system/store-0000000003.properties
  1. # ./tungsten-replicator/bin/trepctl restore -uri storage://file-system/store-0000000003.properties
  2. Restore is pending; check log for status

查看恢復後的文件,根據conf/static-tungsten.properties配置下的備份目錄查看

  1. # ls /usr/local/tungsten/backups/tungsten
  2. storage.index store-0000000002-mysqldump-1871676336962858846.sql store-0000000003.properties
  3. store-0000000001-mysqldump-341047084963524507.sql store-0000000002.properties
  4. store-0000000001.properties store-0000000003-mysqldump-4915067303150219872.sql

在Master/Slave模式下,新加Slave
在正常Master/Slave模式下,如果有其中一臺Slave壞掉,不影響正常的Tungsten-Replicator運行,但如果 Master失敗,則要重新都offline,然後保證數據一致性;
正常要加Slave,要同時offline 數據一致後,重新online,但因爲已經有一臺Slave,則可以避免Master的OFFLINE;思路爲用一臺Slave做一臺新Slave的供體,保證兩臺數據一致;
1、設置slave1 爲offline狀態 ,然後備份數據,然後再online,online後,會自動同步offline的過程中產生的master的數據

  1. trepctl -host slave1 offline
  2. trepctl -host slave1 backup
  3. trepctl -host slave1 online

2、在新的Slave上恢復數據,然後online

  1. trepstart
  2. trepctl -host newslave restore
  3. trepctl -host newslave online



 

 

 

 

 

 

 

###########################

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章