- Linux的常用命令
- 切换目录命令cd:
使用cd app 切换到app目录
cd .. 切换到上一层目录
cd / 切换到系统根目录
cd ~ 切换到用户主目录
cd - 切换到上一个所在目录
-
- 列出文件列表:ls ll dir(*****)
ls(list)是一个非常有用的命令,用来显示当前目录下的内容。配合参数的使用,能以不同的方式显示目录内容。 格式:ls[参数] [路径或文件名]
常用:
在linux中以 . 开头的文件都是隐藏的文件
* ls
* ls -a 显示所有文件或目录(包含隐藏的文件)
* ls -l 缩写成ll
-
- 创建目录和移除目录:mkdir rmdir
mkdir(make directory)命令可用来创建子目录。
mkdir app ? 在当前目录下创建app目录
mkdir –p app2/test ?级联创建aap2以及test目
rmdir(remove directory)命令可用来删除“空”的子目录:
rmdir app ? 删除app目录
-
- 浏览文件
【cat、more、less】
cat用于显示文件的内容。格式:cat[参数]<文件名>
* cat yum.conf
more一般用于要显示的内容会超过一个画面长度的情况。按空格键显示下一个画面。
回车显示下一行内容。
按 q 键退出查看。
* more yum.conf
* 空格显示下一页数据 回车显示下一行的数据
less用法和more类似,不同的是less可以通过PgUp、PgDn键来控制。
* less yum.conf
* PgUp 和 PgDn 进行上下翻页.
【tail】
tail命令是在实际使用过程中使用非常多的一个命令,它的功能是:用于显示文件后几行的内容。
用法:
tail -10 /etc/passwd ? 查看后10行数据
tail -f catalina.log ? 动态查看日志(*****)
ctrl+c 结束查看
-
- 文件操作:
【rm】
rm 删除文件
用法:rm [选项]... 文件...
rm a.txt ? 删除a.txt文件
删除需要用户确认,y/n
rm 删除不询问
rm -f a.txt ? 不询问,直接删除
rm 删除目录
rm -r a ? 递归删除
rm不询问递归删除(慎用)
rm -rf a ? 不询问递归删除
rm -rf * ? 删除所有文件
rm -rf /* ? 自杀
【cp、mv】
cp(copy)命令可以将文件从一处复制到另一处。一般在使用cp命令时将一个文件复制成另一个文件或复制到某目录时,需要指定源文件名与目标文件名或目录。
cp a.txt b.txt ? 将a.txt复制为b.txt文件
cp a.txt ../ ? 将a.txt文件复制到上一层目录中
mv 移动或者重命名
mv a.txt ../ ? 将a.txt文件移动到上一层目录中
mv a.txt b.txt ? 将a.txt文件重命名为b.txt
【tar】命令:(***** 打包或解压)
tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成xxx.tar.gz(或称为xxx.tgz)的文件。
常用参数:
-c:创建一个新tar文件
-v:显示运行过程的信息
-f:指定文件名
-z:调用gzip压缩命令进行压缩
-t:查看压缩文件的内容
-x:解开tar文件
打包:
tar –cvf xxx.tar ./*
打包并且压缩:
tar –zcvf xxx.tar.gz ./*
解压
tar –xvf xxx.tar
tar -xvf xxx.tar.gz -C /usr/aaa
【find】命令
find指令用于查找符合条件的文件
示例:
find / -name “ins*” 查找文件名称是以ins开头的文件
find / -name “ins*” –ls
find / –user itcast –ls 查找用户itcast的文件
find / –user itcast –type d –ls 查找用户itcast的目录
find /-perm -777 –type d-ls 查找权限是777的文件
【grep】命令
查找文件里符合条件的字符串。
用法: grep [选项]... PATTERN [FILE]...示例:
grep lang anaconda-ks.cfg 在文件中查找lang
grep lang anaconda-ks.cfg –color 高亮显示
![]()
![]()
![]()
-
- 其他常用命令
【pwd】
显示当前所在目录
【touch】
创建一个空文件
* touch a.txt
【ll -h】
友好显示文件大小
【wget】
下载资料
* wget http://nginx.org/download/nginx-1.9.12.tar.gz
-
- Vim编辑器:
在Linux下一般使用vi编辑器来编辑文件。vi既可以查看文件也可以编辑文件。三种模式:命令行、插入、底行模式。
切换到命令行模式:按Esc键;
切换到插入模式:按 i 、o、a键;
i 在当前位置前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
切换到底行模式:按 :(冒号);
更多详细用法,查询文档《Vim命令合集.docx》和《vi使用方法详细介绍.docx》
打开文件:vim file
退出:esc ? :q
修改文件:输入i进入插入模式
保存并退出:esc?:wq
不保存退出:esc?:q!
三种进入插入模式:
i:在当前的光标所在处插入
o:在当前光标所在的行的下一行插入
a:在光标所在的下一个字符插入
快捷键:
dd – 快速删除一行
yy - 复制当前行
nyy - 从当前行向后复制几行
p - 粘贴
R – 替换
-
- 重定向输出>和>>
> 重定向输出,覆盖原有内容;
>> 重定向输出,又追加功能;
示例:
cat /etc/passwd > a.txt 将输出定向到a.txt中
cat /etc/passwd >> a.txt 输出并且追加
ifconfig > ifconfig.txt
-
- 管道 |
管道是Linux命令中重要的一个概念,其作用是将一个命令的输出用作另一个命令的输入。示例
ls --help | more 分页查询帮助信息
ps –ef | grep java 查询名称中包含java的进程
ifconfig | more
cat index.html | more
ps –ef | grep aio
-
- &&命令执行控制:
命令之间使用 && 连接,实现逻辑与的功能。
只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。
mkdir test && cd test
-
- 系统管理命令
date 显示或设置系统时间
date 显示当前系统时间
date -s “2014-01-01 10:10:10“ 设置系统时间df
显示磁盘信息
df –h 友好显示大小, 带有单位
free 显示内存状态
free –m 不带单位,但是会以mb单位显示内存组
top 显示,管理执行中的程序
clear 清屏幕
ps 正在运行的某个进程的状态
ps –ef 查看所有进程
ps –ef | grep ssh 查找某一进程
kill 杀掉某一进程
kill 2868 杀掉2868编号的进程
kill -9 2868 强制杀死进程
du 显示目录或文件的大小。
du –h 显示当前目录的大小,带有单位
who 显示目前登入系统的用户信息。
uname 显示系统信息。
uname -a 显示本机详细信息。依次为:内核名称(类别),主机名,内核版本号,内核版本,内核编译日期,硬件名,处理器类型,硬件平台类型,操作系统名称
- Linux的用户和组
- 用户的管理
useradd 添加一个用户
useradd test 添加test用户
useradd test -d /home/t1 指定用户home目录
passwd 设置、修改密码
passwd test 为test用户设置密码
切换登录:
ssh -l test -p 22 192.168.19.128
su – 用户名
userdel 删除一个用户
userdel test 删除test用户(不会删除home目录)
userdel –r test 删除用户以及home目录
-
- 组管理:
当在创建一个新用户user时,若没有指定他所属于的组,就建立一个和该用户同名的私有组
创建用户时也可以指定所在组
groupadd 创建组
groupadd public 创建一个名为public的组
useradd u1 –g public 创建用户指定组
groupdel 删除组,如果该组有用户成员,必须先删除用户才能删除组。
groupdel public
-
- id,su命令
【id命令】
功能:查看一个用户的UID和GID用法:id [选项]... [用户名]
![]()
直接使用id
直接使用id 用户名
【su命令】
功能:切换用户。用法:su [选项]... [-] [用户 [参数]... ]示例:
su u1 切换到u1用户
su - u1 切换到u1用户,并且将环境也切换到u1用户的环境(推荐使用)
【账户文件】
/etc/passwd 用户文件
/etc/shadow 密码文件
/etc/group 组信息文件
【用户文件】
root:x:0:0:root:/root:/bin/bash
账号名称: 在系统中是唯一的
用户密码: 此字段存放加密口令
用户标识码(User ID): 系统内部用它来标示用户
组标识码(Group ID): 系统内部用它来标识用户属性
用户相关信息: 例如用户全名等
用户目录: 用户登录系统后所进入的目录
用户环境: 用户工作的环境
【密码文件】
shadow文件中每条记录用冒号间隔的9个字段组成.
用户名:用户登录到系统时使用的名字,而且是惟一的
口令: 存放加密的口令
最后一次修改时间: 标识从某一时刻起到用户最后一次修改时间
最大时间间隔: 口令保持有效的最大天数,即多少天后必须修改口令
最小时间间隔: 再次修改口令之间的最小天数
警告时间:从系统开始警告到口令正式失效的天数
不活动时间: 口令过期少天后,该账号被禁用
失效时间:指示口令失效的绝对天数(从1970年1月1日开始计算)
标志:未使用
【组文件】
root:x:0:
组名:用户所属组
组口令:一般不用
GID:组ID
用户列表:属于该组的所有用户
- Linux上常用网络操作
- 主机名配置
hostname 查看主机名
hostname xxx 修改主机名 重启后无效
如果想要永久生效,可以修改/etc/sysconfig/network文件
-
- IP地址配置
setup设置ip地址
ifconfig 查看(修改)ip地址(重启后无效)
ifconfig eth0 192.168.12.22 修改ip地址
如果想要永久生效
修改 /etc/sysconfig/network-scripts/ifcfg-eth0文件
-
- 域名映射
/etc/hosts文件用于在通过主机名进行访问时做ip地址解析之用

-
- 网络服务管理
service network status 查看指定服务的状态
service network stop 停止指定服务
service network start 启动指定服务
service network restart 重启指定服务
service --status–all 查看系统中所有后台服务
netstat –nltp 查看系统中网络进程的端口监听情况
防火墙设置
防火墙根据配置文件/etc/sysconfig/iptables来控制本机的”出”、”入”网络访问行为。
service iptables status 查看防火墙状态
service iptables stop 关闭防火墙
service iptables start 启动防火墙
chkconfig iptables off 禁止防火墙自启
- Linux上软件安装
- lrzsz
我们可以使用yum安装方式安装 yum install lrzsz
-
- 在Linux上安装JDK:
* 上传JDK
* 卸载open-JDK
java –version
rpm -qa | grep java
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.35-1.13.7.1.el6_6.i686
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.79-2.5.5.4.el6.i686
* 通常将软件安装到/usr/local
* 直接解压就可以
tar –xvf jdk.tar.gz -C 目标路径
配置环境变量:
① vi /etc/profile
② 在末尾行添加
#set java environment
JAVA_HOME= /usr/local/jdk1.8.0_131
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
保存退出
③source /etc/profile 使更改的配置立即生效
-
- 在Linux上安装Mysql:
【步骤一】:将mysql的安装文件上传到Linux的服务器.

将mysql的tar解压

将系统自带的mysql卸载
![]()
![]()
【步骤二】:安装MYSQL服务端
![]()
下面的提示是告诉我们root用户的密码第一次是随机生成的,它保存在/root/.mysql_secret中,第一次登录需要修改root密码

【步骤三】:安装MYSQL客户端
![]()
查看生成的root密码
![]()
![]()
报错:原因是没有启动mysql服务
需要开启mysql服务
![]()
执行下面操作报错,原因是第一次操作mysql必须修改root用户的密码
![]()
设置root用户的密码
![]()
- Mysql服务加入到系统服务并自动启动操作:
chkconfig --add mysql
自动启动:
chkconfig mysql on
查询列表:Jt1FvTdVC1QIU7JG
chkconfig
- 关于mysql远程访问设置
grant all privileges on *.* to ‘root’ @’%’ identified by ‘root’
flush privileges

在linux中很多软件的端口都被”防火墙”限止,我们需要将防火墙关闭
防火墙打开3306端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables status
我们也可以直接将防火墙关闭
service iptables stop;
-
- 在Linux上安装tomcat:
1.Tomcat上传到linux上
2.将上传的tomcat解压
3.在tomcat/bin目录下执行 startup.sh(注意防火墙)
4.查看目标 tomcat/logs/catalina.out
-
- Redis安装
第一步:将redis.tar.gz解压
tar -zxvf redis-3.2.8.tar.gz
第二步:进入redis-3.2.8目录
cd redis-3.2.8
第三步:对redis进行编译
make
注意:如果安装redis是报下面的错误,是因为系统没有安装gcc环境,缺少依赖

解决方案

在使用yum安装gcc依赖的时候,会报出错误
![]()
报错原因是因为DNS服务器错误,所以需要在/etc/resolv.conf文件中添加

依赖安装完成后,对redis进行重新编译,发现还会报错一个错误

错误原因,是因为Redis默认加载的是jemalloc中的配置文件,有时候没有就会报错,可以使用
![]()
指令,加载备用的配置文件即可进行编译
第四步:安装到指定的目录
make PREFIX=/usr/local/redis install
安装完成后,我们进入目录bin中查看

redis-server redis服务器
redis-cli redis命令行客户端
redis-benchmark redis性能测试工具
redis-check-aof AOF文件修复工具
redis-check-rdb RDB文件检索工具
-
- redis客户端测试
第一步:启动redis服务
注意:我们需要将redis编译后的目录 中的redis.conf文件copy到我们自己的redis目录中。
这个redis.conf文件是redis的配置文件。
![]()
![]()
注意:前面是redis-server服务,后面redis.conf配置文件。

Redis占用的端口是6379
可以通过redis-cli命令行客户端来测试redis是否启动成功

-
- Nginx在linux下安装
nginx是C语言开发,建议在linux上运行,本教程使用Centos6.4作为安装环境。
nginx是C语言开发,建议在linux上运行,本教程使用Centos6.4作为安装环境。
- gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:
yum install gcc-c++
- PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
yum install -y pcre pcre-devel
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
- zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
yum install -y zlib zlib-devel
- openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y openssl openssl-devel
-
-
- 编译及安装
-
第一步:把nginx的源码包上传至linux服务器
第二步:解压源码包。 tar -zxf nginx-1.8.0.tar.gz
第三步:进入nginx-1.8.0文件夹。使用configure命令创建makefile。
第四步:参数设置如下:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录
第五步:make
第六步 make install

以上操作完成后,进入/usr/local/nginx目录

conf它里面装入的是nginx相关的配置文件
html目录 它里面装入的html代码
sbin目录它里面有一个nginx
想要启动nginx只需要执行bin目录下的nginx命令就可以
![]()
Nginx服务在启动时会启动两个服务

-
- Nginx常用命令
- 关闭nginx需要使用:
nginx -s stop 相当于找到nginx进程kill。
- 退出命令:
nginx -s quit
等程序执行完毕后关闭,建议使用此命令。
- 重新加载配置文件:
nginx -s reload 可以不关闭nginx的情况下更新配置文件.
-
-
- 通过端口区分不同的虚拟主机
-
Nginx的配置文件:
/usr/local/nginx/conf/nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
|
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
|
location / {
root html;
index index.html index.htm;
}
}
}
可以配置多个server,配置了多个虚拟主机。
添加虚拟主机:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
server {
listen 81;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-81;
index index.html index.htm;
}
}
}
重新加载配置文件
[root@localhost nginx]# sbin/nginx -s reload
-
-
- Nginx的配置
-
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
server {
listen 81;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-81;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.taobao.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-taobao;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.baidu.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html-baidu;
index index.html index.htm;
}
}
}
域名的配置:
192.168.25.148 www.taobao.com
192.168.25.148 www.baidu.com
-
- keepalived+nginx实现主备
- keepalived+nginx实现主备过程
- keepalived+nginx实现主备
初始状态

主机宕机

主机恢复

两台nginx,一主一备:192.168.101.3和192.168.101.4
两台tomcat服务器:192.168.101.5、192.168.101.6
-
-
- 安装keepalived
-
分别在主备nginx上安装keepalived,参考“安装手册”进行安装
-
-
- 安装环境
-
su - root
yum -y install kernel-devel*
yum -y install openssl-*
yum -y install popt-devel
yum -y install lrzsz
yum -y install openssh-clients
yum -y install libnl libnl-devel popt
-
-
- 安装keepalived
-
将keepalived-1.2.15.tar.gz上传到服务器/usr/local/下。
cd /usr/local
tar -zxvf keepalived-1.2.15.tar.gz
cd keepalived-1.2.15
执行配置命令
./configure --prefix=/usr/local/keepalived
3、编译
make
4、安装
make install
至此安装成功
5、拷贝执行文件
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
6、将init.d文件拷贝到etc下,加入开机启动项
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
7、将keepalived文件拷贝到etc下,加入网卡配置
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
8、创建keepalived文件夹
mkdir -p /etc/keepalived
9、将keepalived配置文件拷贝到etc下
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
10、添加可执行权限
chmod +x /etc/init.d/keepalived
-
-
- 加入开机启动
-
chkconfig --add keepalived #添加时必须保证/etc/init.d/keepalived存在
chkconfig keepalived on
添加完可查询系统服务是否存在:chkconfig –list
-
-
- 启动keepalived
-
启动:service keepalived start
停止:service keepalived stop
重启:service keepalived restart
-
-
- 配置日志文件
-
1.将keepalived日志输出到local0:
vi /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"
2.在/etc/rsyslog.conf里添加:
local0.* /var/log/keepalived.log
3.重新启动keepalived和rsyslog服务:
service rsyslog restart
service keepalived restart
-
-
- 打开防火墙的通讯地址
-
iptables -A INPUT -d 224.0.0.18 -j ACCEPT
/etc/rc.d/init.d/iptables save
-
- Nginx+tomcat集群+redis实现session共享
- Session共享问题演示
- Nginx+tomcat集群+redis实现session共享
- 在两个tomcat中创建项目myweb,修改index.jsp页面的标题和文本内容
- 分别启动两个tomcat,查看sessionid值
Tomcat_main
![]()
Tomcat_back
![]()
解决方案

-
-
- Session共享问题解决
-
思想:将原来由每一个tomcat管理的session统一存储到redis中管理
1.下载nginx+tomcat集群+redis实现session共享工具包
https://github.com/jcoleman/tomcat-redis-session-manager/downloads
其它依赖包

将以上四个包copy到tomcat的lib目录下(集群中的所有Tomcat都需要有这四个jar)
2.在tomcat/conf/context.xml文件中添加配置(集群中的所有Tomcat都需要配置)
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve"/>
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="192.168.19.128"
port="6379"
database="0"
maxInactiveInterval="60"
password="admin"
/>
总结:注意ip地址和密码的变化
3.查看myweb工具中sessionid

![]()
Redis帮助我们存储了session

-
- Redis集群搭建
- redis-cluster架构图

- Redis集群搭建
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

-
-
- redis集群的搭建
-
Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。
Redis集群至少需要6台服务器。
搭建伪分布式。可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006
-
-
- redis集群搭建环境
-
1、使用ruby脚本搭建集群。需要ruby的运行环境。
安装ruby
yum install ruby
yum install rubygems
- 安装ruby脚本运行使用的包。
[root@localhost ~]# gem install redis-3.0.0.gem
Successfully installed redis-3.0.0
1 gem installed
Installing ri documentation for redis-3.0.0...
Installing RDoc documentation for redis-3.0.0...
[root@localhost ~]#
[root@localhost ~]# cd redis-3.0.0/src
[root@localhost src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 Apr 1 2015 redis-trib.rb
-
-
- redis集群搭建步骤
-
需要6台redis服务器。搭建伪分布式。
需要6个redis实例。
需要运行在不同的端口7001-7006
第一步:创建6个redis实例,每个实例运行在不同的端口。需要修改redis.conf配置文件。配置文件中还需要把cluster-enabled yes前的注释去掉。

第二步:启动每个redis实例。
第三步:使用ruby脚本搭建集群。
| ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006 |
创建关闭集群的脚本:
[root@localhost redis-cluster]# vim shutdow-all.sh
redis01/redis-cli -p 7001 shutdown
redis01/redis-cli -p 7002 shutdown
redis01/redis-cli -p 7003 shutdown
redis01/redis-cli -p 7004 shutdown
redis01/redis-cli -p 7005 shutdown
redis01/redis-cli -p 7006 shutdown
[root@localhost redis-cluster]# chmod u+x shutdow-all.sh
| [root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006 >>> Creating cluster Connecting to node 192.168.25.153:7001: OK Connecting to node 192.168.25.153:7002: OK Connecting to node 192.168.25.153:7003: OK Connecting to node 192.168.25.153:7004: OK Connecting to node 192.168.25.153:7005: OK Connecting to node 192.168.25.153:7006: OK >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 Adding replica 192.168.25.153:7004 to 192.168.25.153:7001 Adding replica 192.168.25.153:7005 to 192.168.25.153:7002 Adding replica 192.168.25.153:7006 to 192.168.25.153:7003 M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001 slots:0-5460 (5461 slots) master M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002 slots:5461-10922 (5462 slots) master M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003 slots:10923-16383 (5461 slots) master S: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004 replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 S: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005 replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01 S: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006 replicates 2935007902d83f20b1253d7f43dae32aab9744e6 Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join..... >>> Performing Cluster Check (using node 192.168.25.153:7001) M: 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 192.168.25.153:7001 slots:0-5460 (5461 slots) master M: 8cd93a9a943b4ef851af6a03edd699a6061ace01 192.168.25.153:7002 slots:5461-10922 (5462 slots) master M: 2935007902d83f20b1253d7f43dae32aab9744e6 192.168.25.153:7003 slots:10923-16383 (5461 slots) master M: 74f9d9706f848471583929fc8bbde3c8e99e211b 192.168.25.153:7004 slots: (0 slots) master replicates 2e48ae301e9c32b04a7d4d92e15e98e78de8c1f3 M: 42cc9e25ebb19dda92591364c1df4b3a518b795b 192.168.25.153:7005 slots: (0 slots) master replicates 8cd93a9a943b4ef851af6a03edd699a6061ace01 M: 8b1b11d509d29659c2831e7a9f6469c060dfcd39 192.168.25.153:7006 slots: (0 slots) master replicates 2935007902d83f20b1253d7f43dae32aab9744e6 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. [root@localhost redis-cluster]# |
-
-
- redis集群的使用方法
-
Redis-cli连接集群。
[root@localhost redis-cluster]# redis01/redis-cli -p 7002 -c
-c:代表连接的是redis集群
-
- Solr服务搭建
- Solr的环境
- Solr服务搭建
Solr是java开发。
需要安装jdk。
安装环境Linux。
需要安装Tomcat。
-
-
- 搭建步骤
-
第一步:把solr 的压缩包上传到Linux系统
第二步:解压solr。
第三步:安装Tomcat,解压缩即可。
第四步:把solr部署到Tomcat下。
第五步:解压缩war包。启动Tomcat解压。
第六步:把/root/solr-4.10.3/example/lib/ext目录下的所有的jar包,添加到solr工程中。
[root@localhost ext]# pwd
/root/solr-4.10.3/example/lib/ext
[root@localhost ext]# cp * /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
第七步:创建一个solrhome。/example/solr目录就是一个solrhome。复制此目录到/usr/local/solr/solrhome
[root@localhost example]# pwd
/root/solr-4.10.3/example
[root@localhost example]# cp -r solr /usr/local/solr/solrhome
[root@localhost example]#
第八步:关联solr及solrhome。需要修改solr工程的web.xml文件。

第九步:启动Tomcat
http://192.168.25.154:8080/solr/
和windows下的配置完全一样。
-
-
- Solr的使用
-
添加文档必须有id域,其他域 必须在solr的schema.xml中定义。
-
- 配置业务域
schema.xml中定义
- 商品Id
- 商品标题
- 商品卖点
- 商品价格
- 商品图片
- 分类名称
- 商品描述
创建对应的业务域。需要制定中文分析器。
创建步骤:
第一步:把中文分析器添加到工程中。
- 把IKAnalyzer2012FF_u1.jar添加到solr工程的lib目录下
- 把扩展词典、配置文件放到solr工程的WEB-INF/classes目录下。
第二步:配置一个FieldType,制定使用IKAnalyzer
修改schema.xml文件
修改Solr的schema.xml文件,添加FieldType:
| <fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> |
第三步:配置业务域,type制定使用自定义的FieldType。
设置业务系统Field
| <field name="item_title" type="text_ik" indexed="true" stored="true"/> <field name="item_sell_point" type="text_ik" indexed="true" stored="true"/> <field name="item_price" type="long" indexed="true" stored="true"/> <field name="item_image" type="string" indexed="false" stored="true" /> <field name="item_category_name" type="string" indexed="true" stored="true" /> <field name="item_desc" type="text_ik" indexed="true" stored="false" />
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/> <copyField source="item_title" dest="item_keywords"/> <copyField source="item_sell_point" dest="item_keywords"/> <copyField source="item_category_name" dest="item_keywords"/> <copyField source="item_desc" dest="item_keywords"/> |
第四步:重启tomcat
- Solr集群的系统架构

-
- 物理结构
三个Solr实例( 每个实例包括两个Core),组成一个SolrCloud。
- 逻辑结构
Collection的逻辑分片。每个Shard被化成一个或者多个replication,通过选举确定哪个是Leader。
Master是master-slave结构中的主结点(通常说主服务器),Slave是master-slave结构中的从结点(通常说从服务器或备服务器)。同一个Shard下master和slave存储的数据是一致的,这是为了达到高可用目的。
每个Core是Solr中一个独立运行单位,提供 索引和搜索服务。一个shard需要由一个Core或多个Core组成。由于collection由多个shard组成所以collection一般由多个core组成。
Collection在SolrCloud集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个Shard(分片),它们使用相同的配置信息。
比如:针对商品信息搜索可以创建一个collection。
collection=shard1+shard2+....+shardX
索引集合包括两个Shard(shard1和shard2),shard1和shard2分别由三个Core组成,其中一个Leader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上三个Core的索引数据一致,解决高可用问题。
用户发起索引请求分别从shard1和shard2上获取,解决高并发问题。
-
- 需要实现的solr集群架构
-
-
- Shard
-
-
-
- Master或Slave
-
-
-
- Core
-
-
-
- collection
-

Zookeeper作为集群的管理工具。
- 集群管理:容错、负载均衡。
- 配置文件的集中管理
- 集群的入口
需要实现zookeeper 高可用。需要搭建集群。建议是奇数节点。需要三个zookeeper服务器。
搭建solr集群需要7台服务器。
搭建伪分布式:
需要三个zookeeper节点
需要四个tomcat节点。
建议虚拟机的内存1G以上。
-
- 需要实现的solr集群环境准备
CentOS-6.5-i386-bin-DVD1.iso
jdk-7u72-linux-i586.tar.gz
apache-tomcat-7.0.47.tar.gz
zookeeper-3.4.6.tar.gz
solr-4.10.3.tgz
-
- 安装步骤
- Zookeeper集群搭建
- 安装步骤
- 第一步:需要安装jdk环境。
- 第二步:把zookeeper的压缩包上传到服务器。
- 第三步:解压缩。
- 第四步:把zookeeper复制三份。
- [root@localhost ~]# mkdir /usr/local/solr-cloud
- [root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper01
- [root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper02
- [root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper03
- 第五步:在每个zookeeper目录下创建一个data目录。
- 第六步:在data目录下创建一个myid文件,文件名就叫做“myid”。内容就是每个实例的id。例如1、2、3
- [root@localhost data]# echo 1 >> myid
- [root@localhost data]# ll
- total 4
- -rw-r--r--. 1 root root 2 Apr 7 18:23 myid
- [root@localhost data]# cat myid
- 1
- 第七步:修改配置文件。把conf目录下的zoo_sample.cfg文件改名为zoo.cfg

| server.1=192.168.25.154:2881:3881 server.2=192.168.25.154:2882:3882 server.3=192.168.25.154:2883:3883 |
- 第八步:启动每个zookeeper实例。
- 启动bin/zkServer.sh start
- 查看zookeeper的状态:
- bin/zkServer.sh status
-
- solr集群搭建
-
- 第一步:创建四个tomcat实例。每个tomcat运行在不同的端口。8180、8280、8380、8480
- 第二步:部署solr的war包。把单机版的solr工程复制到集群中的tomcat中。
- 第三步:为每个solr实例创建一个对应的solrhome。使用单机版的solrhome复制四份。
- 第四步:需要修改solr的web.xml文件。把solrhome关联起来。
- 第五步:配置solrCloud相关的配置。每个solrhome下都有一个solr.xml,把其中的ip及端口号配置好。
- 第六步:让zookeeper统一管理配置文件。需要把solrhome/collection1/conf目录上传到zookeeper。上传任意solrhome中的配置文件即可。
- 使用工具上传配置文件:/root/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh
| ./zkcli.sh -zkhost 192.168.213.128:2181,192.168.213.128:2182,192.168.213.128:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf |
- 查看zookeeper上的配置文件:
- 使用zookeeper目录下的bin/zkCli.sh命令查看zookeeper上的配置文件:
- [root@localhost bin]# ./zkCli.sh
- [zk: localhost:2181(CONNECTED) 0] ls /
- [configs, zookeeper]
- [zk: localhost:2181(CONNECTED) 1] ls /configs
- [myconf]
- [zk: localhost:2181(CONNECTED) 2] ls /configs/myconf
- [admin-extra.menu-top.html, currency.xml, protwords.txt, mapping-FoldToASCII.txt, _schema_analysis_synonyms_english.json, _rest_managed.json, solrconfig.xml, _schema_analysis_stopwords_english.json, stopwords.txt, lang, spellings.txt, mapping-ISOLatin1Accent.txt, admin-extra.html, xslt, synonyms.txt, scripts.conf, update-script.js, velocity, elevate.xml, admin-extra.menu-bottom.html, clustering, schema.xml]
- [zk: localhost:2181(CONNECTED) 3]
- 退出:

- [zk: localhost:2181(CONNECTED) 3] quit
- 第七步:修改tomcat/bin目录下的catalina.sh 文件,关联solr和zookeeper。
- 把此配置添加到配置文件中:
- JAVA_OPTS="-DzkHost=192.168.213.128:2181,192.168.213.128:2182,192.168.213.128:2183"
第八步:启动每个tomcat实例。要包装zookeeper集群是启动状态。
第九步:访问集群

第十步:创建新的Collection进行分片处理。
http://192.168.25.154:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2


第十一步:删除不用的Collection。
http://192.168.25.154:8180/solr/admin/collections?action=DELETE&name=collection1


-
- ActiveMQ的安装
进入http://activemq.apache.org/下载ActiveMQ
使用的版本是5.12.0
-
-
- redis集群搭建步骤
-
- 需要jdk
- 安装Linux系统。生产环境都是Linux系统。
-
- 安装步骤
-
第一步: 把ActiveMQ 的压缩包上传到Linux系统。
第二步:解压缩。
第三步:启动。
使用bin目录下的activemq命令启动:
[root@localhost bin]# ./activemq start
关闭:
[root@localhost bin]# ./activemq stop
查看状态:
[root@localhost bin]# ./activemq status
注意:如果ActiveMQ整合spring使用不要使用activemq-all-5.12.0.jar包。建议使用5.11.2
进入管理后台:
http://192.168.213.128:8161/admin/
用户名:admin
密码:admin

2166

被折叠的 条评论
为什么被折叠?



