mysql5.7GroupReplication多主模式在Centos7.2上安裝部署
MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引進的一個資料庫高可用與高擴充套件的解決方案,以外掛形式提供,實現了分散式下資料的最終一致性,總結MGR特點如下:
高一致性:基於分散式paxos協議實現組複製,保證資料一致性;
高容錯性:自動檢測機制,只要不是大多數節點都當機就可以繼續工作,內建防腦裂保護機制;
高擴充套件性:節點的增加與移除會自動更新組成員資訊,新節點加入後,自動從其他節點同步增量資料,直到與其他節點資料一致;
高靈活性:提供單主模式和多主模式,單主模式在主庫當機後能夠自動選主,所有寫入都在主節點進行,多主模式支援多節點寫入。
1、設定SELinux
在/etc/sysconfig/selinux檔案,修改SELINUX=disabled。
2、設定防火牆,或者關閉防火牆,安裝完成後再開啟。
systemctl stop firewalld.service #停止firewall
firewall-cmd --state
wsrep(Write-Set Replication)
#mkdir -p /app/mysql/3306
#mkdir -p /app/mysql/binlog
3、修改/etc/security/limits.conf
* soft nproc 16384
* hard nproc 16384
* soft nofile 16384
* hard nofile 65535
4、安裝RPM包
# rpm -e mariadb-libs-1:5.5.52-1.el7.x86_64 --nodeps
# rpm -e mariadb-libs-5.5.44-2.el7.centos.x86_64 --nodeps
# rpm -ivh mysql-community-common-5.7.27-1.el7.x86_64.rpm
warning: mysql-community-common-5.7.27-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-common-5.7.27-1.e################################# [100%]
[root@bsmysql01 soft]# rpm -ivh mysql-community-libs-5.7.27-1.el7.x86_64.rpm
warning: mysql-community-libs-5.7.27-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-libs-5.7.27-1.el7################################# [100%]
[root@bsmysql01 soft]# rpm -ivh mysql-community-libs-compat-5.7.27-1.el7.x86_64.rpm
warning: mysql-community-libs-compat-5.7.27-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-libs-compat-5.7.2################################# [100%]
[root@bsmysql01 soft]# rpm -ivh mysql-community-embedded-compat-5.7.27-1.el7.x86_64.rpm
warning: mysql-community-embedded-compat-5.7.27-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-embedded-compat-5################################# [100%]
[root@bsmysql01 soft]# rpm -ivh mysql-community-embedded-5.7.27-1.el7.x86_64.rpm
warning: mysql-community-embedded-5.7.27-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-embedded-5.7.27-1################################# [100%]
[root@bsmysql01 soft]# rpm -ivh mysql-community-devel-5.7.27-1.el7.x86_64.rpm
warning: mysql-community-devel-5.7.27-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-devel-5.7.27-1.el################################# [100%]
[root@bsmysql01 soft]# rpm -ivh mysql-community-embedded-devel-5.7.27-1.el7.x86_64.rpm
warning: mysql-community-embedded-devel-5.7.27-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-embedded-devel-5.################################# [100%]
[root@bsmysql01 soft]# rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm
warning: mysql-community-client-5.7.27-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-client-5.7.27-1.e################################# [100%]
[root@bsmysql01 soft]# rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm
warning: mysql-community-server-5.7.27-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mysql-community-server-5.7.27-1.e################################# [100%]
5、建立並配置引數檔案
---建立並配置my.cnf檔案
# cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
!includedir /etc/my.cnf.d/
cat mgrep.conf
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
[mysqld]
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....
explicit_defaults_for_timestamp=true
log_timestamps=SYSTEM
#character_set_server = utf8
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
init_connect='set names utf8mb4'
skip_character_set_client_handshake = true
server-id=3921
gtid_mode=on
basedir=/usr
user=mysql
#skip-name-resolve
lower_case_table_names=1
max_connections=2000
max_connect_errors=5000
event_scheduler=on
datadir=/app/mysql/3306
default-storage-engine = InnoDB
socket=/app/mysql/3306/mysql.sock
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=2
transaction-isolation = READ-COMMITTED
#sync_binlog=1,no data lost;0,best performance;ref 20
sync_binlog=1
innodb_buffer_pool_size=16G
thread_cache_size=128
max_allowed_packet=256M
sort_buffer_size=8M
join_buffer_size=8M
tmp_table_size=128M
#pid_file=/app/mysql/mysqld.pid
port=3306
log-error=/app/mysql/mysql.err
slow_query_log=on
long_query_time=5
#add for bin-log
enforce_gtid_consistency=on
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=none
log_slave_updates=on
log_bin=on
binlog_format=row
####binlog_format=mixed
log_bin=/app/mysql/binlog/mysql-bin
log_bin_index=/app/mysql/binlog/mysql-bin.index
expire_logs_days=32
max_binlog_size=1024M
innodb_log_file_size=1024M
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT'
##add for group replication
auto_increment_increment=5
auto_increment_offset=1
transaction_write_set_extraction=XXHASH64
#loose-group_replication_group_name="9166859b-cef1-11e9-a8c9-005056873ade"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "10.70.39.159:24901"
loose-group_replication_group_seeds= "10.70.39.159:24901,10.70.39.160:24901,10.70.39.179:24901"
loose-group_replication_bootstrap_group=off
#loose-group_replication_ip_whitelist="127.0.0.1/8,172.25.51.0/24"
loose-group_replication_single_primary_mode=false
loose-group_replication_enforce_update_everywhere_checks=true
###Add for slave
slave_parallel_workers=8
slave-parallel-type=LOGICAL_CLOCK
relay_log_recovery=on
slave_net_timeout=30
#read_only=1
[client]
socket=/app/mysql/3306/mysql.sock
#####default-character-set=utf8
default_character_set = utf8mb4
[mysql]
#default-character-set=utf8
default_character_set = utf8mb4
socket=/app/mysql/3306/mysql.sock
[mysqldump]
max_allowed_packet = 512M
[mysqld_safe]
malloc-lib=/usr/lib64/libjemalloc.so.1
# id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)
# chmod -R 775 /app/mysql
# chown -R mysql.mysql /app/mysql
mysqld --initialize --user=mysql
9ZI8dcM,o5Do
[root@bsmysql01 my.cnf.d]# mysqld --initialize --user=mysql
2019-09-04T08:54:13.040689Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-09-04T08:54:13.237393Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-09-04T08:54:13.278526Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-09-04T08:54:13.336631Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 9166859b-cef1-11e9-a8c9-005056873ade.
2019-09-04T08:54:13.337829Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-09-04T08:54:13.338429Z 1 [Note] A temporary password is generated for root@localhost: 0(gqhhyYp<3f
# mysql_ssl_rsa_setup
cd /usr/lib/systemd/system
vi mysqld.service
# cat mysqld.service
# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# systemd service file for MySQL forking server
# Modified for wsrep (Galera): Recovery
#
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=forking
#PIDFile=/var/run/mysqld/mysqld.pid
PIDFile=/app/mysql/mysqld.pid
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Needed to create system tables and to check for cluster crash recovery
#ExecStartPre=/usr/bin/mysqld_pre_systemd --pre
# Start main service
#ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/app/mysql/mysqld.pid $MYSQLD_OPTS $MYSQLD_RECOVER_START
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/app/mysql/mysqld.pid $MYSQLD_OPTS
# Needed to reset cluster crash recovery
#ExecStartPost=/usr/bin/mysqld_pre_systemd --post
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 65535
Restart=on-failure
# Dirty hack to prevent fast restart in case of configuration problem.
# Longer-term fix will be to ensure exit status 1 for "RestartPreventExitStatus=1" below.
RestartSec=1
RestartPreventExitStatus=1
PrivateTmp=false
systemctl daemon-reload
systemctl enable mysqld.service
systemctl is-enabled mysqld
systemctl start mysqld
mysql -p
set password=password("Bs#2019My");
flush privileges;
systemctl stop mysqld
systemctl start mysqld
export MYSQL_PS1="\u@[\d]> "
alias m='mysql -uroot -p"Bs#2019My"'
PATH=$PATH:$HOME/bin
loose-group_replication_ip_whitelist="172.25.92.0/24"
install plugin group_replication soname 'group_replication.so';
select * from performance_schema.replication_group_members;
+---------------------------+-----------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+-----------+-------------+-------------+--------------+
| group_replication_applier | | | NULL | OFFLINE |
+---------------------------+-----------+-------------+-------------+--------------+
1 row in set (0.00 sec)
root@[(none)]> show variables like '%group_replication%';
+----------------------------------------------------+----------------------------------------------------------+
| Variable_name | Value |
+----------------------------------------------------+----------------------------------------------------------+
| group_replication_allow_local_disjoint_gtids_join | OFF |
| group_replication_allow_local_lower_version_join | OFF |
| group_replication_auto_increment_increment | 7 |
| group_replication_bootstrap_group | OFF |
| group_replication_components_stop_timeout | 31536000 |
| group_replication_compression_threshold | 1000000 |
| group_replication_enforce_update_everywhere_checks | ON |
| group_replication_exit_state_action | READ_ONLY |
| group_replication_flow_control_applier_threshold | 25000 |
| group_replication_flow_control_certifier_threshold | 25000 |
| group_replication_flow_control_mode | QUOTA |
| group_replication_force_members | |
| group_replication_group_name | f184c7a7-cf7f-11e9-bef9-005056873ade |
| group_replication_group_seeds | 10.70.39.159:24901,10.70.39.160:24901,10.70.39.179:24901 |
| group_replication_gtid_assignment_block_size | 1000000 |
| group_replication_ip_whitelist | 10.70.39.0/24,127.0.0.1/8 |
| group_replication_local_address | 10.70.39.179:24901 |
| group_replication_member_weight | 50 |
| group_replication_poll_spin_loops | 0 |
| group_replication_recovery_complete_at | TRANSACTIONS_APPLIED |
| group_replication_recovery_reconnect_interval | 60 |
| group_replication_recovery_retry_count | 10 |
| group_replication_recovery_ssl_ca | |
| group_replication_recovery_ssl_capath | |
| group_replication_recovery_ssl_cert | |
| group_replication_recovery_ssl_cipher | |
| group_replication_recovery_ssl_crl | |
| group_replication_recovery_ssl_crlpath | |
| group_replication_recovery_ssl_key | |
| group_replication_recovery_ssl_verify_server_cert | OFF |
| group_replication_recovery_use_ssl | OFF |
| group_replication_single_primary_mode | OFF |
| group_replication_ssl_mode | DISABLED |
| group_replication_start_on_boot | OFF |
| group_replication_transaction_size_limit | 0 |
| group_replication_unreachable_majority_timeout | 0 |
+----------------------------------------------------+----------------------------------------------------------+
36 rows in set (0.00 sec)
set sql_log_bin=0;
create user bsrep@'10.70.39.%' identified by 'Bs$Rep202o';
grant replication slave on *.* to bsrep@'10.70.39.%';
flush privileges;
set sql_log_bin=1;
--change master to master_user = 'bsrep',master_password='Bs$Rep202o' for channel 'group_replication_recovery';
root@[(none)]> set global group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)
root@[(none)]> change master to master_user = 'bsrep',master_password='Bs$Rep202o' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)
root@[(none)]> start group_replication;
Query OK, 0 rows affected (2.02 sec)
root@[(none)]> set global group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)
root@[(none)]> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 14beae8e-cf8d-11e9-baa8-005056873ade | bsmysql01 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
1 row in set (0.00 sec)
6、-----配置第二個節點:
set sql_log_bin=0;
create user bsrep@'10.70.39.%' identified by 'Bs$Rep202o';
grant replication slave on *.* to bsrep@'10.70.39.%';
flush privileges;
set sql_log_bin=1;
change master to master_user = 'bsrep',master_password='Bs$Rep202o' for channel 'group_replication_recovery';
set global group_replication_allow_local_disjoint_gtids_join=on;
start group_replication;
select * from performance_schema.replication_group_members;
root@[(none)]> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
root@[(none)]> create user bsrep@'10.70.39.%' identified by 'Bs$Rep202o';
Query OK, 0 rows affected (0.00 sec)
root@[(none)]> grant replication slave on *.* to bsrep@'10.70.39.%';
Query OK, 0 rows affected (0.00 sec)
root@[(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
root@[(none)]> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)
root@[(none)]>
root@[(none)]> change master to master_user = 'bsrep',master_password='Bs$Rep202o' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)
root@[(none)]> set global group_replication_allow_local_disjoint_gtids_join=on;
Query OK, 0 rows affected, 1 warning (0.00 sec)
root@[(none)]> start group_replication;
Query OK, 0 rows affected, 1 warning (5.78 sec)
root@[(none)]> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 14beae8e-cf8d-11e9-baa8-005056873ade | bsmysql01 | 3306 | ONLINE |
| group_replication_applier | 3a6e0efb-cf8b-11e9-a364-0050568728b9 | bsmysql02 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)
7、-----配置第三個節點:
set sql_log_bin=0;
create user bsrep@'10.70.39.%' identified by 'Bs$Rep202o';
grant replication slave on *.* to bsrep@'10.70.39.%';
flush privileges;
set sql_log_bin=1;
change master to master_user = 'bsrep',master_password='Bs$Rep202o' for channel 'group_replication_recovery';
set global group_replication_allow_local_disjoint_gtids_join=on;
start group_replication;
select * from performance_schema.replication_group_members;
root@[(none)]> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
root@[(none)]> create user bsrep@'10.70.39.%' identified by 'Bs$Rep202o';
Query OK, 0 rows affected (0.00 sec)
root@[(none)]> grant replication slave on *.* to bsrep@'10.70.39.%';
Query OK, 0 rows affected (0.00 sec)
root@[(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
root@[(none)]> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)
root@[(none)]> change master to master_user = 'bsrep',master_password='Bs$Rep202o' for channel 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.01 sec)
root@[(none)]> set global group_replication_allow_local_disjoint_gtids_join=on;
Query OK, 0 rows affected, 1 warning (0.00 sec)
root@[(none)]> start group_replication;
Query OK, 0 rows affected, 1 warning (3.24 sec)
root@[(none)]> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 14beae8e-cf8d-11e9-baa8-005056873ade | bsmysql01 | 3306 | ONLINE |
| group_replication_applier | 3a6e0efb-cf8b-11e9-a364-0050568728b9 | bsmysql02 | 3306 | ONLINE |
| group_replication_applier | 79509566-cf8c-11e9-9c16-0050568794c1 | bsmysql03 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)
root@[(none)]> set global group_replication_allow_local_disjoint_gtids_join=off;
Query OK, 0 rows affected, 1 warning (0.00 sec)
MGR單主多主切換模式需要重啟動組複製,需要在所有節點上先關閉組複製,設定group_replication_single_primary_mode=OFF 等引數,再啟動組複製。
-------------------------------End By Tony.Tang【TangYun】2019--------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24930246/viewspace-2662203/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Docker中安裝MySQL 8.0.19之MGR(單主模式&多主模式)+新增節點DockerMySql模式
- ZabbixAgent在Windows上安裝部署Windows
- Centos7.2安裝NginxCentOSNginx
- Typecho在Ubuntu 22.04上的安裝部署Ubuntu
- CentOS7.2 安裝 MongoDB 3.4CentOSMongoDB
- MySQL xtrabackup for centos7.2安裝MySqlCentOS
- Centos7.2中安裝pipCentOS
- MySQL+MGR 單主模式和多主模式的叢集環境 - 部署手冊 (Centos7.5)MySql模式CentOS
- centos7.2 mysql5.7安裝教程CentOSMySql
- 在企業中部署NAV10.0(上)——安裝篇
- MySQL在Windows上安裝多個例項的方法MySqlWindows
- centos7.2原始碼安裝Apache2.4CentOS原始碼Apache
- 在CentOS上安裝GitCentOSGit
- 在centos上安裝molochCentOS
- 在Windows上安裝MavenWindowsMaven
- 在CentOS上安裝dockerCentOSDocker
- 在CentOS上安裝PowerShellCentOS
- 在windows上安裝numpyWindows
- 在mac上安裝DockerMacDocker
- mysql 在windows上安裝MySqlWindows
- 在Centos上安裝wordpressCentOS
- 在AIX上安裝GCCAIGC
- hive在centos上安裝HiveCentOS
- 在lfs上安裝tcpdumpTCP
- 在AIX上安裝VNCAIVNC
- SDL在win上安裝
- azkaban在centos下的部署安裝CentOS
- centos7.2 influxdb安裝與簡單使用CentOSUX
- 使用虛擬機器在CentOS上安裝部署資料庫使用虛擬機CentOS資料庫
- 在一臺機器上安裝並使用多版本的 Go ?Go
- 教你在一個伺服器上安裝多個版本PHP伺服器PHP
- 在Linux上安裝gskitLinux
- 在CentOS 8.1上安裝 DockerCentOSDocker
- 在Ubuntu上安裝MariaDBUbuntu
- 在 Ubuntu 上安裝 Budgie 桌面Ubuntu
- 在docker上安裝AWVSDocker
- SonarQube在CentOS上的安裝CentOS
- 在Android上安裝EntwareAndroid