Home IT Linux Windows Database Network Programming Server Mobile  
           
  Home \ Database \ redis main building and disaster recovery from a cluster deployment     - Talk about Java in the collection (Programming)

- Linux system using the command line shutdown or restart (Linux)

- How to install or upgrade to the Linux kernel in Ubuntu 4.2 (Linux)

- About Linux backdoor (Linux)

- How to remove the Linux memory Cache, Buffer and swap space (Linux)

- Automatic and Manual Proxy Settings Switch GNOME Shell Extension Proxy Switcher Recommend (Linux)

- Docker container plaintext password problem-solving way (Server)

- Linux Demo dd IO test (Linux)

- Linux System Getting Started Learning: Change the name of the network interface on CentOS7 (Linux)

- After the first remote installation GlassFish Web to remotely access their back office management system error solution appears (Server)

- Docker improve safety (Server)

- Open log in Hibernate (Programming)

- Linux package management operations Basic entry (Linux)

- Ubuntu 14.04 Nvidia graphics driver installation and settings (Linux)

- Nginx log cutting and MySQL script regular backup script (Server)

- Adjust the size of the hard disk VirtualBox (Linux)

- Mounting Windows shared directory system under the Linux (Linux)

- How to Create a file can not be changed under Linux (Linux)

- To resolve Ubuntu 14.04 Unity Desktop Environment Login freeze problem (Linux)

- To add the Oracle JDBC driver in Maven repository (Linux)

 
         
  redis main building and disaster recovery from a cluster deployment
     
  Add Date : 2018-11-21      
         
       
         
  Redis is also used for some time, recorded at the relevant structures and the cluster configuration in detail, to facilitate subsequent use Now.

outline

Redis installation
Overall structure
Redis master-slave structure built
Redis Disaster Recovery Deployment (Sentinel sentinel)
Redis FAQ
Redis installation

Release: CentOS-6.6 64bit

Kernel: 2.6.32-504.el6.x86_64

CPU: intel-i7 3.6G

Memory: 2G

Download redis, choose the right version

[Root @ rocket software] # wget http://download.redis.io/releases/redis-2.8.17.tar.gz

[Root @ rocket software] # cd redis-2.8.17

[Root @ rocket redis-2.8.17] # make

[Root @ rocket redis-2.8.17] # make test

cd src && make test

make [1]: Entering directory `/home/software/redis-2.8.17/src '

You need tcl 8.5 or newer in order to run the Redis test

make [1]: *** [test] Error 1

make [1]: Leaving directory `/home/software/redis-2.8.17/src '

make: *** [test] Error 2

make test error, install tcl

[Root @ rocket software] # wget http://prdownloads.sourceforge.net/tcl/tcl8.5.18-src.tar.gz

[Root @ rocket software] # tar -zxvf tcl8.5.18-src.tar.gz

[Root @ rocket software] # cd tcl8.5.18

[Root @ rocket tcl8.5.18] # cd unix /

[Root @ rocket unix] # ./configure;make;make test; make install

tcl installation is successful, continue to test the installation of redis

[Root @ rocket redis-2.8.17] # make test

......

Cleanup: may take some time ... OK

make [1]: Leaving directory `/home/software/redis-2.8.17/src '

Normal installation instructions redis

Overall structure

Overall Chart

Here is the overall architecture of the cluster structures herein, the use of master-slave structure + Sentinel (sentinel) for disaster recovery.

Directory Structure

Redis master-slave structure built

Build redis master

Copy the executable file

[Root @ rocket master] # pwd

/ Usr / local / redisDB / master

[Root @ rocket master] # cp /home/software/redis-2.8.17/src/redis-cli.

[Root @ rocket master] # cp /home/software/redis-2.8.17/src/redis-server.

Profile redis.conf

 
# Daemon mode
daemonize yes

# Pid file
pidfile /var/run/redis.pid

# Listening port
port 7003

# TCP receive queue length, the affected / proc / sys / net / core / somaxconn and tcp_max_syn_backlog two kernel parameters
tcp-backlog 511

# A client idle time in seconds after the connection is closed (0 = disabled, never closed)
timeout 0

# If nonzero, set SO_KEEPALIVE options to connect to the idle client sends an ACK
tcp-keepalive 60

# Specify the server debug level
# Possible values:
# Debug (large amount of information on the development / test helpful)
# Verbose (a lot of useful information streamlined, but unlike so many debug level)
# Notice (the right amount of information, basically your production environment required)
# Warning (only important / serious information will be recorded)
loglevel notice

# Specified log file name
logfile "./redis7003.log"

# Set the number of database
databases 16

# Will be after a specified number of seconds, and data changes in the database are written to disk
# 900 seconds (15 minutes), and at least one time change
# 300 seconds (5 minutes), and at least ten times in
# 60 seconds later, and at least 10,000 times change
save 900 1
save 300 10
save 60 10000


# If you turn RDB default snapshot (save at least one instruction) and the latest background Save failed, Redis will stop accepting writes
# This will allow the user to know the data is not correctly persisted to the hard disk. Otherwise, no one noticed and may cause some disaster
stop-writes-on-bgsave-error yes

# .rdb When exporting to the database with LZF compression string object
rdbcompression yes

# Version of RDB 5 has a CRC64 checksum algorithm on the final document. This will make more reliable file format.
rdbchecksum yes

# Persistence filename database
dbfilename dump.rdb

# Working directory
dir ./

# When the master service is password-protected, slav service connection master password
masterauth 0234kz9 * l

# When a slave and master loses connection or sync in progress, slave behavior can have two:
#
# 1) If the slave-serve-stale-data is set to "yes" (the default value), slave will continue to respond to client requests,
# May be normal data or obsolete data, it may not get empty data values.
# 2) If the slave-serve-stale-data is set to "no", slave will respond "syncing from master
# (SYNC with master in progress) "to deal with the request, in addition to INFO and SLAVEOF command.
slave-serve-stale-data yes

# You can configure the salve instance whether to accept the write operation. Writable slave instances may be more useful for temporary data storage (because writing salve
# After data synchronization with the master would easily be deleted
slave-read-only yes

# Whether to disable TCP_NODELAY socket after the slave send SYNC?
# If you select "yes" Redis will use less bandwidth to send TCP packets and data to the slaves. But it will transfer the data to slave
Delay, Linux kernel # on the default configuration of up to 40 milliseconds
# If you select "no" to salve data transmission delay will decrease but uses more bandwidth
repl-disable-tcp-nodelay no

# Slave priority Redis is an integer in the Info display output. If the master is no longer working properly, Sentinel will use it to
# Choose a slave upgrade = upgraded master.
# Priority number will give priority to small salve promoted to master, so for example, there are three slave priorities were 10,100,25,
# Sentinels will pick the smallest number of the priority of the slave 10.
# 0 as a special priority, can not identify this as a slave master, it is a priority for the slave 0 will never be
# Sentry picked promoted to master
slave-priority 100


# Password authentication
# Warning: Because Redis too fast, so people can try out 150k per second password to try to crack the code. This means you need
# A strong password, otherwise too easy to crack
requirepass 0234kz9 * l

# Redis maximum memory for instance, do not use more than the upper limit set in the memory. Once the memory usage limit is reached, Redis will be selected based on the recovery strategy (see:
# Maxmemmory-policy) Delete key
maxmemory 3gb

# Maximum memory policy: If the memory limit is reached, Redis how to select Delete key. You can conduct the following five in the election:
# Volatile-lru -> Delete key with expiration date in accordance with the LRU algorithm.
# Allkeys-lru -> Delete any key according to the LRU algorithm.
# Volatile-random -> expiration settings based on randomly delete key, with the key expiration time.
# Allkeys-> random -> undifferentiated random delete, any key.
# Volatile-ttl -> According to a recent expiration time to remove (supplemented TTL), which is an expiration time for the key
# Noeviction -> no one deleted directly on a write error is returned.
maxmemory-policy volatile-lru

# By default, Redis is to export the data to disk asynchronously. This model in many applications had already been good enough, but Redis process
It may result in the loss of a period of the write operation (depending on the configuration of the save command) # or power problems.
#
# AOF is a method of providing a more reliable alternative to persistent mode, for example, data written to the file using the default policy (see the following configuration)
# In case of power failure or server as a single case Redis writing process itself a problem but still running the operating system and other emergencies, Redis
# Can only lose 1 second write operation.
#
# AOF and RDB persistence of concurrent and there is no problem.
# If AOF is on, then when you start Redis will load AOF file, which can guarantee the reliability of data.
appendonly no

# Aof file name
appendfilename "appendonly.aof"

More data # fsync () system call tells the operating system to write data on the disk, rather than waiting to enter the output buffer.
# Some operating systems will really put the data onto the disk brush immediately; some will try to do so as soon as possible.
#
# Redis supports three different modes:
#
# No: Do not brush immediately, and only when the operating system needs to brush painted. faster.
# Always: every write operations are immediately written to the aof file. Slow, but the most secure.
# Everysec: Write once per second. Compromise.
appendfsync everysec

# If AOF synchronization policy is set to "always" or "everysec", and stores the background process (background store or write AOF
# Log) will have a lot of disk I / O overhead. Some configurations of Linux because Redis will fsync () system call is blocked for a long time.
# Note that the current situation has not been perfect for this amendment, even different threads fsync () will block our synchronous write (2) calls.
#
# To alleviate this problem, you can use the following options. It prevents the main process when BGSAVE or BGREWRITEAOF processing fsync ().
#
# This means that if there is a child process during a save operation, then Redis is in "non-synchronous" state.
# This is actually said, in the worst case can lose 30 seconds of log data. (Linux default setting)
#
# If you have a question to this delay is set to "yes", otherwise it remains "no", this is the most persistent data stored in a secure manner.
no-appendfsync-on-rewrite yes

# Automatically rewrites AOF file
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# AOF files may not be complete at the end (which is closed there is a problem with the system, especially mount ext4 file system
# Without adding data = ordered option. Only occurs when the os dead, redis his death does not complete).
# When redis restart load into memory when there is a problem that the.
# Happens when you can choose redis start being given, and notifies the user and write the log, or load as much as normal data.
# If aof-load-truncated is yes, a log will be automatically published to the client and then load (default).
# If no, the user must manually redis-check-aof AOF file repair can.
# Note that if in the course of reading, we found this aof is damaged, the server will also withdraw,
# This option is only used when the server attempts to read more data but can not find the appropriate data.
aof-load-truncated yes

Maximum execution time # Lua script milliseconds
lua-time-limit 5000

# Redis slow query log can record over a specified time of the query
slowlog-log-slower-than 10000

# No limit to the length. Just to the main memory consumption. You can reclaim memory by SLOWLOG RESET.
slowlog-max-len 128

# Redis delay monitoring system at runtime sampling some operations in order to collect the data may lead to the root causes of delay.
# By LATENCY command to print some drawings and get some of the reports to facilitate monitoring
# The system only records the execution time is greater than or equal to a predetermined time (in milliseconds) operation,
# This is the configuration predetermined time specified by the latency-monitor-threshold,
# When set to 0, the monitoring system is stopped
latency-monitor-threshold 0

# Redis can notify Pub / Sub Client on key events occurred in space, off by default
notify-keyspace-events ""

# When the hash when only a small amount of entry, and the space occupied by the largest entry does not exceed the specified limit, it will save in a memory
# Data structures to encode. You can set limits by the following commands
hash-max-ziplist-entries 512
hash-max-ziplist-value 64

# Hash and like, less data elements list, you can use another way to save a lot of space coding.
# This special way only when subject to the following restrictions to use

list-max-ziplist-entries 512
list-max-ziplist-value 64

# Set There is a special coding is: When the whole data set is a 64-bit signed integer numbers constitute a string of decimal.
# The following configuration item is used to set the set using this encoding to save the maximum length of memory.
set-max-intset-entries 512

# Similar to hash and list, ordered sets can also use a special coding to save a lot of space.
Ordered set # This encoding is only suitable length and elements are less than the following limits
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

# HyperLogLog sparse structure represented byte limit. The restrictions include
# 16-byte header. When using the sparse structure represented HyperLogLog
# These restrictions, it will be converted into a density representation.
# Value of greater than 16,000 is completely useless, because at that point
# Dense representation is more memory efficient.
# The recommended value is 3000, so as to have the benefits of memory, reducing memory consumption
hll-sparse-max-bytes 3000

# Enable hash refreshed every 100 milliseconds will come up with a CPU milliseconds to refresh the main Redis hash table (top key mapping table)
activerehashing yes

# Client limit output buffer can be used to force those disconnected for some reason to read data from the server fast enough clients
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# Default, "hz" is set to 10. This value will increase when using more CPU idle in Redis, but when there are multiple key
# Redis will expire at the same time more responsive, and time-out can be more accurately processed
hz 10

# When a child process to rewrite AOF file, if the following option is enabled, each file data will be synchronized to generate 32M
aof-rewrite-incremental-fsync yes
Start master

[Root @ rocket master] # ./redis-server ./redis.conf

[Root @ rocket master] # ps axu | grep redis

root 24000 0.1 0.7 137356 7440 Ssl 23:28 0:00 ./redis-server *:? 7003

Using a client connection test

[Root @ rocket master] # ./redis-cli -a 0234kz9 * l -p 7003

127.0.0.1:7003> select 1

OK

127.0.0.1:7003 [1]> set name zhangsan

OK

127.0.0.1:7003 [1]> get name

"Zhangsan"

127.0.0.1:7003 [1]> quit

We can see, redis successfully started and can begin to read and write data.

Build redis slave

master and slave configurations are basically the same, only need to modify the corresponding pidfile, port, log file name, and coupled with the master address and password authentication.

Profiles redis_slave.conf (where differences and redis master)

# Pid file

pidfile /var/run/redis_slave.pid

# Listening port

port 8003

# Specified log file name

logfile "./redis8003.log"

# Set when the unit is slav service, set master service IP address and port when Redis starts, it will automatically synchronize the data from the master

slaveof 127.0.0.1 7003

# When the master service is password-protected, slav service connection master password

masterauth 0234kz9 * l

Start and view data synchronization slave case

[Root @ rocket slave] # ./redis-server ./redis_slave.conf

[Root @ rocket slave] # ./redis-cli -a 0234kz9 * l -p 8003

127.0.0.1:8003> select 1

OK

127.0.0.1:8003 [1]> get name

"Zhangsan"

You can see, master set of key-value has been successfully synchronized over.

Redis Disaster Recovery Deployment (Sentinel Sentinel)

The role of sentinel

1. Monitoring: Monitor the master and slave is normal
2. notification: there is a problem, you can notify the relevant personnel
3. failover: automatic master switchover
4. unified configuration management: connection by asking sentinel obtained from the primary address

Raft distributed algorithm

1. The main purposes: for distributed systems, fault-tolerant systems, as well as elected leaders
2. Analysis: Diego Ongaro, graduated from Harvard
3. This algorithm is currently used in the project are:
. A CoreOS: see below
b ectd:. a distributed, consistent shared configuration
c LogCabin:. Distributed Storage System
d redis sentinel:. redis monitoring system

Raft Sentinel core algorithm used: Principles

1. All rights have sentinel elected leader
2. Each sentinel will be asked to elect their own leader other sentinel (mainly by the discovery redis objective offline sentinel first launch election)
3. Each sentinel opportunity only once elections
4. Using the principle of first come first served
5. Once added to the system, it will not automatically clear (this is important, why?)
6. sentinel each has a unique uid, and change will not restart
7. achieve leader condition is N / 2 + 1 Ge sentinel chosen their own
8. Using Configuration era, if an election split brain occurs, the configuration is incremented era into the next election, it will be in all sentinel unified configuration era, the latest standard.

Raft distributed algorithm application

coreos: Cloud computing Nova Docker is rocket-like speed of development, and its associated ecosystem is also getting better, CoreOS is one of them. CoreOS is a brand new data center design for the Linux operating system, in July 2014 released the first stable version, we have now completed the A $ 8 million round of financing.

Redis Sentinel achieve disaster recovery deployment

Three sentinel architecture

[Root @ rocket sentinel] # tree

.

redis-cli

 redis-sentinel

 redis-server

 sentinel1

 sentinel1.conf

 sentinel1.log

sentinel2

 sentinel2.conf

 sentinel2.log

sentinel3

sentinel3.conf

 sentinel3.log

Sentry configuration sentinel1.conf

# Example sentinel.conf

# Port
port 26371

# Daemon mode
daemonize yes

# Specified log file name
logfile "./sentinel1.log"

# Working path, sentinel generally designated / tmp relatively simple
dir ./

# Sentry monitor the master, at least in the instance that the quorum sentry post master down the master marked odown
# (Objective down objective down; corresponding to the presence sdown, subjective down, subjectively down) state.
# Slaves are automatically discovered, so you do not need to explicitly specify slaves.
sentinel monitor TestMaster 127.0.0.1 7003 1

# Master or slave much time (default 30 seconds) after use can not be marked as s_down state.
sentinel down-after-milliseconds TestMaster 1500

# If the sentinel value in this configuration fails to complete failover operation (ie fault master / slave automatic switching), it is considered this failover fails.
sentinel failover-timeout TestMaster 10000

# Set the master and slaves password verification
sentinel auth-pass TestMaster 0234kz9 * l

sentinel config-epoch TestMaster 15
sentinel leader-epoch TestMaster 8394

## In addition to the current Sentinel, what this master in the monitoring of sentinel
sentinel known-sentinel TestMaster 127.0.0.1 26372 0aca3a57038e2907c8a07be2b3c0d15171e44da5
sentinel known-sentinel TestMaster 127.0.0.1 26373 ac1ef015411583d4b9f3d81cee830060b2f29862

sentinel current-epoch 8394
 
Sentinels two configuration sentinel2.conf

 
# Example sentinel.conf

# Port
port 26372

# Daemon mode
daemonize yes

# Specified log file name
logfile "./sentinel2.log"

# Working path, sentinel generally designated / tmp relatively simple
dir ./

# Sentry monitor the master, at least in the instance that the quorum sentry post master down the master marked odown
# (Objective down objective down; corresponding to the presence sdown, subjective down, subjectively down) state.
# Slaves are automatically discovered, so you do not need to explicitly specify slaves.
sentinel monitor TestMaster 127.0.0.1 7003 1

# Master or slave much time (default 30 seconds) after use can not be marked as s_down state.
sentinel down-after-milliseconds TestMaster 1500

# If the sentinel value in this configuration fails to complete failover operation (ie fault master / slave automatic switching), it is considered this failover fails.
sentinel failover-timeout TestMaster 10000

# Set the master and slaves password verification
sentinel auth-pass TestMaster 0234kz9 * l

sentinel config-epoch TestMaster 15
sentinel leader-epoch TestMaster 8394

## In addition to the current Sentinel, what this master in the monitoring of sentinel
sentinel known-sentinel TestMaster 127.0.0.1 26371 b780bbc20fdea6d3789637053600c5fc58dd0690
sentinel known-sentinel TestMaster 127.0.0.1 26373 ac1ef015411583d4b9f3d81cee830060b2f29862

sentinel current-epoch 8394
 
Sentry three configuration sentinel3.conf

 
# Example sentinel.conf

# Port
port 26373

# Daemon mode
daemonize yes

# Specified log file name
logfile "./sentinel3.log"

# Working path, sentinel generally designated / tmp relatively simple
dir ./

# Sentry monitor the master, at least in the instance that the quorum sentry post master down the master marked odown
# (Objective down objective down; corresponding to the presence sdown, subjective down, subjectively down) state.
# Slaves are automatically discovered, so you do not need to explicitly specify slaves.
sentinel monitor TestMaster 127.0.0.1 7003 1

# Master or slave much time (default 30 seconds) after use can not be marked as s_down state.
sentinel down-after-milliseconds TestMaster 1500

# If the sentinel value in this configuration fails to complete failover operation (ie fault master / slave automatic switching), it is considered this failover fails.
sentinel failover-timeout TestMaster 10000

# Set the master and slaves password verification
sentinel auth-pass TestMaster 0234kz9 * l

sentinel config-epoch TestMaster 15
sentinel leader-epoch TestMaster 8394

## In addition to the current Sentinel, what this master in the monitoring of sentinel
sentinel known-sentinel TestMaster 127.0.0.1 26371 b780bbc20fdea6d3789637053600c5fc58dd0690
sentinel known-sentinel TestMaster 127.0.0.1 26372 0aca3a57038e2907c8a07be2b3c0d15171e44da5

sentinel current-epoch 8394
 
See monitored in sentinel of master and slave

[Root @ rocket sentinel] # ./redis-cli -p 26371

127.0.0.1:26371> SENTINEL masters

1) 1) "name"

    2) "TestMaster"

    3) "ip"

    4) "127.0.0.1"

    5) "port"

    6) "7003"

    7) "runid"

    8) "de0896e3799706bda49cb92048776e233841e25d"

    9) "flags"

  10) "master"

127.0.0.1:26371> SENTINEL slaves TestMaster

1) 1) "name"

    2) "127.0.0.1:8003"

    3) "ip"

    4) "127.0.0.1"

    5) "port"

    6) "8003"

    7) "runid"

    8) "9b2a75596c828d6d605cc8529e96edcf951de25d"

    9) "flags"

  10) "slave"

To view the current master

127.0.0.1:26371> SENTINEL get-master-addr-by-name TestMaster

1) "127.0.0.1"

2) "7003"

Stopped master, view the disaster recovery switch case

[Root @ rocket master] # ps axu | grep redis

? Root 24000 0.2 0.9 137356 9556 Ssl Jan12 0:30 ./redis-server *: 7003

? Root 24240 0.2 0.7 137356 7504 Ssl Jan12 0:26 ./redis-server *: 8003

? Root 24873 0.3 0.7 137356 7524 Ssl 01:31 0:25 ../redis-sentinel *: 26371

? Root 24971 0.3 0.7 137356 7524 Ssl 01:33 0:25 ../redis-sentinel *: 26372

? Root 24981 0.3 0.7 137356 7520 Ssl 01:33 0:25 ../redis-sentinel *: 26373

root 24995 0.0 0.5 19404 5080 pts / 2 S + 01:34 0:00 ./redis-cli -p 26371

root 25969 0.0 0.0 103252 844 pts / 0 S + 03:33 0:00 grep redis

[Root @ rocket master] # kill -QUIT 24000

View master, master has been found to have switched to the original slave

127.0.0.1:26371> SENTINEL get-master-addr-by-name TestMaster

1) "127.0.0.1"

2) "8003"

View sentinel Log

Start the original master, discovery becomes a slave

[Root @ rocket master] # ./redis-server ./redis.conf

127.0.0.1:26371> SENTINEL slaves TestMaster

1) 1) "name"

    2) "127.0.0.1:7003"

    3) "ip"

    4) "127.0.0.1"

    5) "port"

6) "7003"

Find the master and slave occurred swap.

sentinel automatic discovery

Each Sentinel subscribe to all the master servers are monitored and from its __sentinel __ server: hello Channel, did not appear before looking through the sentinel (looking for unknown sentinels). When a Sentinel found a new Sentinel, the Sentinel it will add to a new list, the list Save the Sentinel known, with a master server to monitor all other Sentinel.

127.0.0.1:7003 [1]> SUBSCRIBE __sentinel __: hello

Reading messages ... (press Ctrl-C to quit)

1) "subscribe"

2) "__sentinel __: hello"

3) (integer) 1

1) "message"

2) "__sentinel __: hello"

3) "127.0.0.1,26373,7d919ccfb5752caf6812da2d0dba4ed0a528ceda, 8436, TestMaster, 127.0.0.1,7003,8436"

1) "message"

2) "__sentinel __: hello"

3) "127.0.0.1,26372,9eda79e93e6d1aa4541564ac28e3dc899d39e43b, 8436, TestMaster, 127.0.0.1,7003,8436"

1) "message"

2) "__sentinel __: hello"

3) "127.0.0.1,26371,8d63bebfbca9e1205a43bc13b52079de6015758e, 8436, TestMaster, 127.0.0.1,7003,8436"

Redis FAQ

Maximum Memory Problems: To set the maximum memory, to prevent non-stop application memory, causing the system memory is exhausted.

Fork process question: 'vm.overcommit_memory = 1' This is a configuration option to be added to the system, preventing the fork failed due to insufficient memory.

Password problem: the need to set up more complex to prevent brute force.
     
         
       
         
  More:      
 
- Debian 8 (amd64) installation deployment Memcached management tools MemAdmin (Server)
- Getting Started with Linux system to learn: how to install the kernel headers on Linux (Linux)
- C ++ why we chose to use the smart pointer (Programming)
- Linux regex sed detailing (Linux)
- How to configure HTTP Strict Transport Security (HSTS) (Linux)
- C # function (Programming)
- RHEL7.0 configuration CD-ROM to the local YUM (Linux)
- HAproxy let IP recording back-end RS (Server)
- Apache Linux firewall reverse proxy configuration (Linux)
- Python: Finding meet the conditions specified in the file directory (Programming)
- Linux productivity tools and tips (Linux)
- Preview function to confirm the stop resource Oracle 12c new feature crsctl (Database)
- Ubuntu system grub repair method (Linux)
- Oracle query start with connect by tree (Database)
- Linux system network security tools sudo Introduction (Linux)
- Android Notification (Programming)
- awk variables (Linux)
- Matters Oracle 11.2 single instance when connecting ASM need to pay attention and deal with the problem (Database)
- Learning C language pointer essays (Programming)
- CentOS7 + Redis Live Installation and Configuration (Linux)
     
           
     
  CopyRight 2002-2016 newfreesoft.com, All Rights Reserved.