分类目录归档:服务器

linux学习中总结的经验和技巧…vim…shell…

Redis主从复制简单配置

主从复制

192.168.1.106 master机器
mkdir -p /data/redis
cp /etc/redis/redis.conf /etc/redis/redis-6379.conf
vim /etc/redis/redis-6379.conf

192.168.1.107 slave机器
mkdir -p /data/redis
cp /etc/redis/redis.conf /etc/redis/redis-6381.conf
vim /etc/redis/redis-6381.conf

连从服务器

[root@Slave redis]# redis-cli -p 6381
127.0.0.1:6381> slaveof 192.168.1.106 6379
127.0.0.1:6381> config rewrite

再配置一个从服务器

Redis 自动故障转移sentinel(哨兵)实践

最近看了Redis自动故障转移Sentinel(哨兵),故将笔记记在次处
注意,实际环境中是,多台机器,本文只是测试,所以在一台机器上配置多个Redis实例,以达到实验的目的

Redis Sentinel(哨兵)

7000配置文件

配置文件编写

设置主从关系

启动三台redis server

查看redis 7000端口的复制信息

配置sentinel

vim redis-sentinel-26379.conf

生成配置文件

启动哨兵

接下来可以测试哨兵的功能了,代码太多就不粘贴上来了,至此Redis自动故障转移简单模型已经完成

Ubuntu14.04系统Nginx的两种启动方式配置

Ubuntu14.04系统安装LNMP请看链接

那好,LNMP配置完成以后,请继续往下看本篇文章

一、套接字方式

默认虚拟主机设置文件 /etc/nginx/sites-available/default 按如下设置:
首先备份配置文件(良好的个人习惯)

index这一行加入 index.php。
PHP 重要配置配置 location ~ .php$ {} 这几行我们需要启动,反注释掉。

另外再添加一行:try_files $uri =404。

如果加载失败
打开配置文件 /etc/php5/fpm/php.ini…

进行如下更改(NOTE: You should have “cgi.fix_pathinfo = 0;” in php.ini)

重新加载 PHP-FPM:

service php5-fpm reload
现在创建一个探针文件保存在 /usr/share/nginx/html目录下

以上就是ubuntu默认配置加稍微的改动,就可以跑php程序了
浏览器下访问探针文件 (e.g. http://192.168.1.110/p.php):
正如你看到的 PHP5 正在运行,并且是通过 FPM/FastCGI,向下滚动,我们看看那些模块已经启动

二、让 PHP-FPM 使用 TCP 连接

默认情况下 PHP-FPM 侦听的是 /var/run/php5-fpm.sock,要让 PHP-FPM 使用 TCP 连接,需要打开编辑配置文件 /etc/php5/fpm/pool.d/www.conf

按照下面的修改信息

这将使php-fpm侦听端口9000上的IP 127.0.0.1(localhost)。确保你使用的端口不在你的系统上使用。

重新加载 PHP-FPM:

下面通过配置 nginx 修改主机,更改这一行注释掉 fastcgi_pass unix:/var/run/php5-fpm.sock; 这一行反注释 fastcgi_pass 127.0.0.1:9000;,按照下面的设置:

重新加载 nginx:

相关参考链接:

nginx: http://nginx.net/
PHP: http://www.php.net/
PHP-FPM: http://php-fpm.org/
Ubuntu: http://www.ubuntu.com/

为什么Nginx的性能要比Apache高得多?

这主要是因为Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(FreeBSD)网络I/O模型,而Apache则使用的是传统的select模型。曾在一篇博客上看到有这么个实例:
假设你在大学中读书,要等待一个朋友来访,而这个朋友只知道你在A号楼,但是不知道你具体住在哪里,于是你们约好了在A号楼门口见面.如果你使用的阻塞IO 模型来处理这个问题,那么你就只能一直守候A号楼门口等待朋友的到来,在这段时间里你不能做别的事情,不难知道,这种方式的效率是低下的.现在时代变化了,开始使用多路复用IO模型来处理这个问题.你告诉你的朋友来了A号楼找楼管大妈,让她告诉你该怎么走.这里的楼管大妈扮演的就是多路复用IO的角色。

解释select和epoll模型的工作方式:
select版大妈做的是如下的事情:比如同学甲的朋友来了,select版大妈比较笨,她带着朋友挨个房间进行查询谁是同学甲,你等的朋友来了。如果每到来一个朋友楼管大妈都要全楼的查询同学,那么处理的效率必然就低下了,过不久楼底就有不少的人了。
epoll版大妈就比较先进了,她记下了同学甲的信息,比如说他的房间号,那么等同学甲的朋友到来时,只需要告诉该朋友同学甲在哪个房间即可,不用自己亲自带着人满大楼的找人了。epoll大妈可以不用吹灰之力就可以定位到同学甲。一看就很明白 epoll和select 模型的区别了吧。

在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在内核源码中 /usr/include/linux/posix_types.h 中
#undef __FD_SETSIZE
#define __FD_SETSIZE    1024
如果想要同时检测1025个句柄的可读状态或 可写状态 ,select是不能实现的。在内核中实现select是使用轮询方法,即每次检测都会遍历所有FD_SET中的句柄,显然,select函数的执行时间与 FD检测的句柄数越多就会越费时。

epoll是多路复用IO(I/O Multiplexing) 中的一种方式,仅用于linux2.6以上内核。而epoll模型它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是10万左右,具体请查看:cat /proc/sys/fs/file-max ,这个数目和系统内存关系很大。
传统的select/poll另一个致命弱点就是当你拥有一个很大的socket集合,不过由于网络延时,任一时间只有部分的socket是”活跃”的,但是select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。但是epoll不存在这个问题,它只会对”活跃”的socket进行操作—这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么,只有”活跃”的socket才会主动的去调用 callback函数,其他idle状态socket则不会,在这点上,epoll实现了一个”伪”AIO,因为这时候推动力在os内核。在一些 benchmark中,如果所有的socket基本上都是活跃的—比如一个高速LAN环境,epoll并不比select/poll有什么效率,相反,如果过多使用epoll_ctl,效率相比还有稍微的下降。但是一旦使用idle connections模拟WAN环境,epoll的效率就远在select/poll之上了。

epoll有两种工作模式:Edge Triggered (ET)、Level Triggered (LT)
LT(level triggered)是缺省的工作方式,并且同时支持block和no-block socket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你的,所以,这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的代表。
ET (edge-triggered)是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了(比如,你在发送,接收或者接收请求,或者发送接收的数据少于一定量时导致了一个EWOULDBLOCK 错误)。

Ubuntu14.04下搭建LANMP环境(Apache+Nginx+MySQL+PHP)

每回安装环境都要去百度几文章,今天索性自己写一篇,以后省去百度的麻烦了,本文介绍的是在Ubuntu14.04下搭建LANMP环境(Apache+Nginx+MySQL+PHP),如果你只想安装lamp或者lnmp都通用,直接拿去。
首先分两步走:
每一、先更新系统然后安装必要的依赖(这一步为以后的扩展提供铺垫)
第二、安装mysql apache2 php

重启apache2

ubuntu下apache2虚拟主机配置

文件修改为以下内容

重启apache2测试效果

在浏览器上http://localhost/info.php

第三步、安装Nginx

配置Nginx使其支持PHP

Nginx主机配置(端口改为8080,根目录和刚才的apache2要目录一样/data/www)

重启服务,查看进程

附apache2虚拟主机配置方法:

在Apache2中,有效的站点信息都存放在/etc/apache2/sites-available/文件 里面。 我们可以添加格式如下的信息来增加一个有效的虚拟空间,将default文件复制一份改一下里面的路径就可以了,要启用配置则则将此文件做一个软链接到 /etc/apache2/sites-enabled/ 目录下
下面具个例子说明:

添加软链接到/etc/apache2/sites-enabled目录

注意:

查看fpm进程是

重启服务是

不知道为何两者名称不统一,最好用ps aux| grep fpm来查看

Linux下查看和添加PATH环境变量

$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。

编辑 PATH 声明,其格式为:

PATH=$PATH:<PATH1>:<PATH2>:<PATH3>:——:<PATHN>

你可以自己加上指定的路径,中间用冒号隔开。环境变量更改后,在用户下次登陆时生效,如果想立刻生效,则可执行下面的语句:

可用 export命令查看PATH值。

单独查看PATH环境变量,可用:

添加PATH环境变量,可用:

查看命令:echo $PATH, 可判断是否添加PATH成功。
上述方法的PATH 在终端关闭后就会消失。所以还是建议通过编辑/etc/profile来改PATH,也可以改家目录下的.bashrc(即:~/.bashrc)。
第二种方法:

在文档最后,添加:

保存,退出,然后运行:

不报错则成功。

实例:在使用laravel时要将~/.composer/vendor/bin加入到PATH

 

详见:http://blog.sciencenet.cn/home.php?mod=space&uid=830496&do=blog&id=676304

rsync服务配置(centos6.3系统环境下配置文件同步)

一、rsync 简介

Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录。

Rsync的基本特点如下:

  1. 可以镜像保存整个目录树和文件系统;
  2. 可以很容易做到保持原来文件的权限、时间、软硬链接等;
  3. 无须特殊权限即可安装;
  4. 优化的流程,文件传输效率高;
  5. 可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
  6. 支持匿名传输,以方便进行网站镜像。

无论本地同步目录还是远程同步数据,首次运行时将会把全部文件拷贝一次,以后再运行时将只拷贝有变化的文件(对于新文件)或文件的变化部分(对于原有文件)。

rsync 在首次复制时没有速度优势,速度不如 tar,因此当数据量很大时您可以考虑先使用 tar 进行首次复制,然后再使用 rsync 进行数据同步。

二、系统环境

系统平台:CentOS release 6.3 (Final)

Linux RS2 2.6.32-279.el6.i686 #1 SMP Fri Jun 22 10:59:55 UTC 2012 i686 i686 i386 GNU/Linux

rsync 版本:rsync  version 3.0.6  protocol version 30

rsync 服务器:RS1 (192.168.1.201)
rsync 客户端:RS2 (192.168.1.202)

三、服务器端安装rsync服务

四、配置 rsync 服务

4.1 配置 rsync 服务器的步骤

首先要选择服务器启动方式
对于负荷较重的 rsync 服务器应该使用独立运行方式
对于负荷较轻的 rsync 服务器可以使用 xinetd 运行方式
创建配置文件 rsyncd.conf
对于非匿名访问的 rsync 服务器还要创建认证口令文件

4.2 独立运行 rsync 服务

4.3 以 xinetd 运行 rsync 服务

管理员可以修改 /etc/xinetd.d/rsync 配置文件以适合您的需要。例如,您可以修改配置行
server_args = –daemon

4.4 配置文件 rsyncd.conf

 

五、rsync 服务器应用例子

5.1 在服务器端RS1上配置 rsync 服务

a. 编辑配置文件

 

b. 建立/etc/rsyncd/rsyncd.secrets文件

c. 为了密码的安全性,我们把权限设为600

d. 建立客户端连接到服务器看到的欢迎信息文件/etc/rsyncd/rsyncd.motd

e. 启动rsync

f. 查看873端口是否起来

如果rsync启动成功的话可以看到873端口已经在监听了。

g. 打开防火墙

h. 服务器的详细信息

 

5.2. 客户端配置

a. 客户端安装rsync

b. 配置客户端

c. 通过rsync客户端来同步数据

可以看到Runtime目录没有被同步过来

说明:
-a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
–delete 选项,表示客户端上的数据要与服务器端完全一致,如果 /var/www/html/hello/目录中有服务器上不存在的文件,则删除
–password-file 服务器rsync的密码文件,如果没有些选项则需要输入密码

5.3 rsync 客户端自动与服务器同步数据
编辑crontab

表示每10分执行一次同步

参考资料:
http://www.howtocn.org/rsync:use_rsync

mysql主主复制(双主复制)

MySQL主主复制结构区别于主从复制结构。在主主复制结构中,两台服务器的任何一台上面的数据库存发生了改变都会同步到另一台服务器上,这样两台服务器互为主从,并且都能向外提供服务。
有了上一节的主从复制,那么主主复制就很容易了。

一、先修改配置文件

服务器A(192.168.1.254)配置如下

服务器B(192.168.1.252)配置

两台服务器都重启

注:二都只有server-id不同和 auto-increment- offset不同
auto-increment-offset是用来设定数据库中自动增长的起点的,回为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突
replicate-do-db 指定同步的数据库,我们只在两台服务器间同步test数据库
另:auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2

二、同步数据

本文是用test做的实验,导出将test.sql文件从254服务器拷贝到252服务器
备份数据前先锁表,保证数据一致性 继续阅读

CentOS6.3 mysql主从复制(注:mysql是通过yum源安装的)

mysql复制的优点主要包括以下3个方面:
1.如果主服务器出现问题,可以快速切换到从服务器提供的服务
2.可以在从服务器上执行查询操作,降低主服务器的访问压力
3.可以在从服务器上执行备份,以避免备份期间影响主服务器的服务

注意:一般只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询,实时性要求高的数据仍然需要从主服务器获得

主服务器配置
我的服务器采用yum安装,如果想配置文件
设置默认编码等一些初始参数(my.cnf)(若无my.cnf, 则可cp /usr/share/mysql/my-small.cnf /etc/my.cnf)

前期准备数据:
两台服务器
master:192.168.1.111(主服务器)
slave:192.168.1.112(从服务器)
网络互通(关闭防火墙,关闭selinux)具体方法请看链接

一、主从服务器分别作以下操作

1.1、版本一致
1.2、初始化表,并在后台启动mysql
1.3、修改root的密码(新安装的mysql没有密码)
二、mysql主服务器配置master(192.168.1.111)

1)修改主服务器master:

2)给从服务器设置授权用户(创建复制帐号)

建立一个帐户mysync,并且只能允许从192.168.1.112这个地址上来登陆,密码是123456。
(如果因为mysql版本新旧密码算法不同,可以设置:set password for ‘mysync’@’192.168.1.112’=old_password(‘123456’))

3)在主服务器上设置读取锁定有效,确保没有数据库操作,以便获得一个一致性的快照

4)查看主服务器上当前的二进制日志名和偏移量值

5)目前主数据库服务器已经停止了更新操作,生成主数据库的备份,备份的方式有两种:

(1)cp全部的数据
如果主数据库的服务可以停止,那么直接cp数据文件应该最快的生成快照的方法:
(2)mysqldump备份数据方法
[root@localhost ~]# /usr/bin/mysqldump -uroot -p123456 test -l -F >/tmp/test.sql

6)主数据库备份完毕后,主数据库可以恢复写操作,剩下的操作只需要在从服务器上去执行:

mysql> unlock tables;

7)把主数据库的一致性备份恢复到从数据库上,把以上的压缩包解压到相应的目录即可

三、mysql从服务器配置slave(192.168.1.112)

1)修改从服务器slave:

2)将主库上备份的数据库恢复到从库(导入之前备份数据)

-v查看导入的详细信息
-f是当中间遇到错误时,可以skip过去,继续执行下面的语句

3)重启从库MYSQL

4)登录从库的MySQL命令行,执行:

5)启动从库连接,执行:

6)查看从库状态:

如果有出现以上结果,则配置成功

CentOS6.3安装samba服务并配置匿名访问方式

为了在本地测试,但环境是liunx,每次用ftp来上传,显得有点啰嗦。于是给自己的虚拟主机CentOS6.3安装samba服务并配置匿名访问方式,这样就可以在共享里面直接用编辑器编辑了,和编辑本地文件一样。接下来看看如何简单配置samba服务器。
一、CentOS6.3安装samba服务

二、编辑samba配置文件

1)更改用户组

2)授权可以访问的ip地址

3)设置共享方式

三种共享方式介绍
user 用户模式 需要密码
share 匿名共享
server 比user级更高级的安全性
4)设置访问目录

guest ok = yes //允许匿名访问,不设置则匿名无法访问
5)重启服务

6)设置用户访问方式(如果设置了共享方式,此步略过)

增加配置,如下:

三、配置防火墙策略

1)加入samba的端口

2)重启防火墙服务

四、将远程linux系统的文件夹映射为windows系统的外挂盘

1)在计算机上点击右键,选择弹出菜单中的“映射网络驱动器”选项

2)在弹出的对话框中点击“浏览”,选择自己要映射的文件夹。我的是(\\192.168.1.110\work)

3)选择的文件夹就会显示在自己的windows磁盘列表了,

我们就可以和linux下的work文件夹像windows下的本地磁盘一样愉快的玩耍了!!!

附:
1)查看服务端口

2)关闭selinux方法

重启机器 $reboot