Hiển thị các bài đăng có nhãn Linux. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Linux. Hiển thị tất cả bài đăng

25 tháng 6, 2018

Cấu hình Redis tăng khả năng đáp ứng cao

High Availability (HA) - Khả năng đáp ứng cao

HA có thể được hiểu là:

  1. Một hệ thống có khả năng phục vụ liên tục
  2. Chịu nhiệt cao (tức là khi nhiều người yêu cầu phục vụ thì vẫn có thể chạy ổn định).

Bài viết này ta sẽ tập trung vào mục (1).

Redis replication

Là phương pháp sử dụng "lính dự bị", lên đảm nhiệm vai trò của "lính chủ lực" khi ông chủ lực kiệt sức chết.

Ta sẽ sử dụng 1 server chính (master) và 2 server dự bị (slave).

Tổng cộng sẽ cần 3 server vật lý, sau này sẽ gọi là node để khỏi nhầm lẫn với redis server.

3 node này có IP lần lượt là:

master: 10.0.1.100
slave-1: 10.0.1.101
slave-2: 10.0.1.102

Cài đặt Redis:

Mình sử dụng Ubuntu 16.04.

Cài redis vào cả 3 NODE

sudo apt-get update
sudo apt-get install redis-server -y

Cấu hình cho node master

Ở node master, mở file /etc/redis/redis.conf lên và cấu hình:

Tìm đến dòng bind 127.0.0.1, đây là khai báo redis server sẽ lắng nghe request ở đâu.

Với cấu hình mặc định thì nó chỉ lắng nghe từ localhost (hiện tại đang là dòng 69) nên mình đổi về IP của node:

bind 10.0.1.100 127.0.0.1

Lưu lại file sau đó khởi động lại redis server:

sudo systemctl restart redis-server.service

Test thử server master

$ redis-cli -h 10.0.1.100
10.0.1.100:6379> info replication
Redis master output
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

Mặc định, redis server sẽ chạy ở cổng 6379.

Ghi dữ liệu vào để lát nữa đọc thử từ slave ra:

10.0.1.100:6379> set test 'this key was defined on the master server'
OK

Thoát redis server:

10.0.1.100:6379> exit

Cấu hình cho các NODE slave

Trên 2 NODE slave:

Trước khi cấu hình thì kết nối vào server để đảm bảo rằng nó chưa có dữ liệu bên master.

$ redis-cli
127.0.0.1:6379> get test
(nil)

Tiếp đến, mở file /etc/redis/redis.conf lên và cấu hình:

bind 10.0.1.101 127.0.0.1

slave 2:

bind 10.0.1.102 127.0.0.1

Tiếp, tìm đến dòng có slaveof <masterip> <masterport> (dòng 281), điền vào:

slaveof 10.0.1.100 6379

Cấu hình này sẽ khai báo đây là node dự bị (slave) cho NODE chính 10.0.1.100 và liên lạc với nó thông qua cổng 6379 - cổng mà bên kia đang lắng nghe.

OK, lưu lại rồi khởi động lại redis server:

sudo systemctl restart redis-server.service

Test thử server slave:

Bây giờ ta sẽ vào server slave và đọc dữ liệu ở bên server master ra:

$ redis-cli
10.0.1.101:6379> get test
'this key was defined on the master server'

Kiểm tra thông tin về replication:

10.0.1.101:6379> info replication
Redis slave output
# Replication
role:slave
master_host:10.0.1.100
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_repl_offset:1387
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

Nếu bạn kiểm tra thông tin tương tự bên server master thì sẽ thấy có chút cập nhật so với lúc nãy:

master$ redis-cli
10.0.1.100:6379> info replication
Redis master output
# Replication
role:master
connected_slaves:2
slave0:ip=10.0.1.101,port=6379,state=online,offset=1737,lag=1
slave0:ip=10.0.1.102,port=6379,state=online,offset=10000,lag=1
master_repl_offset:1737
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1736

OK, đến đây là xong phần redis replication. Tiếp đến, dùng sentinel để quản lý việc đưa salve lên làm master khi ông master bị down.

Sentinel

Cơ chế hoạt động:

Các sentinel sẽ luôn quan sát master server, khi master sập, các sentinels sẽ loan truyền nhau 1 tín hiệu sdown: tao thấy đại ca chết rồi thì phải.

Khi đủ 1 số lượng n sentinel đồng ý rằng tao cũng thấy master sập rồi, tụi sentinels sẽ loan tiếp tín hiệu odown: nó thực sự chết rồi đó.

Lúc này, tụi sentinels sẽ bầu chọn ra 1 slave để nâng cấp lên làm master mới, đồng thời cập nhật các cấu hình theo bộ máy chính quyền mới.

Khi thằng master kia sống lại, nó sẽ được tham gia vào băng nhóm với vai trò slave.

Cài đặt và cấu hình:

Cài đặt sentinel trên cả 3 NODE:

$ sudo apt-get install redis-sentinel -y

Mở file /etc/redis/sentinel.conf và cấu hình:

daemonize yes
pidfile "/var/run/redis/redis-sentinel.pid"
logfile "/var/log/redis/redis-sentinel.log"

bind 10.0.1.100
port 26379

sentinel monitor mymaster 10.0.1.100 6379 2
sentinel down-after-milliseconds mymaster 2000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
  • bind 10.0.1.100: báo cho các sentinel ở NODE khác biết rằng tôi đang lắng nghe ở địa chỉ này.
  • port 26379: để cho dễ nhớ thì thường là lấy cổng của redis +20000 rồi làm cổng sentinel.
  • sentinel monitor mymaster 10.0.1.100 6379 2: lệnh này khai báo là sẽ lắng nghe thằng master ở địa chỉ 10.0.1.100:6379, tham số cuối cùng (2) là số lượng sentinel tối thiểu để tham gia việc bầu chọn (lúc xác định master chết, và bầu master mới), mymaster là tên của master.
  • sentinel down-after-milliseconds mymaster 2000: sau 2 giây mà không thấy đại ca phản hồi thì tao sẽ loan tin sdown đi.

Hai cấu hình cuối cùng thì có thể tham khảo thêm ở đây

Cấu hình cho 2 slave server cũng tương tự cho master, chỉ khác 1 chỗ duy nhất là địa chỉ để bind-dùng IP của slave server tương ứng:

daemonize yes
pidfile "/var/run/redis/redis-sentinel.pid"
logfile "/var/log/redis/redis-sentinel.log"

bind 10.0.1.101
port 26379

sentinel monitor mymaster 10.0.1.100 6379 2
sentinel down-after-milliseconds mymaster 2000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

OK, bây giờ khởi động lại cả 3 sentinel:

sudo systemctl restart redis-server.service

Kiểm tra việc bầu cử

Đầu tiên, mở các file log ra để xem diễn biến băng nhóm:

master$ tailf /var/log/redis/redis-sentinel.log
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.10 (01888d1e/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 16379
 |    `-._   `._    /     _.-'    |     PID: 57464
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               
 
57464:X 07 Jul 16:33:18.109 # Sentinel runid is 978afe015b4554fdd131957ef688ca4ec3651ea1
57464:X 07 Jul 16:33:18.109 # +monitor master mymaster 10.0.1.100 6379 quorum 2
57464:X 07 Jul 16:33:18.111 * +slave slave 10.0.1.101:6381 10.0.1.101 6379 @ mymaster 10.0.1.100 6379
57464:X 07 Jul 16:33:18.205 * +sentinel sentinel 10.0.1.101:16379 10.0.1.101 16379 @ mymaster 10.0.1.100 6379
57464:X 07 Jul 16:33:18.111 * +slave slave 10.0.1.102:6381 10.0.1.102 6379 @ mymaster 10.0.1.100 6379
57464:X 07 Jul 16:33:18.205 * +sentinel sentinel 10.0.1.102:16379 10.0.1.102 16379 @ mymaster 10.0.1.100 6379

Kiểm tra xem ai đang là master

$ redis-cli -p 26379 sentinel get-master-addr-by-name mymaster

 1) "10.0.1.100"
 2) "6379"

Đánh sập master để bầu master mới

Trên master server:

master$ sudo systemctl stop redis-server.service

Nhìn vào log, bạn sẽ thấy thông tin về việc loan tin và bầu cử:

57464:X 07 Jul 16:35:30.270 # +sdown master mymaster 10.0.1.100 6379
57464:X 07 Jul 16:35:30.301 # +new-epoch 1
57464:X 07 Jul 16:35:30.301 # +vote-for-leader 2a4d7647d2e995bd7315d8358efbd336d7fc79ad 1
57464:X 07 Jul 16:35:30.330 # +odown master mymaster 10.0.1.100 6379 #quorum 3/2
57464:X 07 Jul 16:35:30.330 # Next failover delay: I will not start a failover before Tue Jul  7 16:35:50 2015
57464:X 07 Jul 16:35:31.432 # +config-update-from sentinel 10.0.1.101:16379 10.0.1.101 16379 @ mymaster 10.0.1.101 6379
57464:X 07 Jul 16:35:31.432 # +switch-master mymaster 10.0.1.101 6379 10.0.1.101 6379
57464:X 07 Jul 16:35:31.432 * +slave slave 10.0.1.102:6379 10.0.1.102 6379 @ mymaster 10.0.1.101 6379
57464:X 07 Jul 16:35:36.519 # +sdown slave 10.0.1.102:6379 10.0.1.102 6379 @ mymaster 10.0.1.101 6379

Giờ thì kiểm tra xem NODE nào được lên làm master:

$ redis-cli -p 16379 sentinel get-master-addr-by-name mymaster

 1) "10.0.1.101"
 2) "6379"

Ta thử khởi động lại master lúc nãy, và xem trong log sẽ thấy nó đã được gia nhập nhóm lại, nhưng bây giờ với vai trò là slave

20 tháng 11, 2016

Cài đặt và tùy biến Fedora Linux 24 trên máy tính Sony VAIO SVF14217SGB (Phần 1)

I. Cài đặt Fedora Linux lên máy

Tải file iso từ trang chủ của Fedora và sử dụng phần mềm Rufus tạo một usb boot cài đặt Fedora, sau đó tiến hành cài đặt bình thường.

II. Cài đặt và cấu hình Fedora Linux

1. Cài đặt wireless driver

Máy tính Sony VAIO SVF14217SGB sử dụng broadcom chipset BCM43142, driver của chipset này không còn được hỗ trợ cho Linux từ trang chủ Broadcom. Vì vậy, để có thể sử dụng được wifi ta sẽ phải cài đặt gói broadcom-wl từ RPM Fusion.

Để máy tính có thể sử dụng được wifi, ta cần phải kết nối internet thông qua dây nối và thực hiện các bước sau:

1.1. Thêm rpmfusion repository:

$ su -c 'dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm'

1.2. Update lại toàn bộ hệ thống:

$ sudo dnf update

1.3. Sau khi update thành công, tiến hành build kernel mới nhất:

$ sudo dnf install kernel-devel -y

Sau khi build thành công, khởi động lại hệ thống, và chọn kernel mới nhất từ menu boot.

1.4. Cài đặt gói broadcom-wl

$ sudo dnf install broadcom-wl

Khởi động lại một lần nữa sẽ thấy menu setting cho wifi. Quá trình cài đặt hoàn tất.

2. Cài đặt, chỉnh sửa font mặc định và font chuyển đổi trên Fedora Linux.

Cài đặt các font cần thiết vào thư mục /usr/share/fonts (nếu muốn sử dụng cho tất cả user) hoặc ~/.local/share/fonts (nếu chỉ sử dụng cho user hiện tại).

Sau khi đã có các font cần sử dụng, tiến hành tạo cấu hình font cho Fedora Linux như sau:

2.1. Tạo file cấu hình font

Tiến hành tạo file fonts.conf tại thư mục /etc/fonts (nếu muốn tùy biến cho tất cả user) hoặc tại thư mục ~/.config/fontconfig/ (nếu chỉ muốn tùy biến cho user hiện tại).

2.2. Đặt nội dung sau vào file cấu hình và login lại vào hệ thống.

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<!-- Set preferred serif, sans serif, and monospace fonts. -->
  <alias>
    <family>serif</family>
    <prefer><family>Noto Serif</family></prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer><family>Arimo</family></prefer>
  </alias>
  <alias>
    <family>sans</family>
    <prefer><family>Arimo</family></prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer><family>Monaco</family></prefer>
  </alias>
  <!-- Fedora font -->
  <match target="pattern">
    <edit name="dpi" mode="assign">96</edit>
  </match>
  <match target="font">
    <edit mode="assign" name="antialias" >
      <bool>true</bool>
    </edit>
  </match>
  <match target="font">
    <edit mode="assign" name="hinting" >
      <bool>true</bool>
    </edit>
  </match>
  <match target="font">
    <edit mode="assign" name="hintstyle" >
      <const>hintslight</const>
    </edit>
  </match>
  <match target="font">
    <edit mode="assign" name="rgba" >
      <const>rgb</const>
    </edit>
  </match>
  <match target="font">
    <edit mode="assign" name="lcdfilter">
      <const>lcddefault</const>
    </edit>
  </match>
  <!-- Aliases for commonly used MS fonts. -->
  <match>
    <test name="family"><string>Arial</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Arimo</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Helvetica</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Arimo</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Verdana</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Arimo</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Tahoma</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Arimo</string>
    </edit>
  </match>
  <match>
    <!-- Insert joke here -->
    <test name="family"><string>Comic Sans MS</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Arimo</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Times New Roman</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Tinos</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Times</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Tinos</string>
    </edit>
  </match>
  <match>
    <test name="family"><string>Courier New</string></test>
    <edit name="family" mode="assign" binding="strong">
      <string>Cousine</string>
    </edit>
  </match>
</fontconfig>

III. Cài đặt bộ gõ Tiếng Việt

Ta sẽ sử dụng input method framework Fcitx với engine Fcitx-Unikey để gõ Tiếng Việt trên Fedora Linux.

Thực hiện các bước sau để cài đặt:

1. Thực hiện các lệnh cài đặt fcitx sau đây:

$ sudo dnf install fcitx
$ sudo dnf install kcm-fcitx
$ sudo dnf install fcitx-unikey
$ sudo dnf install fcitx-qt5
$ sudo dnf install fcitx-configtool

2. Tạo cấu hình cho fcitx

Tạo file fcitx.sh trong thư mục /etc/profile.d/, và thêm vào nội dung sau:

#!/bin/bash
export XMODIFIERS="@im=fcitx"
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx

3. Khởi động lại hệ thống và mở fcitx để gõ Tiếng Việt

Note : để gõ được chữ ư=uw ơ=ow chọn Enable Marco trong phần cấu hình của Fcitx.

13 tháng 9, 2016

Một số lệnh khi sử dụng PostgreSQL

# Import sql dump file trong postgresql database:
$ psql -h hostname -d databasename -U username -f file.sql

# Kiểm tra <code>postgres client</code> version:
$ psql -V

# Để có thể thao tác trên postgres server ta cần kết nối tới postgres server, 
# để làm được điều này cần phải login vào hệ thống với quyền của postgres user.
$ sudo su - postgres

# Sau khi đã kết nối với postgres server, ta có thể thực hiện kết nối với database mặc định postgres như sau:
$ psql

# Kết nối với một database bằng một user cụ thể:
$ psql -d database_name -U user_name

Kết nối với database khác:

postgres=# \c database_name

Liệt kê toàn bộ relation của một database:

database_name-# \d

Liệt kê toàn bộ schema của một database:

database_name-# \dn

Liệt kê toàn bộ table của một database:

database_name-# \dt

Liệt kê toàn bộ sequence của một database:

database_name-# \ds

Hiển thị mô tả chi tiết một table:

database_name-# \d table-name

Hiển thị database đang connect:

bashdatabase_name-# \c

Cài đặt Genymotion trên Ubuntu

1. Cài đặt VirtualBox

Mở Terminal thực hiện lệnh sau:

$ sudo apt-get install virtualbox

2. Cài đặt Genymotion

Vào trang chủ của Genymotion đăng ký tài khoản (nếu chưa có) và tải về phiên bản mới nhất.

Thay đổi quyền truy cập tập tin, cho phép thực thi đối với tập tin vừa tải về.

Ví dụ:

$ chmod +x ~/Downloads/genymotion-2.8.0-linux_x64.bin

Tạo thư mục cài đặt Genymotion, và đặt tập tin đã tải về vào đó.

Ví dụ:

$ mkdir ~/Programs
$ mv ~/Downloads/genymotion-2.8.0-linux_x64.bin ~/Programs

Thực hiện cài đặt tập tin bên trong thư mục vừa tạo.

$ cd ~/Programs
$ ./genymotion-2.8.0-linux_x64.bin

2 tháng 4, 2016

Enable Icons Menus Trong Hệ Điều Hành Linux

Mặc định trong UbuntuFedora icon menu bị tắt đi. Dưới đây là cách bật icon menu trong hệ điều hành Linux:
Để bật chế độ menuicon, cần thực hiện lệnh sau:
#!/bin/bash
~$ gsettings set org.gnome.desktop.interface menus-have-icons true

hoặc:

~$ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'Gtk/ButtonImages': <1>, 'Gtk/MenuImages': <1>}"

Tạo desktop launcher cho Eclipse trong hệ điều hành Linux

1. Tạo file eclipse.desktop

Sử dụng một editor bất kì để tạo file trong thư mục /usr/share/applications.

Ví dụ sử dụng gedit:

$ sudo gedit /usr/share/applications/eclipse.desktop

2. Thêm nội dung sau vào file vừa tạo và lưu lại.

[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse Mars 4.5.1
Exec=/path/to/your/eclipse_folder/eclipse
Icon=/path/to/your/eclipse_folder/icon.xpm
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true

1 tháng 4, 2016

Cài đặt Oracle JDK trong Ubuntu

  1. Thông báo cho hệ thống biết nơi chứa jdk
  2. $ sudo update-alternatives --install "/usr/bin/java" java "/opt/java/oracle_jdk/bin/java" 1
    $ sudo update-alternatives --install "/usr/bin/javac" javac "/opt/java/oracle_jdk/bin/javac" 1
    $ sudo update-alternatives --install "/usr/bin/jar" jar "/opt/java/oracle_jdk/bin/jar" 1
    $ sudo update-alternatives --install "/usr/bin/javaws" javaws "/opt/java/oracle_jdk/bin/javaws" 1

  3. Mở file PATH của hệ thống:
  4. Mở Terminal và gõ lệnh sau:

    $ sudo gedit /etc/profile.d/jdk.sh

    hoặc:

    $ sudo vi /etc/profile.d/jdk.sh

  5. Sửa file PATH của hệ thống:
  6. Thêm vào các dòng lệnh sau:

    #!/bin/bash
    export JAVA_HOME=/opt/java/oracle_jdk
    export PATH=$PATH:$JAVA_HOME/bin

  7. Logout hoặc khởi động lại.
Lưu ý: Cài đặt Maven tương tự nhưng chỉ cần sửa PATH của hệ thống là được.