Bài đăng nổi bật

Hướng dẫn thay đổi thư mục root mặc định của Docker trên Linux

Hoàn cảnh: người viết gặp một trường hợp như này Được team hạ tầng cấp cho một máy chủ gồm 2 phân vùng lưu trữ, 1 phân vùng 20GB được gắn và...

27 tháng 10, 2018

Mẹo nhỏ để học một ngôn ngữ lập trình mới

Bài viết này mình viết để hướng dẫn các bạn lập trình viên cách để học một ngôn ngữ lập trình mới.
Yêu cầu:

  • Bạn phải nắm vững một ngôn ngữ lập trình trước đó, mình khuyên nên là Java hoặc C vì 2 ngôn ngữ này có cách viết khá hệ thống và quy củ, các ngôn ngữ khác khiến người học bị rối khi chuyển ngôn ngữ nên mình không khuyên dùng (theo ý kiến chủ quan thì một số ngôn ngữ đó là Ruby on rails, Python, PHP)
  • Hãy tự tạo cho mình một phong cách viết code riêng (ví dụ cách thụt đầu dòng, cách đặt dấu '{') để tránh bị rối khi học quá nhiều ngôn ngữ lập trình.
  • Loại bỏ tư tưởng bắt buộc ngôn ngữ mới phải có được những tính năng như ngôn ngữ cũ (ví dụ đừng đòi hỏi java phải có con trỏ giống như C).
  • Khi gặp các ví dụ trong ngôn ngữ mới, hãy gõ lại nó bằng tay, tự chạy nó để cảm nhận.
  • Hãy viết ngôn ngữ mới theo cách mình đã viết ngôn ngữ cũ, ví dụ mình có thể viết javascript theo phong cách viết của Java (điều này rất tiện cho mình khi quay lại đọc code sau này, và đỡ phải nhớ quá nhiều quy ước viết code)
Kết quả mong muốn:

  • Nắm được cách sử dụng ngôn ngữ lập trình mới ở mức cơ bản (Cách sử dụng nâng cao hơn bạn sẽ tự hình thành được trong quá trình sử dụng ngôn ngữ lập trình này)
  • Lập trình Hello world không gặp lỗi ^.^
Bạn chuẩn bị những thứ như sau:

  • Lựa chọn một ebook dạy ngôn ngữ đó (nếu có), mình khuyên nên chọn những cuốn có tiêu đề kiểu "Học trong 7 ngày", "Học trong 21 ngày" vì thường những cuốn này có nội dung rất cô đọng và dễ hiểu.
  • Cài đặt IDE phù hợp, cái này thì tùy bạn chọn, các hướng dẫn cài đặt rất nhiều trên mạng.
Rồi, giờ là thứ tự học:
  • Học cách khai báo biến, các kiểu biến như số nguyên, xâu, số thực,...(trừ một số kiểu phức tạp như array, list, map,...)
  • Học các phép toán: cộng, trừ, nhân, chia, số mũ,...
  • Học cách sử dụng lệnh rẽ nhánh.
  • Học cách sử dụng vòng lặp.
  • Học cách sử dụng mảng, danh sách, từ điển (dictionary)
  • Học cách sử dụng hàm: tạo hàm, gọi hàm
  • Học về phạm vi của biến: toàn cục (local) hay toàn bộ (global)
  • Học cách sử dụng class: hàm khởi tạo, hàm, thuộc tính.
  • Học cách khai báo Object
  • Học mở rộng, nếu muốn:
    • Kế thừa.
    • Import thư viện
    • Học cách bắt Exception
    • Cách sử dụng comment
Với cách học này, mình thường chỉ tốn tối đa là 7 ngày để nắm được cách sử dụng một ngôn ngữ mới :)
Chúc các bạn vui vẻ,

19 tháng 9, 2018

Cài đặt Kerberos trên Linux

Lưu ý: Kerberos sử dụng giao thức dựa trên việc đồng bộ thời gian giữa các server thành phần nên yêu cầu các server phải đồng bộ thời gian với nhau ==> Sử dụng NTP. Thời gian lệch giữa các client  tối đa là 5 phút.

Cài đặt server KDC:

Bước 1: cài đặt phiên bản mới nhất của KDC

RHEL/CentOS/Oracle Linux
yum install krb5-server krb5-libs krb5-workstation
SLES
zypper install krb5 krb5-server krb5-client
Ubuntu/Debian
apt-get install krb5-kdc krb5-admin-server

Bước 2: Sửa file

vi /etc/krb5.conf
Đổi phần [realms] thành hostname của máy chủ cài đặt KDC, ví dụ:

[realms]
EXAMPLE.COM = {
   kdc = my.kdc.server
   admin_server = my.kdc.server
}

Bước 3: Một số thành phần, ví dụ HUE, yêu cầu phải có một ticket có thể làm mới được vì thế cần cấu hình để KDC hỗ trợ yêu cầu này bằng cách thêm tùy chọn sau vào file /etc/krb5.conf:
renew_lifetime = 7d

Lưu ý: Trên Ubuntu/Debian, các bước thiết lập được thực hiện khi cài đặt mới KDC, bạn có thể cài đặt lại bằng cách chạy lệnh dpkg-reconfigure krb5-kdc, vì thế có thể bỏ qua bước 1 và 2 ở trên.

Tạo cơ sở dữ liệu cho Kerberos:

Bước 1: Sử dụng tool kdb5_util:

RHEL/CentOS/Oracle Linux
kdb5_util create -s
SLES
kdb5_util create -s
Ubuntu/Debian
krb5_newrealm

Nhập mật khẩu cho database (lưu ý phải nhớ mật khẩu này, nếu không thì không thể giải mã được dữ liệu nữa)

Bước 2: khởi động máy chủ KDC và máy chủ quản trị KDC

RHEL/CentOS/Oracle Linux 6
/etc/rc.d/init.d/krb5kdc start
/etc/rc.d/init.d/kadmin start
RHEL/CentOS/Oracle Linux 7
systemctl start krb5kdc
systemctl start kadmin
SLES 11
rckrb5kdc start
rckadmind start
SLES 12
systemctl start krb5kdc
systemctl start kadmind
Ubuntu/Debian
service krb5-kdc restart
service krb5-admin-server restart

Bước 3(tùy chọn): khởi động KDC cùng với máy bằng cách:
RHEL/CentOS/Oracle Linux 6
chkconfig krb5kdc on
chkconfig kadmin on
RHEL/CentOS/Oracle Linux 7
systemctl enable krb5kdc
systemctl enable kadmin
SLES 11
chkconfig rckrb5kdc on
chkconfig rckadmind on
SLES 12
systemctl enable krb5kdc
systemctl enable kadmind
Tạo tài khoản quản trị Kerberos:
Có thể tạo tài khoản này từ các máy chạy KDC trong cùng mạng, sử dụng quyền admin. Trong hướng dẫn này, giả sử bạn sử dụng kadmin.local trên máy chạy KDC. kadmin.local cho phép bạn phân quyền mà không cần sử dụng tài khoản admin.
Bước 1: tạo tài khoản admin
kadmin.local -q "addprinc admin/admin"
Bước 2: xác nhận lại tài khoản này có đủ quyền cần thiết trong KDC ACL bằng cách kieer tra file kadm5.acl
RHEL/CentOS/Oracle Linux
vi /var/kerberos/krb5kdc/kadm5.acl
SLES
vi /var/lib/kerberos/krb5kdc/kadm5.acl
Ubuntu/Debian
vi /etc/krb5kdc/kadm5.acl
Ví dụ bạn có tài khoản admin@EXAMPLE.COM, bạn cần thêm dòng sau vào file:
*/admin@EXAMPLE.COM *
Bước 3: khởi động lại kadmin:
RHEL/CentOS/Oracle Linux 6
/etc/rc.d/init.d/kadmin restart
RHEL/CentOS/Oracle Linux 7
systemctl restart kadmin
SLES
rckadmind restart
Ubuntu/Debian
service krb5-admin-server restart

Bài tham khảo: https://docs.hortonworks.com/HDPDocuments/Ambari-2.5.0.3/bk_ambari-security/content/optional_install_a_new_mit_kdc.html

07 tháng 9, 2018

Tản mạn một vài dạng lưu trữ database

1. Hbase

Hbase lưu trữ dữ liệu theo cấu trúc column family.
Có thể nhìn vào hình sau để hình dung:



Trong đó:

  • Một table có thể có nhiều column family.
  • Một column family có thể có nhiều column.
Một số note:
  • Có thể query Hbase theo dạng sql bằng cách sử dụng Hive
2.  MongoDB:
MongoDB lưu trữ dữ liệu phẳng dạng Json:
Có thể nhìn vào hình sau để hình dung:

03 tháng 1, 2017

Hướng dẫn sử dụng Iptables nâng cao

Trong bài viết trước tôi đã có giới thiệu các kiến thức cơ bản về iptables.
Trong bài này, tôi sẽ hướng dẫn cụ thể các bạn cách sử dụng iptables để bảo vệ hệ thống của mình.

Một lưu ý trước khi sử dụng iptables để tránh xảy ra các vấn đề không mong muốn:

  • Nên bắt đầu sử dụng Iptables với hướng tiếp cận Accept từ mọi nguồn hoặc Drop từ mọi nguồn (Cái này bạn cần xác định xem nhu cầu của mình là số lượng cổng mở nhiều hơn hay số lượng cổng muốn đóng là nhiều hơn - tương ứng với Accept all và Drop all)
  • Nên cho một địa chỉ nguồn nằm trong danh sách Accept all để tránh việc sau khi chạy iptable ta không thể remote hệ thống.
  • Mức độ ưu tiên sẽ là từ trên xuống và nếu gặp một luật khớp thì các luật phía sau sẽ bị bỏ qua.
Dưới đây là một số tùy chọn thường dùng:
  • A: nối tiếp luật vào một bảng luật có sẵn. Ví dụ nếu ta dùng:
    iptables -A INPUT -s 1.2.3.4 -j DROP
    Có nghĩa là thêm một luật vào cuối cùng của bảng INPUT.
  • I: chèn luật lên đầu một bảng luật có sẵn.
  • s: ip máy chủ sẽ được áp dụng luật.
  • j: luật sẽ áp dụng là gì.
    ACCEPT: cho phép thông luồng
    DROP: cấm luồng và không thông báo gì cho máy kết nối
    REJECT: cấm luồng và thông báo cho máy kết nối
    LOG: thông luồng nhưng có ghi lại log.
  • dport: cổng áp dụng là gì.
  • m -conntrack: áp dụng luật với trạng thái của kết nối (thường đi với tùy chọn --ctstate)
  • ctstate: định nghĩ các trạng thái sẽ áp dụng luật, bao gồm:
    NEW: là các kết nối mới mà hệ thống chưa gặp bao giờ.
    RELATED: là kết nối mới nhưng có liên quan tới kết nối đã được cho phép.
    ESTABLISHED: là kết nối đã được thiết lập.
    INVALID: là kết nối mà hệ thống không thể nhận diện.
  • p: giao thức của kết nối, có thể là TCP hoặc UDP
  • i: giao diện kết nối.
  • d: đích kết nối.
Dưới đây là một số thủ thuật khi sử dụng Iptables:
  • Với tham số "d", Ip có thể có định dạng a.b.c.d/x.y.z.w, hoặc a.b.c.d/x. Trong đó a.b.c.d là địa chỉ IP còn x.y.z.w hoặc x là IP mask.
  • Với tham số "i", đầu vào có thể sử dụng thêm tùy chọn:
    • ! - nghĩa là áp dụng trừ giao diện này.
    • + - nghĩa là chỉ áp dụng giao diện này.
  • Với tham số dport: có thể chỉ ra dải cổng cần tác động theo cấu trúc a:b, là cổng tác động bắt đầu từ a tới b.

Tham khảo:

01 tháng 12, 2016

Hướng dẫn cài đặt Maven trên Centos

Trong bài viết này, tôi sẽ giới thiệu về cách cài đặt Maven trên môi trường Centos.
Yêu cầu:

  • Bạn phải có quyền sudo trên hệ thống.
  • Bạn phải cài đặt JDK trên hệ thống.
  • Download bộ cài Maven từ địa chỉ http://maven.apache.org/download.cgi
Các bước thực hiện:

  • Giải nén bộ cài bằng lệnh (chú ý thay đổi thông tin phiên bản cho phù hợp):
    sudo tar xzf apache-maven-3.0.5-bin.tar.gz -C /usr/local
  • Chuyển tới thư mục /usr/local.
  • Tạo link với thư mục Maven bằng lệnh (chú ý thay đổi phiên bản cho phù hợp):
    sudo ln -s apache-maven-3.0.5 maven
  • Tạo biến môi trường cho hệ thống bằng cách tạo tập tin maven.sh như sau:
    sudo vi /etc/profile.d/maven.sh
    export M2_HOME=/usr/local/maven
    export PATH=${M2_HOME}/bin:${PATH}
  • Cuối cùng logout và login lại rồi kiểm tra bằng lệnh
    mvn -version
    Nếu thấy hiện ra phiên bản của maven là được.
Lưu ý nếu bạn cài maven trong môi trường proxy thì cần thêm nội dung sau để sử dụng:
  • Tạo tập tin settings.xml bằng lệnh:
    vi ~/.m2/settings.xml
  • Nội dung của tập tin sẽ như sau:
    
      
        
          true
          http
          proxy.host.com
          port_number
          proxy_user
          proxy_user_password
          www.google.com
        
      
    
  • Trong đó:
    •  proxy.host.com là địa chỉ máy chủ proxy.
    • port_number là cổng máy chủ proxy
    • proxy_user là user để đăng nhập proxy.
    • proxy_user_pasword là mật khẩu đăng nhập proxy
    • nonProxyHosts là các host không cần phải qua proxy
Tham khảo thêm tại địa chỉ:

12 tháng 11, 2016

Hướng dẫn cài đặt Hbase ở chế độ Distributed

Tiếp tục loạt bài hướng dẫn làm quen với BigData, hôm nay tôi sẽ hướng dẫn các bạn cách cài đặt Hbase.
Hbase là gì thì các bạn có thể tìm thông tin trên mạng.
Bài này được tóm tắt từ công việc thực tế của tác giả (mất 2 ngày ngồi ngẫm nghĩ và xử lý các vấn đề phát sinh) vì thế nên tỉ lệ cài thành công khá cao, nên nếu gặp lỗi thì chắc chắn bạn đã làm sai ở một bước nào đó.
Bài viết giả sử bạn đã cài đặt thành công Hadoop ở chế độ Distrubted từ trước.
1. Cài đặt HBase
Bạn có thể download bộ cài Hbase tại đây: http://www-us.apache.org/dist/hbase/
Tiến hành giải nén Hbase vào thư mục /opt/:
$ tar -xzf hbase-0.98.18-hadoop2-bin.tar.gz
Thêm biến môi trường vào tập tin ~/.bash_profile với nội dung sau:
export HBASE_HOME="/opt/hbase"
export PATH="$HBASE_HOME/bin:$PATH"
Kiểm tra xem đã cài đặt thành công chưa bằng lệnh:
hbase version
2. Cấu hình cho HBase
Sửa nội dung tập tin /opt/hbase/conf/hbase-env.sh với nội dung sau:
export JAVA_HOME=/usr/java/default
export HBASE_MANAGES_ZK=true
export HBASE_PID_DIR=/opt/hbase/var
Lưu ý:

  • Nếu HBASE_MANAGES_ZK = true tức là ta không phải cài thêm zookeeper nữa mà HBase sẽ tự quản lý bằng Zookeeper của mình (Cài đặt ZooKeeper riêng như nào sẽ được giới thiệu trong một bài viết khác)
  • HBASE_PID_DIR là thư mục đặt file pid của HBase, nếu chưa có thì phải tự tạo.
Tiếp tục sửa nội dung tập tin /opt/hbase/conf/hbase-site.xml và thêm vào nội dung sau;

        
                hbase.master
                sglamp.edumall.co.th:60000
        
        
                hbase.master.info.port
                60010
        
        
                hbase.rootdir
                hdfs://sglamp.edumall.co.th:9000/hbase
        
        
                hbase.cluster.distributed
                true
        
        
                
                        hbase.zookeeper.property.dataDir
                
                hdfs://sglamp.edumall.co.th:9000/zookeeper
        
        
                hbase.zookeeper.quorum
                sglamp2.edumall.co.th
        
        
                hbase.zookeeper.property.clientPort
                2181
        
        
                hbase.zookeeper.property.maxClientCnxns
                1000
        

Lưu ý:

  • Cần cấu hình thông tin  hbase.master.info.port thì mới có web ui để xem, nếu muốn disable thì bỏ dong này đi.
  • Số lượng Zookeeper quorum nên là số lẻ.
  • hbase.cluster.distributed phải là true.
  • hbase.master.info.port phải được để trên mọi file hbase-site.xml của các node.
Mở tập tin /opt/hbase/conf/regionservers trên tất cả các node của Hbase và thêm nội dung sau:
node1
node2
Trong đó nodex là hostname của tất cả các node trên Hbase.
3. Chạy Hbase
Để khởi động Hbase ta chạy lệnh sau:
/opt/hbase/bin/shServer.sh start 
Để tắt Hbase ta chạy lệnh sau:
/opt/hbase/bin/shServer.sh stop 

10 tháng 11, 2016

Cài đặt Hadoop trên môi trường multinode

Trong bài viết trước tôi đã hướng dẫn các bạn tiến hành cài Hadoop trong môi trường single node. Tuy nhiên đây chỉ là môi trường để test, thực tế không ai sử dụng Hadoop trên một máy chủ cả.
Vì vậy trong bài này tôi sẽ tiếp tục hướng dẫn các bạn cách cài Hadoop trong môi trường multi server.
Các bước chuẩn bị bạn làm y hệt như trong bài hướng dẫn này và dừng lại sau bước tạo ssh-key.
Ở đây, tôi giả định bạn đang để các máy có IP như sau (cấu hình file hosts):
192.168.1.109 master.hadoop.com
192.168.1.145 slave.hadoop.com

Cấu hình ssh-key cho các máy chủ
Bạn chạy lệnh sau để cấu hình:
# su hadoop
$ ssh -keygen -t rsa 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@master.hadoop.com 
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@slave.hadoop.com 
$ chmod 0600 ~/.ssh/authorized_keys 
$ exit
Download và giải nén bộ cài hadoop vào thư mục /opt/hadoop như sau:
Quay về tài khoản root nếu đang ở tài khoản khác. 
Tải về Hadoop (lưu ý có thể chọn phiên bản khác tùy ý):
wget http://www-eu.apache.org/dist/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
Giải nén file vừa tải về:
tar xfz hadoop-2.7.2.tar.gz
Tạo thư mục lưu các tập tin của Hadoop:

mkdir /opt/hadoop
mv hadoop-2.7.2/* /opt/hadoop

 Đổi quyền cho thư mục:

chown -R hadoop:hadoop /opt/hadoop/

Kiểm tra lại các tập tin đã nằm ở thư mục chỉ định hay chưa:

ls /opt/hadoop

nếu thấy output như sau thì được:

LICENSE.txt  README.txt  etc      lib      sbin
NOTICE.txt   bin         include  libexec  share

 Chuyển sang tài khoản hadoop.
su - hadoop
Chèn nội dung sau vào tập tin ~/.bash_profile:
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/opt/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
Khởi tạo các biến bằng lệnh sau:
source .bash_profile
Kiểm tra lại các biến bằng các lệnh sau:
echo $JAVA_HOME echo $HADOOP_HOME
Nếu output tương tự như sau là được:
/usr/java/default/opt/hadoop
Cấu hình cho Hadoop:
Mở tập tin /opt/hadoop/etc/hadoop/core-size.xml và thêm vào nội dung sau:

    
      fs.default.name 
      hdfs://master.hadoop.com:9000/ 
    
    
      dfs.permissions 
      false 
    


Mở tiếp tập tin /opt/hadoop/etc/hadoop/hdfs-site.xml và thêm vào nội dung sau:

    
      dfs.data.dir 
      /opt/hadoop/hadoop/dfs/name/data 
      true 
    

    
      dfs.name.dir 
      /opt/hadoop/hadoop/dfs/name 
      true 
    

    
      dfs.replication 
      1 
    

Mở tiếp tập tin /opt/hadoop/etc/hadoop/mapred-size.xml và thêm vào nội dung sau:

    
      mapred.job.tracker 
      master.hadoop.com:9001 
    

Cài đặt Hadoop lên các máy chủ khác Copy bộ cài Hadoop lên các máy chủ khác bằng lệnh:
# su hadoop 
$ cd /opt/hadoop 
$ scp -r hadoop slave.hadoop.com:/opt/hadoop
Cấu hình trên máy chủ chính Trên máy chủ master.hadoop.com, thêm tập tin /opt/hadoop/etc/hadoop/masters với nội dung sau:
master.hadoop.com
Thêm tập tin /opt/hadoop/etc/hadoop/slaves với nội dung sau:
slave.hadoop.com
Chạy Hadoop: Từ máy chủ chính chạy lệnh sau để format: hdfs namenode -format. Chạy dịch vụ của Hadoop bằng các lệnh sau:
sbin/start-dfs.sh sbin/start-yarn.sh.
Thêm một DataNode vào Hadoop Cluster: Giả sử ta có thêm một DataNode có địa chỉ như sau: 192.168.1.103 slave2.hadoop.com Trên slave2 ta thêm tài khoản có tên là hadoop: useradd hadoop passwd hadoop Từ trên máy chủ master, ta chạy các lệnh sau:
mkdir -p $HOME/.ssh 
chmod 700 $HOME/.ssh 
ssh-keygen -t rsa -P '' -f $HOME/.ssh/id_rsa 
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys 
chmod 644 $HOME/.ssh/authorized_keys
Copy the public key to new slave node in hadoop user $HOME directory
scp $HOME/.ssh/id_rsa.pub hadoop@192.168.1.103:/home/hadoop/
Từ trên máy chủ slave2, ta copy public key vào tập tin $HOME/.ssh/authorized_keys:
cd $HOME
mkdi -p $HOME/.>ssh 
chmod 700 $HOME/.ssh
cat id_rsa.pub >> $HOME/.ssh/authorized_keys 
chmod 644 $HOME/.ssh>/authorized_keys
Các bước trên là để các máy chủ đăng nhập vào nhau mà không phải sử dụng mật khẩu. Cập nhật thông tin máy chủ slave2 trên mọi file hosts của các máy chủ khác. Khởi động DataNode trên máy chủ mới bằng lệnh sau: bin/hadoop-daemon.sh start datanode Loại bỏ máy chủ DataNode ra khỏi cụm máy chủ: Đăng nhập vào máy chủ master. Thêm trường sau vào tập tin hdfs-site.xml:
 
   dfs.hosts.exclude 
   /home/hadoop/hadoop-1.2.1/hdfs_exclude.txt 
   DFS exclude 

Thêm tập tin hdfs_exclude.txt với nội dung sau: slave2.hadoop.com Load lại thông tin cấu hình: bin/hadoop/hdfs dfsadmin -refreshNodes Tắt Node vừa loại bỏ. Tham khảo tại đây.