%>%
例如, 使用 Pipe:
packs <- c("leaflet", "magrittr")
for (i in 1:length(packs)){
install.packages(packs[i])
}
sapply(packs, library, character.only=T)
helloMap <- leaflet() %>%
addTiles() %>% #把預設的地圖圖層加入
addMarkers(lng=121.539366, lat=25.017326, popup="National Taiwan University")
helloMap
不使用 Pipe
# 如果你不習慣使用pipe run %>%
helloMap <- addMarkers(addTiles(leaflet()), lng=121.539366, lat=25.017326, popup="National Taiwan University")
helloMap
搜尋此網誌
2016年5月28日 星期六
2016年5月26日 星期四
Linux MongoDB Replication
寫在前面,避免踩到地雷。因為架設了環境,省略了DNS SERVER存在,所以就在各DB主機上,直接修改 hosts 圖方便,讓各DB主機可以相互用 hostname 找到對方,而不是用 IP 位置來找彼此。但是要注意:
不可以在扮演仲裁角色(arbiters)的主機上,hosts寫成這樣
127.0.0.1 mongodb4 mongodb4.hgdata.com.tw
正確應該是
192.168.1.xx mongodb4 mongodb4.hgdata.com.tw
否則仲裁角色主機會一直呈現 OTHER> 的提示,
從 telnet localhost 27017 失敗時候發現的
telnet localhost 27017 會失敗,但是
telnet 127.0.0.1 27017 卻成功。
=======================================
製作KEY ( 如不製作KEY 本節可以先忽略)
openssl rand -base64 741 > /var/lib/mongo/mongo-keyfile
chmod 600 mongo-keyfile
chown mongod.mongod /var/lib/mongo/mongo-keyfile
改 600 屬性,一定要作,不然無法啟動 MongoDB
把這 Key 放到每一台機器的 /var/lib/mongo/mongo-keyfile 檔案中。
接下來就要啟用 Replica Set 與認證模式。
vi /etc/mongod.conf
改以下
security:
keyFile: /var/lib/mongo/mongo-keyfile
重啟 MongoDB 服務
systemctl restart mongod
=======================================
架構上,分別有4台 MongoDB Server
192.168.1.51 Mondb1
192.168.1.52 Mondb2
192.168.1.53 Mondb3
192.168.1.54 Mondb4 規劃轉成仲裁角色,用來分配其他三台成員的角色
開始:
vi /etc/mongod.conf
改以下
replication:
oplogSizeMB: 10240
replSetName: "rs1"
重啟 MongoDB 服務
systemctl restart mongod
=======================================
從 192.168.1.21 輸入 mongo 進去 concole
確認
rs.status()
初使化 replSet
rs.initiate()
再確認
rs.status()
會看到PRIMARY字眼,表示初始化完成
加入第二台DB
rs.add("192.168.1.22:27017")
rs.add("192.168.1.23:27017")
加入仲裁主機
rs.addArb("192.168.1.24:27017")
從 192.168.1.21 再確認
rs.status()
看到 192.168.1.22 是
"health" : 1,
"state" : 0,
"stateStr" : "STARTUP"
state的意義
0 Phase 1, starting up
1 Primary member
2 Secondary member
然後發現 192.168.1.21 變成了 rs1:SECONDARY> 提示
意思各主機之間選舉完成,該主機已經轉型成 SECONDARY 角色
*** 到 192.168.1.22 主機上
初使化 replSet
rs.initiate()
確認
rs.status()
然後發現 192.168.1.22 變成了 rs1:PRIMARY> 提示
*** 到 192.168.1.23 主機上
初使化 replSet
rs.initiate()
注意:如果 /etc/mongod.conf 裡面的設定是 bindIp: 127.0.0.1 就會失敗
確認
rs.status()
然後發現 192.168.1.23 變成了 rs1:PRIMARY> 提示
-----------------------------------------------
END
-----------------------------------------------
查看複制集狀態
rs.status()
rs.isMaster();
以rs.help() 顯示更多 rs指令
以db.help() 顯示更多 db指令
db.oplog.rs.find();
db.printReplicationInfo();
db.printSlaveReplicationInfo();
db.system.replset.find();
db.getMongo().setSlaveOk();
增加節點
rs.add("localhost:28013")
rs.status();
減少節點
rs.remove("localhost:28014")
不可以在扮演仲裁角色(arbiters)的主機上,hosts寫成這樣
127.0.0.1 mongodb4 mongodb4.hgdata.com.tw
正確應該是
192.168.1.xx mongodb4 mongodb4.hgdata.com.tw
否則仲裁角色主機會一直呈現 OTHER> 的提示,
從 telnet localhost 27017 失敗時候發現的
telnet localhost 27017 會失敗,但是
telnet 127.0.0.1 27017 卻成功。
=======================================
製作KEY ( 如不製作KEY 本節可以先忽略)
openssl rand -base64 741 > /var/lib/mongo/mongo-keyfile
chmod 600 mongo-keyfile
chown mongod.mongod /var/lib/mongo/mongo-keyfile
改 600 屬性,一定要作,不然無法啟動 MongoDB
把這 Key 放到每一台機器的 /var/lib/mongo/mongo-keyfile 檔案中。
接下來就要啟用 Replica Set 與認證模式。
vi /etc/mongod.conf
改以下
security:
keyFile: /var/lib/mongo/mongo-keyfile
重啟 MongoDB 服務
systemctl restart mongod
=======================================
架構上,分別有4台 MongoDB Server
192.168.1.51 Mondb1
192.168.1.52 Mondb2
192.168.1.53 Mondb3
192.168.1.54 Mondb4 規劃轉成仲裁角色,用來分配其他三台成員的角色
開始:
vi /etc/mongod.conf
改以下
replication:
oplogSizeMB: 10240
replSetName: "rs1"
重啟 MongoDB 服務
systemctl restart mongod
=======================================
從 192.168.1.21 輸入 mongo 進去 concole
確認
rs.status()
初使化 replSet
rs.initiate()
再確認
rs.status()
會看到PRIMARY字眼,表示初始化完成
加入第二台DB
rs.add("192.168.1.22:27017")
rs.add("192.168.1.23:27017")
加入仲裁主機
rs.addArb("192.168.1.24:27017")
從 192.168.1.21 再確認
rs.status()
看到 192.168.1.22 是
"health" : 1,
"state" : 0,
"stateStr" : "STARTUP"
state的意義
0 Phase 1, starting up
1 Primary member
2 Secondary member
然後發現 192.168.1.21 變成了 rs1:SECONDARY> 提示
意思各主機之間選舉完成,該主機已經轉型成 SECONDARY 角色
*** 到 192.168.1.22 主機上
初使化 replSet
rs.initiate()
確認
rs.status()
然後發現 192.168.1.22 變成了 rs1:PRIMARY> 提示
*** 到 192.168.1.23 主機上
初使化 replSet
rs.initiate()
注意:如果 /etc/mongod.conf 裡面的設定是 bindIp: 127.0.0.1 就會失敗
確認
rs.status()
然後發現 192.168.1.23 變成了 rs1:PRIMARY> 提示
確認本機DB 角色是否為 Master, 指令:
rs.isMaster()
END
-----------------------------------------------
查看複制集狀態
rs.status()
rs.isMaster();
以rs.help() 顯示更多 rs指令
以db.help() 顯示更多 db指令
db.oplog.rs.find();
db.printReplicationInfo();
db.printSlaveReplicationInfo();
db.system.replset.find();
db.getMongo().setSlaveOk();
增加節點
rs.add("localhost:28013")
rs.status();
減少節點
rs.remove("localhost:28014")
2016年5月25日 星期三
Centos7 安裝 MongoDB
由於 selinux 會影響 mongodb 的啟動,所以
vi /etc/selinux/config
SELINUX=disabled
然後重啟 OS
1. 加入 MongoDB Repository
vi /etc/yum.repos.d/mongodb.repo
參考 https://www.mongodb.com/download-center?jmp=nav#community
OS 是 64-Bit 的話
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
2. 安裝 3.4.x:
yum install -y mongodb-org
(會自動安裝五個套件:
mongodb-org-3.4.x
mongodb-org-server
mongodb-org-shell
mongodb-org-tools
mongodb-org-mongos
)
3. 修改
vi /etc/mongod.conf
先將預設的 bind IP 127.0.0.1 修改為 0.0.0.0
vi /etc/security/limits.d/20-nproc.conf
尾巴加一行後存檔
mongod soft nproc 500000
4. 防火牆設定
systemctl stop firewalld
systemctl disable firewalld
或者是
firewall-cmd --permanent --zone=public --add-port=27017/tcp
firewall-cmd --reload
systemctl restart mongod
5. 啟動與查服務的狀態
systemctl enable mongod
systemctl start mongod
ps auxw | grep mongod
systemctl status mongod
如果無法執行,可以考慮兩個方向:
1. SELINUX=disabled
vi /etc/selinux/config
SELINUX=disabled
2. 如果 SELinux 是enforcing 模式,則
yum -y install policycoreutils-python
semanage port -a -t mongod_port_t -p tcp 27017
查 LOG
/var/log/mongodb/mongod.log
6. 最後參照官網教學 Disable Transparent Huge Pages ( Link )
vi /etc/init.d/disable-transparent-hugepages
填入以下腳本檔內容
chmod 755 /etc/init.d/disable-transparent-hugepages
根據 OS 的不同,參考以下指令:
將作業系統重新開機,登入之後 啟動 mongo 確認是否還有警告提示
vi /etc/selinux/config
SELINUX=disabled
然後重啟 OS
1. 加入 MongoDB Repository
vi /etc/yum.repos.d/mongodb.repo
參考 https://www.mongodb.com/download-center?jmp=nav#community
OS 是 64-Bit 的話
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
2. 安裝 3.4.x:
yum install -y mongodb-org
(會自動安裝五個套件:
mongodb-org-3.4.x
mongodb-org-server
mongodb-org-shell
mongodb-org-tools
mongodb-org-mongos
)
3. 修改
vi /etc/mongod.conf
先將預設的 bind IP 127.0.0.1 修改為 0.0.0.0
vi /etc/security/limits.d/20-nproc.conf
尾巴加一行後存檔
mongod soft nproc 500000
4. 防火牆設定
systemctl stop firewalld
systemctl disable firewalld
或者是
firewall-cmd --permanent --zone=public --add-port=27017/tcp
firewall-cmd --reload
systemctl restart mongod
5. 啟動與查服務的狀態
systemctl enable mongod
systemctl start mongod
ps auxw | grep mongod
systemctl status mongod
如果無法執行,可以考慮兩個方向:
1. SELINUX=disabled
vi /etc/selinux/config
SELINUX=disabled
2. 如果 SELinux 是enforcing 模式,則
yum -y install policycoreutils-python
semanage port -a -t mongod_port_t -p tcp 27017
查 LOG
/var/log/mongodb/mongod.log
6. 最後參照官網教學 Disable Transparent Huge Pages ( Link )
vi /etc/init.d/disable-transparent-hugepages
填入以下腳本檔內容
#!/bin/bash ### BEGIN INIT INFO # Provides: disable-transparent-hugepages # Required-Start: $local_fs # Required-Stop: # X-Start-Before: mongod mongodb-mms-automation-agent # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Disable Linux transparent huge pages # Description: Disable Linux transparent huge pages, to improve # database performance. ### END INIT INFO case $1 in start) if [ -d /sys/kernel/mm/transparent_hugepage ]; then thp_path=/sys/kernel/mm/transparent_hugepage elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then thp_path=/sys/kernel/mm/redhat_transparent_hugepage else return 0 fi echo 'never' > ${thp_path}/enabled echo 'never' > ${thp_path}/defrag re='^[0-1]+$' if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]] then # RHEL 7 echo 0 > ${thp_path}/khugepaged/defrag else # RHEL 6 echo 'no' > ${thp_path}/khugepaged/defrag fi unset re unset thp_path ;; esac設定可執行權限
chmod 755 /etc/init.d/disable-transparent-hugepages
根據 OS 的不同,參考以下指令:
Distribution | Command |
---|---|
Ubuntu and Debian | sudo update-rc.d disable-transparent-hugepages defaults
|
SUSE | sudo insserv /etc/init.d/disable-transparent-hugepages
|
Red Hat, CentOS, Amazon Linux, and derivatives |
sudo chkconfig --add disable-transparent-hugepages
|
2016年5月24日 星期二
LINUX 設定固定IP
當只有一張網卡時,網路設定檔位於
/etc/sysconfig/netwotk-scripts/ifcfg-eth0
BOOTPROTO="dhcp" //若為固定IP則為BOOTPROTO="none"
ONBOOT="yes"
IPADDR=192.168.1.168
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
DNS1=168.95.1.1
DNS2=8.8.8.8
修改存檔後重新啟動網路設定
service network restart
或
/etc/init.d/network restart
/etc/sysconfig/netwotk-scripts/ifcfg-eth0
BOOTPROTO="dhcp" //若為固定IP則為BOOTPROTO="none"
ONBOOT="yes"
IPADDR=192.168.1.168
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
DNS1=168.95.1.1
DNS2=8.8.8.8
修改存檔後重新啟動網路設定
service network restart
或
/etc/init.d/network restart
2016年5月23日 星期一
安裝 ajenti
透過 Ajenti 使得我們在不同版本的 Linux 可以在系統管理方面尚取得較一致性的經驗
安裝步驟如下:
install (CentOS 7 / RHEL7)
rpm -Uvh http://mirror01.idc.hinet.net/EPEL/7/x86_64/e/epel-release-7-8.noarch.rpm
Add repository key:
wget http://repo.ajenti.org/ajenti-repo-1.0-1.noarch.rpm
rpm -i ajenti-repo-1.0-1.noarch.rpm
Install the package:
yum -y install ajenti
Start the service:
systemctl enable ajenti
systemctl restart ajenti
防火牆要打開 8000 port
firewall-cmd --permanent --zone=public --add-port=8000/tcp
firewall-cmd --reload
預設登入網址 https://<ServerIP>:8000
預設帳號與密碼是 root/admin
如果發生 https 無法成功登入,可以修改/etc/ajenti/config.json
將 "ssl": {
"enable": ture 改成 false
然後重啟服務
systemctl restart ajenti
2016年5月22日 星期日
R 繪圖
畫布
par(mfrow=c(1,1))
長條圖bar plot
直方圖histogram
盒鬚圖boxplot
散佈圖scatter plot
線圖line graph
線條的類型與寬度
使用`lty=#`與`lwd=#`來選擇線條的樣式與寬度。
## Reference
* R in Action, Robert I. Kabacoff
* R Graphics Cookbook, Winston Chang
* R Graphs Cookbook, Hrishi V. Mittal
par(mfrow=c(1,1))
長條圖bar plot
直方圖histogram
盒鬚圖boxplot
散佈圖scatter plot
線圖line graph
線條的類型與寬度
使用`lty=#`與`lwd=#`來選擇線條的樣式與寬度。
## Reference
* R in Action, Robert I. Kabacoff
* R Graphics Cookbook, Winston Chang
* R Graphs Cookbook, Hrishi V. Mittal
訂閱:
文章 (Atom)