騰訊資料庫tdsql部署與驗證

陳雷雷發表於2021-02-26

環境準備

| 主機   | IP            | 配置(最低要求配置) |
| :----- | ------------- | ------------------ |
| node-1 | 192.168.1.81  | 8核16G             |
| node-2 | 192.168.1.160 | 8核16G             |
| node-3 | 192.168.1.202 | 8核16G             |

自己整理的文件和部署包[7天有效期]:

連結:https://pan.baidu.com/s/1MS1YMx2IobyJYkghVqcHrQ 
提取碼:4osl 
複製這段內容後開啟百度網盤手機App,操作更方便哦--來自百度網盤超級會員V5的分享

物料包準備

tdsql_full_install_ansible_10.3.14.1.0_D002.zip
TDSQL私有云部署手冊 151.doc
每個伺服器準備2塊額外磁碟用於HDFS
下載地址:

配置要求:

測試環境:

至少需要3臺機器來搭建一個最小的TDSQL叢集(2臺物理機用於DB、1臺虛擬機器用於排程和運營體系部署)

元件 機器數 機器配置(CPU/記憶體/磁碟) 備註
zookeeper 1臺 虛擬機器 2C/4G/100G
keeper 0臺 虛擬機器 2C/4G/100G 可以與zookeeper同機部署
oss 0臺 虛擬機器 2C/4G/100G 可以與zookeeper同機部署
DB 2臺 物理機 8C/16G/500GSSD
Proxy 0臺 物理機 2C/4G/100G 可以與db機器同機部署
monitor 0臺 虛擬機器 2C/4G/100G 可以與zookeeper同機部署
chitu 0臺 虛擬機器 2C/4G/100G 可以與zookeeper同機部署
hdfs(可選) 1臺 物理機 4C/4G/1T 可選,磁碟容量看具體需求
LVS(可選) 2臺 物理機2C/4G/100G 可選
es 1臺 虛擬機器 2C/4G/100G
kafka 3臺 虛擬機器 2C/4G/100G 載入java虛擬機器的時候會吃掉3個g

正式環境:

元件 機器數 機器配置(CPU/記憶體/磁碟) 備註
zookeeper 3臺/5臺 虛擬機器8C/16G/500G
keeper 0臺 虛擬機器8C/16G/500G 可以與oss同機部署
oss 2臺 虛擬機器8C/16G/500G
DB 3*n臺 物理機 32C/64G/1T SSD 一主兩備,機器配置看具體需求
Proxy 3臺 物理機8C/16G/500G 可以與DB機器同機部署,機器配置看具體需求
monitor 3臺 虛擬機器 8C/16G/500G 可以與zookeeper同機部署
chitu 2臺 虛擬機器 8C/16G/500G 可以與zookeeper同機部署
hdfs(可選) 3臺 物理機8C/8G/12T 可選,磁碟容量看具體需求
LVS(可選) 2臺 物理機8C/16G/500G 可選
kafka(可選) 3臺 物理機8C/16G/2T 多源同步元件,萬兆網路卡
consumer(可選) 1臺 物理機8C/16G/500G 多源同步元件,可與kafka混部
es 1臺 物理機8C/16G/500G

當前環境規劃:

模組 192.168.1.81 192.168.1.160 192.168.1.202
zk Y Y Y
scheduler Y Y
oss Y Y
chitu Y Y
monitor(採集監控) Y Y
db Y Y
proxy Y Y
hdfs Y

TDSQL部署

免密配置

ssh-keygen -f ~/.ssh/id_rsa -N ''
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.81
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.160
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.202

解包

#解包
unzip tdsql_full_install_ansible_10.3.14.1.0_D002.zip

#執行pythin指令碼安裝ansible
cd tdsql_full_install_ansible
python settings/install_ansible.py


#格式化資料盤,新建data1目錄[所有機器]
mkfs.xfs -f /dev/sdb
mkdir -p /data1
mount /dev/sdb /data1

修改配置:

#vim group_vars/all (修改網路卡名和資料庫密碼)
sed -i 's/netif_name: .*$/netif_name: eth0/'  group_vars/all 
sed -i 's/tdsql_pass: .*$/tdsql_pass: a+complex+123456/' group_vars/all 
sh -x encrypt.sh

修改tdhost檔案:

[root@node-1 tdsql_full_install_ansible]# pwd
/root/tdsql_full_install_ansible

cat tdsql_hosts
#-------------------------------------------------------------#
[envcheck]
mac1 ansible_ssh_host=192.168.1.81
mac2 ansible_ssh_host=192.168.1.160
mac3 ansible_ssh_host=192.168.1.202

[zk]
zk1 ansible_ssh_host=192.168.1.81
zk2 ansible_ssh_host=192.168.1.202
zk3 ansible_ssh_host=192.168.1.160

[scheduler]
scheduler1 ansible_ssh_host=192.168.1.202
scheduler2 ansible_ssh_host=192.168.1.160

[oss]
oss1 ansible_ssh_host=192.168.1.202
oss2 ansible_ssh_host=192.168.1.160

[chitu]
chitu1 ansible_ssh_host=192.168.1.202
chitu2 ansible_ssh_host=192.168.1.160

[monitor]
monitor1 ansible_ssh_host=192.168.1.202
monitor2 ansible_ssh_host=192.168.1.160

[db]
db1 ansible_ssh_host=192.168.1.202
db2 ansible_ssh_host=192.168.1.160

[proxy]
proxy1 ansible_ssh_host=192.168.1.202
proxy2 ansible_ssh_host=192.168.1.160

[hdfs]
hdfs1 ansible_ssh_host=192.168.1.160

[es]
es1 ansible_ssh_host=192.168.1.81

[newdb]
newdb1 ansible_ssh_host=1.1.1.1
newdb2 ansible_ssh_host=2.2.2.2
newdb3 ansible_ssh_host=3.3.3.3
#-------------------------------------------------------------#

設定tdsql明文密碼

#假定我們給tdsql賬號設定的明文密碼為:a+complex+123456

cat group_vars/all
---
zk_num: 3                                       #<---填入zk叢集的數量,1、3或者5
netif_name: eth0                                #<---填入scheduler(ifconfig看到的)網路卡的名稱
tdsql_pass: a+complex+123456                    #<---填入tdsql賬號的明文密碼
zk_rootdir: /tdsqlzk2                           #<---填入tdsql系統在zk上的根路徑(一般不改)

metadb_ip: 1.1.1.1                              #<-----暫時不改動
metadb_port: 15001                              #<-----暫時不改動
metadb_ip_bak: 2.2.2.2                          #<-----暫時不改動
metadb_port_bak: 15001                          #<-----暫時不改動
metadb_user: tdsql_hanlon                       #<-----暫時不改動
metadb_password: 123456                         #<-----暫時不改動

ssh_port: 22                                    #<-----暫時不改動
hdfs_datadir: /data1/hdfs                       #<-----暫時不改動

kafka_logdir: /data1/kafka                      #<-----暫時不改動

es_mem: 8                                       #<-----暫時不改動
es_log_days: 7                                  #<-----暫時不改動
es_base_path: /data/application/es-install/es   #<-----暫時不改動

tdsql_secret_pass: K2JatUv5llBbMrske/k2YbqC     #<-------密文密碼,自動更新,切勿手動更改
oc_secret_pass: LGhVs0v5nVxcOLQie/k9bb2I        #<-------密文密碼,自動更新,切勿手動更改
clouddba_metadb_pass: h5Wyg2Xy                  #<-------密文密碼,自動更新,切勿手動更改



---
zk_num: 3
netif_name: eth0
tdsql_pass: a+complex+123456
zk_rootdir: /tdsqlzk2

metadb_ip: 1.1.1.1
metadb_port: 15001
metadb_ip_bak: 2.2.2.2
metadb_port_bak: 15001
metadb_user: tdsql_hanlon
metadb_password: 123456

ssh_port: 22
hdfs_datadir: /data1/hdfs

kafka_logdir: /data1/kafka

es_mem: 8
es_log_days: 7
es_base_path: /data/application/es-install/es

tdsql_secret_pass: K2JatUv5llBbMrske/k2YbqC
oc_secret_pass: LGhVs0v5nVxcOLQie/k9bb2I
clouddba_metadb_pass: h5Wyg2Xy

部署

#vim group_vars/all (修改網路卡名和資料庫密碼)
sed -i "s/netif_name:.*/netif_name: eth0/"  group_vars/all 
sed -i "s/tdsql_pass:.*/tdsql_pass: a+complex+123456/" group_vars/all

#安裝zk:
#使用tdsql安裝的zk
sh -x encrypt.sh
ansible-playbook -i tdsql_hosts part1_site.yml


#訪問任意節點:
[root@node-1 tdsql_full_install_ansible]# grep chitu tdsql_hosts
[chitu]
chitu1 ansible_ssh_host=192.168.1.202
chitu2 ansible_ssh_host=192.168.1.160

叢集配置

叢集初始化

新增機房

新增機型規格

proxy機型並非實際用到的 這裡隨便怎麼寫都行

新增TS80機型為後續資料庫使用的機型,配置如下

mkfs.xfs /dev/sdb
mkdir /data1
mount  /dev/sdb /data1

TS80機型配置:

資料磁碟目錄:
	建議是: /data1/tdengine/data

日誌磁碟目錄:
	建議是: /data1/tdengine/log

安裝包目錄:
	/data/home/tdsql/tdsqlinstall,固定不變

資料庫安裝目錄:
	/data/tdsql_run,固定不變
	
資料磁碟與日誌磁碟大小比例為 3:1

裝置資源新增

上報閘道器資源

這裡新增了3個閘道器資源並且對應了2個IDC,在組成閘道器組的時候可以選擇2個IDC取3個伺服器

上傳DB資源:

192.168.1.81 192.168.1.160 劃分到機房1 192.168.1.202劃分到機房2 用於組成叢集,並設定了3個閘道器

因為目前兩個機房有3臺伺服器,上報資源時上報了2個DB伺服器所以可以從2個機房取2臺伺服器

開始建立:

初始化完成後直接下一步:

安裝完成會直接跳轉到登入頁面:
http://192.168.1.160/tdsqlpcloud

測試tdsql連線

mysql -utdsqlpcloud -h192.168.1.160 -P15065 -p'123456'


[root@node-1 tdsql_full_install_ansible]# mysql -utdsqlpcloud -h192.168.1.160 -P15065 -p'123456'
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 3648
Server version: 5.7.17-11-V2.0R540D002-20191226-1152-log Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 

測試mysql連線無誤,將連線賬號密碼寫入到 group_vars/all 檔案中

---
zk_num: 3
netif_name: eth0
tdsql_pass: a+complex+123456
zk_rootdir: /tdsqlzk2

metadb_ip: 192.168.1.160                  #主庫IP
metadb_port: 15065                        #主庫埠
metadb_ip_bak: 192.168.1.202              #從庫IP
metadb_port_bak: 15065                    #從庫埠
metadb_user: tdsqlpcloud                  #資料庫連線賬號
metadb_password: 123456                   #資料庫連線密碼

ssh_port: 36000
hdfs_datadir: /data2/hdfs,/data3/hdfs,/data4/hdfs

kafka_logdir: /data2/kafka,/data3/kafka,/data4/kafka

es_mem: 8
es_log_days: 7
es_base_path: /data/application/es-install/es

tdsql_secret_pass: S8dfgSoMUjGaUn+EHkm3pA==
oc_secret_pass: TM1QhyoMWT2dWHCCHkm8qA==
clouddba_metadb_pass: h5Wyg2Xy

執行安裝part2_site.yml

#安裝大約4分鐘左右,日誌路徑/var/log/ansible.log,最終顯示failed任務數為0表示安裝成功。
sh -x encrypt.sh			<---------必須執行,更新密文密碼
ansible-playbook -i tdsql_hosts part2_site.yml


#找到安裝了 scheduler 的伺服器並執行:
[root@node-1 tdsql_full_install_ansible]# grep scheduler tdsql_hosts
[scheduler]
scheduler1 ansible_ssh_host=192.168.1.202
scheduler2 ansible_ssh_host=192.168.1.160


# ssh 192.168.1.202
cd /data/application/scheduler/bin
./agent_config --mode modify --option="ocagent_port" --value="8966"
./agent_config --mode modify --option="hadoop_dir" --value=" /data/home/tdsql/hadoop-3.2.1/bin"


#執行結果:
[root@node-1 tdsql_full_install_ansible]# ssh 192.168.1.202
Last login: Tue Feb 23 16:57:56 2021 from 192.168.1.81
[root@localhost ~]# cd /data/application/scheduler/bin
[root@localhost bin]# ./agent_config --mode modify --option="ocagent_port" --value="8966"
zookeeper timeout:10000 msec,msg timeout 30000 msec
zookeeper path:/tdsqlzk2/configs/agent@global
zookeeper value:{
   "hadoop_dir" : "/data/home/tdsql/hadoop-3.2.1/bin",
   "ocagent_port" : "8966"
}

operation success!
[root@localhost bin]# ./agent_config --mode modify --option="hadoop_dir" --value=" /data/home/tdsql/hadoop-3.2.1/bin"
zookeeper timeout:10000 msec,msg timeout 30000 msec
zookeeper path:/tdsqlzk2/configs/agent@global
zookeeper value:{
   "hadoop_dir" : " /data/home/tdsql/hadoop-3.2.1/bin",
   "ocagent_port" : "8966"
}

operation success!

安裝備用赤兔:

將已初始化的chitu機器上拷貝2個檔案到未初始化的chitu機器上,並刪除未初始化chitu機器上的crontab,如下:
192.168.1.202	已初始化chitu
192.168.1.160	未初始化chitu

(1)在202機器上,拷貝檔案到160機器上
scp -p /data/website/tdsqlpcloud/www/config/database.php 192.168.1.160:/data/website/tdsqlpcloud/www/config/
scp -p /data/website/tdsqlpcloud/www/config/install.lock 192.168.1.160:/data/website/tdsqlpcloud/www/config/

(2)刪除160機器上nginx使用者的crontab
[root@localhost bin]# ssh 192.168.1.160
[root@localhost ~]# cp -a /var/spool/cron/nginx /data/tools/nginx_cron_bak
[root@localhost ~]# rm -f /var/spool/cron/nginx

(3)測試,登入205的chitu
http://192.168.1.160/tdsqlpcloud

安裝HDFS服務

由於磁碟前面已經新增並格式化過,這裡不用操作了

#需要安裝hdfs的伺服器修改主機名[必須修改,因為我們的主機名存在 - 線 需要改成沒有特殊符號的]

#修改 tdsql_hosts 檔案,將需要安裝hdfs服務的伺服器新增上去,這裡就新增3臺hdfs
vim tdsql_hosts 新增hdfs配置:

[hdfs]
hdfs1 ansible_ssh_host=192.168.1.81
hdfs2 ansible_ssh_host=192.168.1.160
hdfs3 ansible_ssh_host=192.168.1.202



#安裝hdfs單點[適用於低配伺服器]:

#執行安裝
ansible-playbook -i tdsql_hosts hdfs_single.yml

#切換到tdsql使用者
su - tdsql

#用tdsql使用者在hdfs1機器上,格式化namenode
hdfs namenode -format

#用tdsql使用者在hdfs1機器上,啟動namenode和datanode
hdfs --daemon start namenode
hdfs --daemon start datanode

#附:用tdsql使用者關閉hdfs程式
hdfs --daemon stop datanode
hdfs --daemon stop namenode




#安裝hdfs高可用安裝啟動

#在安裝時需要保證主機名修改了
#[本文用多點,配置不高就用單點如果hdfs多點,那麼zk服務也需要是多點,因為之前配置的zk就是多點,這裡就可以繼續安裝多點hdfs,否則安裝單點]:

#每臺伺服器需要主機名不同 設定方法: hostnamectl set-hostname node1
ansible-playbook -i tdsql_hosts hdfs.yml

#初始化HDFS:
#用tdsql使用者在hdfs1機器,格式化zk
hdfs zkfc -formatZK

#用tdsql使用者在所有機器,啟動journalnode
hdfs --daemon start journalnode

#用tdsql使用者在hdfs1機器,格式化並啟動namenode
hdfs namenode -format
hdfs --daemon start namenode

#用tdsql使用者在hdfs2機器,格式化namenode
hdfs namenode -bootstrapStandby



#------------------------------啟動hdfs叢集------------------------------#
#用tdsql使用者在hdfs1機器,格式化並啟動 zk
su - tdsql
hdfs zkfc -formatZK   #格式化只能一次

#所有機器啟動 journalnode
hdfs --daemon start journalnode

#在hdfs1和hdfs2上啟動namenode
hdfs --daemon start namenode

#在hdfs1和hdfs2上啟動zkfc
hdfs --daemon start zkfc

#在所有hdfs機器上啟動datanode
hdfs --daemon start datanode
#------------------------------啟動hdfs叢集------------------------------#



#------------------------------停止hdfs叢集------------------------------#
在所有hdfs機器上關閉datanode
hdfs --daemon stop datanode

在hdfs1和hdfs2上關閉zkfc
hdfs --daemon stop zkfc

在hdfs1和hdfs2上關閉namenode
hdfs --daemon stop namenode

在所有hdfs機器上關閉journalnode
hdfs --daemon stop journalnode
#------------------------------停止hdfs叢集------------------------------#


# hdfs haadmin -getAllServiceState 命令執行失敗嘗試:
hdfs --daemon stop namenode
hdfs --daemon stop journalnode
hdfs --daemon start namenode
hdfs --daemon start journalnode
hdfs dfsadmin -report
hdfs haadmin -getAllServiceState

在hdfs叢集下檢視/tdsqlbackup路徑

(7)在hdfs叢集下檢視/tdsqlbackup路徑
用tdsql使用者執行以下命令
su -  tdsql

#檢視/tdsqlbackup目錄是否已經被自動建立,許可權是否是:tdsql supergroup 
hadoop fs -ls / 
drwxr-xr-x   - tdsql supergroup          0 2019-01-02 17:52 /tdsqlbackup

#如果目錄不在或者許可權不對,用下面命令修改:
hadoop fs -mkdir /tdsqlbackup
hadoop fs -chown tdsql.supergroup /tdsqlbackup

檢查HDFS埠並補充到 group_vars/all 檔案中

如果是3節點的hdfs架構,如上圖所示填寫namenode節點(一般2個)的50070埠

 /data2/hdfs /data3/hdfs /data4/hdfs
 將這些資訊填寫到all檔案中
 
 hdfs_datadir: /data2/hdfs,/data3/hdfs,/data4/hdfs

自動化演練

建立一個分散式例項:

相關文章