LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭

LOFTER-网易轻博

实施

574浏览    110参与
广州救火

python对"\"会进行处理

如果名称,代码中包含\的,要进行字符比较时,会产生转义的效果

如果名称,代码中包含\的,要进行字符比较时,会产生转义的效果

博客已迁移,请看签名

linux下使用自带mail发送邮件

1.安装

yum install mailx -y


2.更改配置

编辑 vi /etc/mail.rc在最后一行添加如下信息

set from=test@163.com

###此处设置发件人的信息

set smtp=smtp.163.com

###此处配置邮件服务地址,因为邮箱是163的,所以此处配置为smtp.163.com

set smtp-auth-user=test@163.com

###此处配置发件人邮箱地址

set smtp-auth-password=abc

###切记此处配置abc是客户端授权码,不是发件人邮箱地址密码

set smtp-auth=login...

1.安装

yum install mailx -y


2.更改配置

编辑 vi /etc/mail.rc在最后一行添加如下信息

set from=test@163.com

###此处设置发件人的信息

set smtp=smtp.163.com

###此处配置邮件服务地址,因为邮箱是163的,所以此处配置为smtp.163.com

set smtp-auth-user=test@163.com

###此处配置发件人邮箱地址

set smtp-auth-password=abc

###切记此处配置abc是客户端授权码,不是发件人邮箱地址密码

set smtp-auth=login

###邮件默认认证方式


3.测试发送

echo “测试内容”|mail -s “测试邮件” xx@163.com


4.编写脚本

#!/bin/bash

help(){

   echo "eg: $0 [Subject] [address] [content_file] [file]"

   echo ""

   exit 1

}

if [ ! -n "$1" ] ; then

    help

fi

cDate=`date +%Y%m%d`

if [ ! -n "$2" ] ; then

    help

else

    mail_to=$2

    echo "      Send Mail to ${mail_to}"

fi

if [ ! -n "$4" ] ; then

    mail -s $1 ${mail_to}<$3

else

    mail -s $1 -a $4 ${mail_to}<$3

fi


5.使用方法:

./sendmail.sh  收件人  收件人邮箱  内容(文件,如:1.txt)


博客已迁移,请看签名

Linux服务器资源监控脚本

脚本可监控以下信息,方便日常统计巡检:


  • 互联网连通性

  • 操作系统类型

  • 操作系统名称

  • 操作系统版本

  • 架构

  • 内核版本

  • 主机名

  • 内部IP

  • 外部IP

  • 域名服务器

  • 已登录用户

  • 内存使用率

  • 交换分区使用率

  • 磁盘使用率

  • 平均负载

  • 系统开机时间

一键脚本代码:

yum install sysstat wget -y && wget -N --no-check-certificate https://raw.githubusercontent.com/Lcry/Command-file/...

脚本可监控以下信息,方便日常统计巡检:

 

  • 互联网连通性

  • 操作系统类型

  • 操作系统名称

  • 操作系统版本

  • 架构

  • 内核版本

  • 主机名

  • 内部IP

  • 外部IP

  • 域名服务器

  • 已登录用户

  • 内存使用率

  • 交换分区使用率

  • 磁盘使用率

  • 平均负载

  • 系统开机时间

一键脚本代码:

yum install sysstat wget -y && wget -N --no-check-certificate https://raw.githubusercontent.com/Lcry/Command-file/master/monitor_ch.sh && chmod +x monitor_ch.sh && ./monitor_ch.sh


执行结果截图:




说明:脚本可能还不是很完善,v0.1版本,后期有时间就改善以下增加发送邮箱报警以及定时任务。

博客已迁移,请看签名

Centos6编译安装apache2.4教程

apache与nginx优缺点参考:

https://www.cnblogs.com/huangye-dream/p/3550328.html

总结一点:

nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。 


安装步骤:

1:安装依赖

yum -y install gcc openssl openssl-devel openssl-clients pcre pcre-devel perl perl-devel pcre expat-devel


2.下载源码包

wget http://mirrors.tuna.tsinghua...

apache与nginx优缺点参考:

https://www.cnblogs.com/huangye-dream/p/3550328.html

总结一点:

nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。 


安装步骤:

1:安装依赖

yum -y install gcc openssl openssl-devel openssl-clients pcre pcre-devel perl perl-devel pcre expat-devel


2.下载源码包

wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz

wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz

wget http://mirrors.hust.edu.cn/apache//httpd/httpd-2.4.33.tar.gz



3.解压

tar zxvf apr-1.6.3.tar.gz

tar zxvf apr-util-1.6.1.tar.gz

tar zxvf httpd-2.4.33.tar.gz


4.移动改名

mv apr-1.6.3 apr

mv apr-util-1.6.1 apr-util

mv apr apr-util httpd-2.4.33/srclib/


5.编译

cd /usr/httpd-2.4.33

./configure \

--prefix=/usr/local/apache2 \

--with-included-apr \

--enable-so \

--enable-deflate=shared \

--enable-expires=shared \

--enable-rewrite=shared \

--with-pcre \

--with-ssl


6.安装

make && make install


7.修改相应配置

vi /usr/local/apache2/conf/httpd.conf

查找到/ServerName,添加一行:

ServerName xxx(服务器的hostname):80


8.添加自启动

1)复制启动脚本文件

cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/

2)改名

cd /etc/rc.d/init.d/

mv apachectl httpd

3)修改脚本

vi httpd 头部添加设置:

#!/bin/bash

#chkconfig:345 61 61

#description:Apache httpd


9.加入开机自启动

chkconfig --add httpd

chkconfig --list|grep httpd

chkconfig httpd on


10.启动

service httpd start


11.访问

http://IP:80

如下图界面即成功



----

若需要配置域名转发,修改httpd.conf

找到以下几行取消注释:

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule proxy_http_module modules/mod_proxy_http.so


再底部添加转发配置:

<VirtualHost *:80>

    ServerName  域名

    ServerAlias 域名

    ProxyPreserveHost On

    ProxyRequests Off

    ProxyPass / http://192.168.131.120:8080/

    ProxyPassReverse / http://192.168.131.120:8080/

</VirtualHost>

<VirtualHost *:82>

    ServerName  域名

    ServerAlias 域名

    ProxyPreserveHost On

    ProxyRequests Off

    ProxyPass / http://192.168.131.120:9090/

    ProxyPassReverse / http://192.168.131.120:9090/

</VirtualHost>




参考文章:

http://www.bubuko.com/infodetail-2417472.html

https://www.cnblogs.com/butterflies/p/8287060.html

博客已迁移,请看签名

解决远程桌面发生身份验证错误,要求的函数不受支持

具体错误如下图:


解决办法:

1.win+R打开运行,输入gpedit.msc


2.在打开的页面依次打开

计算机配置>管理模板>系统>凭据分配>加密Oracle修正 选择启用并选择易受攻击




3.验证,再打开远程连接一次试试。

具体错误如下图:



解决办法:

1.win+R打开运行,输入gpedit.msc



2.在打开的页面依次打开

计算机配置>管理模板>系统>凭据分配>加密Oracle修正 选择启用并选择易受攻击





3.验证,再打开远程连接一次试试。

博客已迁移,请看签名

Tomcat指定jdk版本

linux:

tomcat/bin下面的setclasspath.sh文件适当位置添加以下内容:

export JAVA_HOME=/usr/local/jdk1.8.0_112

export JAVA_JRE=/usr/local/jdk1.8.0_112/jre

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar


windows:

tomcat/bin下面的setclasspath.bat文件适当位置添加以下内容:

set...

linux:

tomcat/bin下面的setclasspath.sh文件适当位置添加以下内容:

export JAVA_HOME=/usr/local/jdk1.8.0_112

export JAVA_JRE=/usr/local/jdk1.8.0_112/jre

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar



windows:

tomcat/bin下面的setclasspath.bat文件适当位置添加以下内容:

set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_17

set JAVA_JRE=C:\Program Files\Java\jdk1.7.0_17/jre

set PATH=$JAVA_HOME/bin:$PATH

set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar



验证方法:

linux启动startup.sh有提示版本;

windows在bin目录下执行cmd命令,然后version也可以看到版本;

博客已迁移,请看签名

TortoiseSVN的汉化教程

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

                            ...

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

                                                                                                                --摘录百度百科

1.首先去官网下载SVN

网址:

https://tortoisesvn.net/downloads.html#



2.下拉到底部,下载汉化包



3.先安装SVN在执行汉化即可


4.打开SVN设置中文语言



5.再次打开就是汉化的了~祝大家成功


参考链接:

https://jingyan.baidu.com/article/20095761d6c767cb0721b43f.html




博客已迁移,请看签名

Oracle自动备份脚本并自动删除2周前备份内容

1.环境

系统:centos6.9

oracle版本:11g 11.2.0

oracle安装目录:/home/u01/app/oracle/product/11.2.0/dbhome_1

备份目录:/home/u01/app/oracle/oradata/bak

脚本位置:/home/oraclebak/oraclebak.sh


2.脚本代码

脚本内容如下,有注释,请自行修改

------------------------------

#2018.04.17刘修改

#oracle自动备份脚本

#/bin/sh

export ORACLE_SID=orcl

export...

1.环境

系统:centos6.9

oracle版本:11g 11.2.0

oracle安装目录:/home/u01/app/oracle/product/11.2.0/dbhome_1

备份目录:/home/u01/app/oracle/oradata/bak

脚本位置:/home/oraclebak/oraclebak.sh


2.脚本代码

脚本内容如下,有注释,请自行修改

------------------------------

#2018.04.17刘修改

#oracle自动备份脚本

#/bin/sh

export ORACLE_SID=orcl

export ORACLE_HOME=/home/u01/app/oracle/product/11.2.0/dbhome_1

export NLS_LANG=american_america.zhs16gbk

export DATA_DIR=/home/u01/app/oracle/oradata/bak

#获取系统时间,精确到秒

now=`date +%Y%m%d%H%M%S`

#获取打包时间精确到小时

ziptime=`date +"%Y%m%d%H"`

#获取删除时间,当前时间的前2周

deletetime=`date -d "2 week ago" +"%Y%m%d%H"`

#删除2周前的zip包

rm -rf /home/u01/app/oracle/oradata/bak/db_$deletetime.zip

echo start exp $dmpfile ...

/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dbservice/123456 DUMPFILE=dbservice$now.dmp DIRECTORY=DPDATA1 schemas=dbservice

/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dbcount/123456 DUMPFILE=dbcount$now.dmp DIRECTORY=DPDATA1 schemas=dbcount

/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dbcenter/123456 DUMPFILE=dbcenter$now.dmp DIRECTORY=DPDATA1 schemas=dbcenter

/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dboperation/123456 DUMPFILE=dboperation$now.dmp DIRECTORY=DPDATA1 schemas=dboperation

/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dbcms/123456 DUMPFILE=dbcms$now.dmp DIRECTORY=DPDATA1 schemas=dbcms

/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp db_resource/123456 DUMPFILE=db_resource$now.dmp DIRECTORY=DPDATA1 schemas=db_resource

/home/u01/app/oracle/product/11.2.0/dbhome_1/bin/expdp dbcas/123456 DUMPFILE=dbcas$now.dmp DIRECTORY=DPDATA1 schemas=dbcas


zip -r /home/u01/app/oracle/oradata/bak/db_$ziptime.zip  /home/u01/app/oracle/oradata/bak/*.dmp

rm -rf /home/u01/app/oracle/oradata/bak/*.dmp


------------------------------

3.脚本是按照表空间导出的

若需要全库或者某用户导出,请参考我的另外一篇文章:

http://lcryblog.lofter.com/post/1e131973_11eb1eda


4.设置定时任务

vi /etc/crontab

若无该文件请执行yum安装crond命令:yum install crontabs

末尾添加一行:

00 03 * * * oracle /home/oraclebak/oraclebak.sh

以上意思为每天3:00分执行一次备份


查看定时任务日志:tail -f /var/log/cron

注:一定要手动执行一次看是否成功,内容比较多可以注释掉,只导出一个数据少的库做测试。



博客已迁移,请看签名

Kettle调度报错Error Transforming zip 解决方法

昨天做了kettle调度任务,今日检查输出日志,每个日志里面开头都有以下报错,虽然kjob都执行成功了,但是还是得解决:


-------------报错日志信息-----------------

2018/04/17 05:44:14 - cfgbuilder - Warning: The configuration parameter [org] is not supported by the default configuration builder for scheme: sftp

05:44:18,848 ERROR [WebjarsURLConnection] Error...

昨天做了kettle调度任务,今日检查输出日志,每个日志里面开头都有以下报错,虽然kjob都执行成功了,但是还是得解决:


-------------报错日志信息-----------------

2018/04/17 05:44:14 - cfgbuilder - Warning: The configuration parameter [org] is not supported by the default configuration builder for scheme: sftp

05:44:18,848 ERROR [WebjarsURLConnection] Error Transforming zip

java.io.IOException: Pipe closed

at java.io.PipedInputStream.checkStateForReceive(PipedInputStream.java:260)

at java.io.PipedInputStream.receive(PipedInputStream.java:226)

at java.io.PipedOutputStream.write(PipedOutputStream.java:149)

at java.util.zip.DeflaterOutputStream.deflate(DeflaterOutputStream.java:253)

at java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:255)

at org.pentaho.osgi.platform.webjars.WebjarsURLConnection.transform(WebjarsURLConnection.java:190)

at org.pentaho.osgi.platform.webjars.WebjarsURLConnection.access$000(WebjarsURLConnection.java:54)

at org.pentaho.osgi.platform.webjars.WebjarsURLConnection$2.call(WebjarsURLConnection.java:90)

at org.pentaho.osgi.platform.webjars.WebjarsURLConnection$2.call(WebjarsURLConnection.java:87)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

05:44:18,864 ERROR [WebjarsURLConnection] Error Transforming zip



-------------------------------------------------

百度了一波,解决方法很简单,清理一下缓存即可。

1)进入kettle安装目录{data-integration}\system\karaf

版本不一样缓存文件也不一样,有些是在{data-integration}\system\karaf\caches下

删除下面的data1文件,若有多个data都要删除



2)手动执行调度脚本bat查看日志是否好了呢?




博客已迁移,请看签名

• 好奇(Curiosity)——有很多事情可以探索和思考;

• 荣誉(Honor)——因为工作体现了你的价值而感到自豪;

• 认可(Acceptance)——同事认可你所做的以及你本人;

• 能力(Mastery)——工作对你的能力有挑战但在可控范围之内;

• 权力(Power)——你有足够的空间来影响身边的人;

• 自由(Freedom)——你在工作和责任方面独立于其他人;

• 关系(Relatedness)——你与工作中其他人有良好的社会关系;

• 有序(Order)——你有足够的规则和策略来创建稳定的环境;

• 目的(Goal)——你生命的目的也体现在所做的工作中;...

• 好奇(Curiosity)——有很多事情可以探索和思考;

• 荣誉(Honor)——因为工作体现了你的价值而感到自豪;

• 认可(Acceptance)——同事认可你所做的以及你本人;

• 能力(Mastery)——工作对你的能力有挑战但在可控范围之内;

• 权力(Power)——你有足够的空间来影响身边的人;

• 自由(Freedom)——你在工作和责任方面独立于其他人;

• 关系(Relatedness)——你与工作中其他人有良好的社会关系;

• 有序(Order)——你有足够的规则和策略来创建稳定的环境;

• 目的(Goal)——你生命的目的也体现在所做的工作中;

• 地位(Status)——你有很好的职位并被同事所认可。

博客已迁移,请看签名

Oracle11g利用透明网关连接Sqlserver数据库

为了让oracle直接调用sqlserver里面的表和视图,oracle11g透明网关可以实现这个功能。

一、下载oracleGetway

下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461.html


二、直接解压在WINDOWS机器上解压安装,可以将透明网关安装在sqlserver所在服务器。


三、安装完后修改配置文件

第一个配置文件位置:D:\product\11.2.0\tg_1\dg4msql\admin\initdg4msql...

为了让oracle直接调用sqlserver里面的表和视图,oracle11g透明网关可以实现这个功能。

一、下载oracleGetway

下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461.html


二、直接解压在WINDOWS机器上解压安装,可以将透明网关安装在sqlserver所在服务器。


三、安装完后修改配置文件

第一个配置文件位置:D:\product\11.2.0\tg_1\dg4msql\admin\initdg4msql.ora

路径根据自己安装的路径寻找

关键配置:

HS_FDS_CONNECT_INFO=[10.0.3.152]//xmgxy    

#sqlserver数据库IP和数据库名字,安装的时候会让你配置的

HS_FDS_TRACE_LEVEL=OFF

#日志追踪,可以设置ON,会生成日志追踪

HS_FDS_RECOVERY_ACCOUNT=RECOVER

HS_FDS_RECOVERY_PWD=RECOVER


第二个配置文件位置:D:\product\11.2.0\tg_1\NETWORK\ADMIN\listener.ora

增加以下内容:

SID_LIST_LISTENER =

   (SID_LIST =

     (SID_DESC =

     (GLOBAL_DBNAME = xmgxy)                #sqlserver数据库名

     (PROGRAM = dg4msql)                        #dg4msql这个为D:\product\11.2.0\tg_1\dg4msql这个目录名,一般不变

     (SID_NAME = dg4msql)                        #SID_NAME为D:\product\11.2.0\tg_1\dg4msql\admin\initdg4msql.ora文件除去init的符号,也是连接的实例名

     (ORACLE_HOME = D:\product\11.2.0\tg_1)

    )

  )


四、启动监听

启动监听位置:D:\product\11.2.0\tg_1\BIN\LSNRCTL.EXE

直接打开,先停止再打开

stop

start即可

可以看到实例dg4msql已经启动


五、打开windows防火墙,默认1521端口,入站规则里放开端口


六、oracle所在服务器操作

--创表dblink语句,如下为dblink连接名为ykt_dblink,帐号为sa,密码为123456,也可以将该文件写入oracle监听文件里面

create public database link ykt_dblink connect to sa identified by "123456" using

'(DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST =10.0.3.152)(PORT = 1521))

    (CONNECT_DATA=(SID=dg4msql))    #这个SID为配置文件的SID_NAME,也就是实例名

    (HS=OK)

  )'


--查看dblink语句

select t.* from dba_objects t where object_type='DATABASE LINK';


--验证连接:

select * from sqlserverXXX表@dblink连接名

如:select * from m_ykt_xfjl@ykt_dblink


注:查询某个字段一定要用""才能查询,不然会报错‘无效标识符



参考文章:

https://www.cnblogs.com/xqzt/p/5688659.html

https://jingyan.baidu.com/article/dca1fa6f42a662f1a44052a4.html

博客已迁移,请看签名

搭建高可用mongodb集群(二:分片、副本集)

在第一节中尝试了Mongodb集群主从,发现很多问题,并不能实现高可用热切换,2台机器可参考我另外一篇文章主从集群。

链接:http://lcryblog.lofter.com/post/1e131973_1268bf54


环境准备:

Centos6.9最小化安装,三台机器:

IP1:10.0.3.182

IP2:10.0.3.183

IP3:10.0.3.184


安装包版本:mongodb-linux-x86_64-amazon-3.4.6.tgz

下载地址:

https://www.mongodb.org/dl/linux/x86_64-amazon?_ga=2....

在第一节中尝试了Mongodb集群主从,发现很多问题,并不能实现高可用热切换,2台机器可参考我另外一篇文章主从集群。

链接:http://lcryblog.lofter.com/post/1e131973_1268bf54


环境准备:

Centos6.9最小化安装,三台机器:

IP1:10.0.3.182

IP2:10.0.3.183

IP3:10.0.3.184


安装包版本:mongodb-linux-x86_64-amazon-3.4.6.tgz

下载地址:

https://www.mongodb.org/dl/linux/x86_64-amazon?_ga=2.51756777.1974588697.1521554583-771022144.1517400121


实现原理:


如上图:颜色一致的为一组分片


基本概念:

mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。

config server,顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样 mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,防止数据丢失!

shard,分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。基本思想就是将集合切成小块,这些块分散到若干片里,每个片只负责总数据的一部分,最后通过一个均衡器来对各个分片进行均衡(数据迁移)。

replica set,中文翻译副本集,其实就是shard的备份,防止shard挂掉之后数据丢失。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。

仲裁者(Arbiter),是复制集中的一个MongoDB实例,它并不保存数据。仲裁节点使用最小的资源并且不要求硬件设备,不能将Arbiter部署在同一个数据集节点中,可以部署在其他应用服务器或者监视服务器中,也可部署在单独的虚拟机中。为了确保复制集中有奇数的投票成员(包括primary),需要添加仲裁节点做为投票,否则primary不能运行时不会自动切换primary。

简单了解之后,我们可以这样总结一下,应用请求mongos来操作mongodb的增删改查,配置服务器存储数据库元信息,并且和mongos做同步,数据最终存入在shard(分片)上,为了防止数据丢失同步在副本集中存储了一份,仲裁在数据存储到分片的时候决定存储到哪个节点。


集群安装:(三台机器)

端口分配如下:

mongos:20000

config:21000

shard1:27001

shard2:27002

shard3:27003

放防火墙,不解释了吧~~


1.上传安装包到服务器

包名:mongodb-linux-x86_64-amazon-3.4.6.tgz


2.解压

tar -xzvf mongodb-linux-x86_64-amazon-3.4.6.tgz -C /usr/local/


3.进入文件夹

cd /usr/local/mongodb-linux-x86_64-amazon-3.4.6


4.改名

mv mongodb-linux-x86_64-amazon-3.4.6 mongodb


5.创建相关目录

分别在每台机器建立conf、mongos、config、shard1、shard2、shard3六个目录,因为mongos不存储数据,只需要建立日志文件目录即可。

mkdir -p /usr/local/mongodb/conf

mkdir -p /usr/local/mongodb/mongos/log

mkdir -p /usr/local/mongodb/config/data

mkdir -p /usr/local/mongodb/config/log

mkdir -p /usr/local/mongodb/shard1/data

mkdir -p /usr/local/mongodb/shard1/log

mkdir -p /usr/local/mongodb/shard2/data

mkdir -p /usr/local/mongodb/shard2/log

mkdir -p /usr/local/mongodb/shard3/data

mkdir -p /usr/local/mongodb/shard3/log


6.配置环境变量

编辑vi /etc/profile,添加下方内容

export MONGODB_HOME=/usr/local/mongodb

export PATH=$MONGODB_HOME/bin:$PATH


7.环境变量立即生效

执行

source /etc/profile


8.config server配置服务器

mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。

编辑vi /usr/local/mongodb/conf/config.conf

## 配置文件如下:

pidfilepath = /usr/local/mongodb/config/log/configsrv.pid

dbpath = /usr/local/mongodb/config/data

logpath = /usr/local/mongodb/config/log/congigsrv.log

logappend = true

bind_ip = 0.0.0.0

port = 21000

fork = true

configsvr = true

replSet=configs     #副本集名称

maxConns=20000        #设置最大连接数


9.启动三台config server

执行

mongod -f /usr/local/mongodb/conf/config.conf


10.初始化配置副本集

登录任意一台配置服务器:

mongo --port 21000        

执行:

config = {_id : "configs",members : [{_id : 0, host : "10.0.3.182:21000" },{_id : 1, host : "10.0.3.183:21000" },{_id : 2, host : "10.0.3.184:21000" }]}

再执行:

rs.initiate(config)


------其中,”_id” : “configs”应与配置文件中配置的 replicaction.replSet一致,”members” 中的 “host” 为三个节点的 ip 和 port


11.配置分片副本集(三台机器)

一)设置第一个分片副本集

执行vi /usr/local/mongodb/conf/shard1.conf

添加以下内容:

pidfilepath = /usr/local/mongodb/shard1/log/shard1.pid

dbpath = /usr/local/mongodb/shard1/data

logpath = /usr/local/mongodb/shard1/log/shard1.log

logappend = true

bind_ip = 0.0.0.0

port = 27001

fork = true

httpinterface=true         #打开web监控

rest=true 

replSet=shard1     #副本集名称

shardsvr = true

maxConns=20000     #设置最大连接数


二)启动三台服务器的shard1 server

mongod -f /usr/local/mongodb/conf/shard1.conf


三)初始化第一个副本集

登录不是仲裁节点的任意一台机器:

mongo --port 27001

use admin    #使用admin数据库


执行:

config = {_id : "shard1",members : [{_id : 0, host : "10.0.3.182:27001" },{_id : 1, host : "10.0.3.183:27001" },{_id : 2, host : "10.0.3.184:27001" , arbiterOnly: true }]}

 ----定义副本集配置,第三个节点的 "arbiterOnly":true 代表其为仲裁节点。

再执行:

rs.initiate(config)


------------------------------------------------

一)设置第二个分片副本集

执行vi /usr/local/mongodb/conf/shard2.conf

添加以下内容:

pidfilepath = /usr/local/mongodb/shard2/log/shard2.pid

dbpath = /usr/local/mongodb/shard2/data

logpath = /usr/local/mongodb/shard2/log/shard2.log

logappend = true

bind_ip = 0.0.0.0

port = 27002

fork = true

httpinterface=true         #打开web监控

rest=true 

replSet=shard2     #副本集名称

shardsvr = true

maxConns=20000     #设置最大连接数


二)启动三台服务器的shard2 server

mongod -f /usr/local/mongodb/conf/shard2.conf


三)初始化第二个副本集

登录不是仲裁节点的任意一台机器:

mongo --port 27002

use admin    #使用admin数据库


执行:

config = {_id : "shard2",members : [{_id : 0, host : "10.0.3.182:27002" , arbiterOnly: true},{_id : 1, host : "10.0.3.183:27002" },{_id : 2, host : "10.0.3.184:27002"  }]}

再执行:

rs.initiate(config)


-------------------------------------------------

一)设置第三个分片副本集

执行vi /usr/local/mongodb/conf/shard3.conf

添加以下内容:

pidfilepath = /usr/local/mongodb/shard3/log/shard3.pid

dbpath = /usr/local/mongodb/shard3/data

logpath = /usr/local/mongodb/shard3/log/shard3.log

logappend = true

bind_ip = 0.0.0.0

port = 27003

fork = true

httpinterface=true         #打开web监控

rest=true 

replSet=shard3     #副本集名称

shardsvr = true

maxConns=20000     #设置最大连接数


二)启动三台服务器的shard3 server

mongod -f /usr/local/mongodb/conf/shard3.conf


三)初始化第三个副本集

登录不是仲裁节点的任意一台机器:

mongo --port 27003

use admin    #使用admin数据库


执行:

config = {_id : "shard3",members : [{_id : 0, host : "10.0.3.182:27003" },{_id : 1, host : "10.0.3.183:27003" , arbiterOnly: true},{_id : 2, host : "10.0.3.184:27003"  }]}

再执行:

rs.initiate(config)



12.配置路由服务器 mongos

先启动配置服务器和分片服务器,后启动路由实例:(三台机器)

执行

vi /usr/local/mongodb/conf/mongos.conf

添加如下内容:

pidfilepath = /usr/local/mongodb/mongos/log/mongos.pid

logpath = /usr/local/mongodb/mongos/log/mongos.log

logappend = true

bind_ip = 0.0.0.0

port = 20000

fork = true

#监听的配置服务器, configs为配置服务器的副本集名字

configdb = configs/10.0.3.182:21000,10.0.3.183:21000,10.0.3.184:21000


13.启动三台服务器的mongos server

mongos -f /usr/local/mongodb/conf/mongos.conf


14.启用分片

目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。

登陆任意一台mongos

mongo --port 20000

use  admin    #使用admin数据库

串联分片:

sh.addShard("shard1/10.0.3.182:27001,10.0.3.183:27001,10.0.3.184:27001")

sh.addShard("shard2/10.0.3.182:27002,10.0.3.183:27002,10.0.3.184:27002")

sh.addShard("shard3/10.0.3.182:27003,10.0.3.183:27003,10.0.3.184:27003")

sh.status()    #查看分片状态


15.验证

任意连接一个分片:

mongo  127.0.0.1:27001

执行

rs.status()

# SECONDARY 表示从节点

# PRIMARY 表示主节点

# ARBITER 表示仲裁节点


-------------------优化启动--------------------

启动脚本:

vi start.sh       

#添加下面内容

mongod -f /usr/local/mongodb/conf/config.conf

mongod -f /usr/local/mongodb/conf/shard1.conf

mongod -f /usr/local/mongodb/conf/shard2.conf

mongod -f /usr/local/mongodb/conf/shard3.conf

mongos -f /usr/local/mongodb/conf/mongos.conf


关闭脚本:

vi stop.sh    

#添加下面内容

killall mongod

killall mongos



最后用客户端连接一下,万全OJBK

个人总结:

在参考多个文章,中途执行rs.initiate(config)总有一个不行,

一定记住,初始化shard1、2、3的时候要首先use admin数据库,

还有就是不要使用仲裁节点去初始化也会报错,就这么多。

搭建集群的时候可以用XSHELL发送到全部终端,快捷方便,我这里只截图,具体怎么用自行琢磨

有问题欢迎私信




参考文章:

http://www.ityouknow.com/mongodb/2017/08/05/mongodb-cluster-setup.html

http://www.lanceyan.com/category/tech/mongodb

https://zhuanlan.zhihu.com/p/25594963









博客已迁移,请看签名

Centos同步网络时间

yum -y install ntp ntpdate

#安装ntpdate工具


ntpdate cn.pool.ntp.org

#设置系统时间与网络时间同步


hwclock --systohc

#将系统时间写入硬件时间


date

#查看系统时间


只需4步即可同步网络时间,以免时差。

yum -y install ntp ntpdate

#安装ntpdate工具


ntpdate cn.pool.ntp.org

#设置系统时间与网络时间同步


hwclock --systohc

#将系统时间写入硬件时间


date

#查看系统时间


只需4步即可同步网络时间,以免时差。

博客已迁移,请看签名

Oracle创建表分区

明确分区表和表分区的区别:表分区是一种思想,分区表示一种技术实现。当表的大小过G的时候可以考虑进行表分区,提高查询效率,均衡IO。

创建表分区语句:

CREATE TABLE YKT_TEST

   ( 

  "ID" VARCHAR2(50), 

  "OPDT" DATE, 

   ) 

PARTITION BY RANGE(OPDT)  

INTERVAL(NUMTOYMINTERVAL...

明确分区表和表分区的区别:表分区是一种思想,分区表示一种技术实现。当表的大小过G的时候可以考虑进行表分区,提高查询效率,均衡IO。

创建表分区语句:

CREATE TABLE YKT_TEST

   ( 

  "ID" VARCHAR2(50), 

  "OPDT" DATE, 

   ) 

PARTITION BY RANGE(OPDT)  

INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))  

(  

  PARTITION p_month_1 VALUES LESS THAN(TO_DATE('2000/01/01 00:00:00','YYYY/MM/DD hh24:mi:ss'))  

); 



根据年: INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))   

根据月: INTERVAL(NUMTOYMINTERVAL(1,'MONTH'))   

根据天: INTERVAL(NUMTODSINTERVAL(1,'DAY'))



查询表分区语句:

select partition_name from user_tab_partitions where table_name='表名';


查询表分区内容:

select * From 表名 partition(表分区名);


删除表分区:

alter table 表名 drop partition 表分区名

注:drop partition时,该分区内存储的数据也将同时删除,若你的本意是希望删除掉指定的分区但保留数据,你应该使用merge partition,执行该语句会导致glocal索引的失效需要重建全局索引

博客已迁移,请看签名

LDAP+mirrormode+keepalived实现双主同步热切换

系统环境:centos6.9最小化

一、安装准备:

1.关闭selinux

编辑/etc/sysconfig/selinux中SELINUX=disabled,重启生效


2.打开防火墙

编辑/etc/sysconfig/iptables适当位置添加以下三行:

-A INPUT -d 224.0.0.18 -j ACCEPT        #keepalived组播开放

-A INPUT -m state --state NEW -m tcp -p tcp--dport 389 -j ACCEPT

-A INPUT...

系统环境:centos6.9最小化

一、安装准备:

1.关闭selinux

编辑/etc/sysconfig/selinux中SELINUX=disabled,重启生效


2.打开防火墙

编辑/etc/sysconfig/iptables适当位置添加以下三行:

-A INPUT -d 224.0.0.18 -j ACCEPT        #keepalived组播开放

-A INPUT -m state --state NEW -m tcp -p tcp--dport 389 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp--dport 636 -j ACCEPT


3.检查系统时间是否同步

date

若不同步,执行以下命令:

yum -y install ntp ntpdate

#安装ntpdate工具

ntpdate cn.pool.ntp.org

#设置系统时间与网络时间同步

hwclock --systohc

#将系统时间写入硬件时间

date

#查看系统时间


二、 安装BerkeleyDB

BerkeleyDB作为LDAP后端数据库

1.安装相关依赖

yum install *ltdl* gcc gcc-c++ -y

yum install wget -y


2.下载安装包,可自行网上下载其他版本,在此版本为:4.7.25

wget http://download.oracle.com/berkeley-db/db-4.7.25.tar.gz


3.解压

tar zxvf db-4.7.25.tar.gz


4.进入文件夹

cd db-4.8.24/build_unix/

#必须在解压包的build_unix目录中编译安装,否则会报错


5.编译

../dist/configure

#不确立安装目录,默认路径/usr/local


6.安装

make && make install


7.更新lib库

#保证在后面编译openldap时能找到lib和include下的库

编辑vi /etc/ld.so.conf,添加一行如下内容:

/usr/local/BerkeleyDB.4.7/lib/

执行立刻生效:

ldconfig-v


三、安装LDAP

1.下载安装包,也可自行下载其他版本,在此使用版本:openldap-2.4.43

(特别注意:个别高版本不支持centos6.x)

wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.43.tgz


2.解压

tar zxvf openldap-2.4.43.tgz


3.进入文件夹

cd openldap-2.4.43


4.编译

./configure --prefix=/usr/local/openldap --enable-syslog --enable-modules --enable-debug --with-tls CPPFLAGS=-I/usr/local/BerkeleyDB.4.7/include/ LDFLAGS=-L/usr/local/BerkeleyDB.4.7/lib/


5.验证

make depend


6.安装

make

make test

#一定要执行make test,可能过程比较久

make install


7.设置可执行命令

#对openldap客户端(bin)与服务器端(sbin)相关执行档添加软链接,也可以通过增加环境变量的方式设置

ln -s /usr/local/openldap/bin/* /usr/local/bin/

ln -s /usr/local/openldap/sbin/*/usr/local/sbin/


8.生成根管理员密码

slappasswd –s 密码

记住生成的密钥,格式如下:

{SSHA}XXXXXXXXXXXXXXXXXXXXX


9. LDAP目录相关

主配置文件位置:/usr/local/openldap/etc/openldap/slapd.conf

openldap安装完成后相关目录承载的功能如下:

bin/ --客户端工具如ldapadd、ldapsearch

etc/ --包含主配置文件slapd.conf、schema、DB_CONFIG等

include/

lib/

libexec/ --服务端启动工具slapd

sbin/ --服务端工具如slappasswd

share/

var/ --bdb数据、log存放目录


10.修改配置文件

重要提醒:修改LDAP任何配置文件空格都用TAB键,否则会报错

vi/usr/local/openldap/etc/openldap/slapd.conf

在约第5行之后添加如下内容:

include     /usr/local/openldap/etc/openldap/schema/core.schema

include     /usr/local/openldap/etc/openldap/schema/corba.schema

include     /usr/local/openldap/etc/openldap/schema/collective.schema

include     /usr/local/openldap/etc/openldap/schema/cosine.schema

include     /usr/local/openldap/etc/openldap/schema/duaconf.schema

include     /usr/local/openldap/etc/openldap/schema/dyngroup.schema

include     /usr/local/openldap/etc/openldap/schema/inetorgperson.schema

include     /usr/local/openldap/etc/openldap/schema/java.schema

include     /usr/local/openldap/etc/openldap/schema/misc.schema

include     /usr/local/openldap/etc/openldap/schema/nis.schema

include     /usr/local/openldap/etc/openldap/schema/openldap.schema

include     /usr/local/openldap/etc/openldap/schema/ppolicy.schema

include     /usr/local/openldap/etc/openldap/schema/pmi.schema


在约23行添加日志输出配置

loglevel    256

logfile    /usr/local/openldap/var/slapd.log


在约64行修改修改域名及管理员账户名(可自行修改)

suffix         "dc=sys,dc=com"

rootdn      "cn=admin,dc=sys,dc=com"

在约74行添加自己生成的密钥

rootpw {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

wq保存退出


11.初始化LDAP

cd /usr/local/openldap/var/openldap-data/

cp DB_CONFIG.example DB_CONFIG


四、启动LDAP

cd /usr/local/openldap/libexec/       #进入可执行文件目录

./slapd      -d256                #前台输出日志,若无任何报错即成功

./slapd      #后台直接运行

ps -ef|grep slap        #有进程及成功

执行ldapsearch -x -b '' -s base'(objectclass=*)'

返回以下结果及成功



或者使用客户端直接连接

登录名为根管理员(配置文件里编写的):cn=admin,dc=sys,dc=com

密码为:自己看上面三-8步骤设置的密码


五、使用.ldif文件格式录入简单信息

1)vi test.ldif

#新建.ldif文件,任何位置都可以,建议在openldap目录下新建

插入以下简单数据:(意思是创建一个部门ou为test,在此部门下创建2个用户user1和user2密码都为123456,dc=sys,dc=com是根,)

dn: dc=sys,dc=com

dc: sys

description: dCorporation

objectClass: dcObject

objectClass: organization

o: Corporation


dn: ou=test,dc=sys,dc=com

objectClass: top

objectClass: organizationalUnit


dn: uid=user1,ou=test,dc=sys,dc=com

objectClass: uidObject

objectClass: account

objectClass: top

objectClass: simpleSecurityObject

uid: user1

userPassword: 123456


dn: uid=user2,ou=test,dc=sys,dc=com

objectClass: uidObject

objectClass: account

objectClass: top

objectClass: simpleSecurityObject

uid: user2

userPassword: 123456


2)使用命令导入:

ldapadd -x -D "cn=admin,dc=sys,dc=com"-W -f test.ldif

执行ldapsearch -x -b '' -s base'(objectclass=*)'验证是否导入,或者使用客户端工具


六、实现LDAP1和LDAP2双主同步

LDAP1IP:10.0.3.157

LDAP2IP:10.0.3.158


1)首先修改LDAP1的配置文件

继续修改配置文件vi/usr/local/openldap/etc/openldap/slapd.conf

在最底部追加以下内容:

index    objectClass,entryCSN,entryUUID    eq

#双主配置 复制引擎

overlay    syncprov

syncprov-checkpoint    100    10

syncprov-sessionlog    100

# 操作100次同步一次,或者1分钟同步一次

serverID    1    # 节点ID,唯一

syncrepl    rid=123        

    provider=ldap://10.0.3.158    #LDAP2的IP

    bindmethod=simple

    binddn="cn=admin,dc=sys,dc=com"    

    credentials=123456

    searchbase="dc=sys,dc=com"

    schemachecking=off

    type=refreshAndPersist

retry="60+"

mirrormode    on    #开启


2)首先修改LDAP2的配置文件

继续修改配置文件vi/usr/local/openldap/etc/openldap/slapd.conf

在最底部追加以下内容:

index    objectClass,entryCSN,entryUUID    eq

overlay    syncprov

syncprov-checkpoint    100    10

syncprov-sessionlog    100

    serverID    2

    syncrepl    rid=123

    provider=ldap://10.0.3.157

    bindmethod=simple

    binddn="cn=admin,dc=sys,dc=com" 

    credentials=123456

    searchbase="dc=sys,dc=com"

    schemachecking=off  

    type=refreshAndPersist  

    retry="60 +"  

mirrormode    on


3)验证双主同步

在LDAP1上任意增加一条数据,在LDAP2上检查是否有;

在LDAP2上任意增加一条数据,在LDAP1上检查是否有;

若可以同步,则双主复制成功。


七、 Keepalived实现热切换

1)安装Keepalived

(注:LDAP1和LDAP2两台机器都需要安装)

yum install -y pcre-devel openssl-develpopt-devel

#安装相关依赖

wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

#下载安装包

tar zxvf keepalived-1.2.7.tar.gz

cd keepalived-1.2.7

./configure --prefix=/usr/local/keepalived

make && make install


2)将keepalived配置成系统服务

cp/usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

cp/usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived/

cp /usr/local/keepalived/etc/keepalived/keepalived.conf/etc/keepalived/

cp /usr/local/keepalived/sbin/keepalived/usr/sbin/

chkconfig --add keepalived

chkconfig keepalived on


3)配置LDAP节点1上的Keepalived

vi /etc/keepalived/keepalived.conf

#可直接先备份配置文件,然后新建一个配置文件导入以下配置文件:

#(cp /etc/keepalived/keepalived.conf/etc/keepalived/keepalived.conf.bak)

!Configuration File for keepalived

global_defs{

      notification_email {

      sysadmin@firewall.loc

       }

      notification_email_fromAlexandre.Cassen@firewall.loc

      smtp_server 127.0.0.1

      smtp_connect_timeout 30

      router_id ldap      #ldap1和ldap2的router_id要一致

}

vrrp_instanceVI_1 {

      state BACKUP

     interface eth0

      virtual_router_id 58    #虚拟路由ldap1和ldap2要一致

     priority 100                      #优先级

    advert_int 1

nopreempt                                   #抢占资源,只在LDAP1上配置

    authentication {

     auth_type PASS

     auth_pass 1111

    }

    virtual_ipaddress {

        10.0.3.159                 #虚拟Ip地址

    }

}

virtual_server10.0.3.159 389 {        #虚拟IP地址 端口

    delay_loop 2

   lb_algo rr

   lb_kind NAT

    persistence_timeout 50

    protocol TCP

    real_server 10.0.3.157 389 {   #本机IP地址 端口

        weight 3

     notify_down /usr/local/keepalived/ldap.sh            #心跳脚本文件

       TCP_CHECK {

       connect_timeout 10

       nb_get_retry 3

       delay_before_retry 3

   connect_port 389               #ldap端口

             }

      }

}


4)配置LDAP1心跳脚本:

vi /usr/local/keepalived/ldap.sh

添加以下内容:

#!/bin/bash

pkillkeepalived         

chmod +x/usr/local/keepalived/ldap.sh

/etc/init.d/keepalivedstart

echo"/etc/init.d/keepalivedstart " >> /etc/rc.d/rc.sysinit


5) 配置LDAP节点2上的Keepalived

!Configuration File for keepalived

global_defs{

      notification_email {

      sysadmin@firewall.loc

       }

      notification_email_fromAlexandre.Cassen@firewall.loc

      smtp_server 127.0.0.1

      smtp_connect_timeout 30

      router_id ldap

}

vrrp_instanceVI_1 {

      state BACKUP

     interface eth0

      virtual_router_id 58

     priority 90               #优先级要比LDAP1低

advert_int1

authentication{

     auth_type PASS

     auth_pass 1111

    }

    virtual_ipaddress {  

        10.0.3.159        #虚拟IP地址,和LDAP1一致

    }

}

virtual_server10.0.3.159 389 {        #虚拟IP地址 端口,和LDAP1一致

    delay_loop 2

   lb_algo rr

   lb_kind NAT

    persistence_timeout 50

    protocol TCP

    real_server 10.0.3.158 389 {   #本机IP地址 端口

        weight 3

     notify_down /usr/local/keepalived/ldap.sh

       TCP_CHECK {

       connect_timeout 10

       nb_get_retry 3

       delay_before_retry 3

   connect_port 389

             }

      }

}


6)配置LDAP2心跳脚本:

vi /usr/local/keepalived/ldap.sh

添加以下内容:

#!/bin/bash

pkillkeepalived         

chmod +x/usr/local/keepalived/ldap.sh

/etc/init.d/keepalivedstart

echo"/etc/init.d/keepalivedstart " >> /etc/rc.d/rc.sysinit

7)启动keepalived

两台机器同时启动keepalived

service keepalived start

8) 验证

通过客户端连接VIP信息:

IP:10.0.3.159

Port:389

用户:cn=admin,dc=sys,dc=com

密码自行设置的登录

然后任意停掉LDAP1,再通过VIP尝试连接,同理,停掉LDAP1,通过VIP尝试。

验证成功安装完毕~



-------------------------优化相关------------------------

1.LDAP简称对应:

  1. o– organization(组织-公司)

  2. ou – organization unit(组织单元-部门)

  3. c - countryName(国家)

  4. dc - domainComponent(域名)

  5. sn – suer name(真实名称)

  6. cn - common name(常用名称)


2.设置自启动脚本

开启:

vi /usr/local/openldap/start.sh添加下面一行内容:

/usr/local/openldap/libexec/slapd

授权chmod 755 start.sh写入/etc/rc.local

/usr/local/openldap/start.sh


关闭:

vi /usr/local/openldap/stop.sh添加下面一行内容:

pkill slapd

授权chmod 755 stop.sh写入/etc/rc.local

/usr/local/openldap/stop.sh


3.附客户端工具

https://pan.lanzou.com/i0nhx9c




参考链接:

http://www.zhimengzhe.com/linux/367056.html

http://blog.csdn.net/dancelonely/article/details/29379135

http://www.ttlsa.com/database/openldap-mirrormode-cluster/

博客已迁移,请看签名

oracle判断是否为全数字

select distinct length(REGEXP_REPLACE(xh, '[^0-9]')) from xsjbsjzlb

select distinct length(REGEXP_REPLACE(xh, '[^0-9]')) from xsjbsjzlb

博客已迁移,请看签名

Mysql+Keepalived实现双主热备高可用

安装环境:

DB1:Centos6.9系统、IP:10.0.3.177、MYSQL版本:5.6

DB2:Centos6.9系统、IP:10.0.3.178、MYSQL版本:5.6

虚拟IP:10.0.3.176(虚拟IP同样占用一个IP,先确保虚拟IP未被使用)



实现步骤:

1.先正常安装DB1,DB2两台mysql数据库,可参考我另外一篇文章

链接:http://lcryblog.lofter.com/post/1e131973_11d44974

2.双主同步复制配置

修改配置文件:(两个mysql都要修改,以DB1为例)

vi /usr/local/mysql/my.cnf...

安装环境:

DB1:Centos6.9系统、IP:10.0.3.177、MYSQL版本:5.6

DB2:Centos6.9系统、IP:10.0.3.178、MYSQL版本:5.6

虚拟IP:10.0.3.176(虚拟IP同样占用一个IP,先确保虚拟IP未被使用)



实现步骤:

1.先正常安装DB1,DB2两台mysql数据库,可参考我另外一篇文章

链接:http://lcryblog.lofter.com/post/1e131973_11d44974

2.双主同步复制配置

修改配置文件:(两个mysql都要修改,以DB1为例)

vi /usr/local/mysql/my.cnf 

在[mysqld]配置区域添加下面内容:

server-id = 1

#节点标示,主从节点不能相同,必须全局唯一,DB1设置1,DB2设置2

log-bin=mysql-bin

sync_binlog = 1

relay-log = mysql-relay-bin

slave-skip-errors = all

binlog_checksum = none

binlog_format = mixed

重启mysql: service mysql restart

3.创建复制用户并授权(注:在执行主主互备之前要保证两台server上数据一致

首先在DB1的mysql库中创建复制用户:

登录mysql:mysql -u root -p 

grant replication slave on *.* to 'tongbu'@'10.0.3.178' identified by 'tongbu123';

以上创建为用户tongbu,密码tongbu123

刷新系统权限表:flush privileges;

查看下log bin日志和pos值位置:show master status;


记录上图圈的数值,后面会用到,两个mysql都需要

然后在DB2上创建复制用户:

登录mysql:mysql -u root -p 

grant replication slave on *.* to 'tongbu'@'10.0.3.177' identified by 'tongbu123';

以上创建为用户tongbu,密码tongbu123

刷新系统权限表:flush privileges;

查看下log bin日志和pos值位置:show master status;


在此可能DB1、DB2一样,但是重启重启过服务这个会变,一定DB1,DB2都查一下。

4.同步数据

在DB1的mysql库中将DB2设为自己的主服务器

mysql>

CHANGE MASTER TO   

MASTER_HOST='10.0.3.178',   

MASTER_USER='tongbu',   

MASTER_PASSWORD='tongbu123',   

MASTER_LOG_FILE='mysql-bin.000001',    #这里是上面查询到的DB2的log bin

MASTER_LOG_POS= 120;    #这里是上面查询到的DB2的position

在DB2的mysql库中将DB1设为自己的主服务器

mysql>

CHANGE MASTER TO   

MASTER_HOST='10.0.3.177',   

MASTER_USER='tongbu',   

MASTER_PASSWORD='tongbu123',   

MASTER_LOG_FILE='mysql-bin.000005',   #这里是上面查询到的DB1的log bin

MASTER_LOG_POS= 120;    #这里是上面查询到的DB1的position

5.验证:

mysql>  start slave;     

mysql> show slave status \G;  


如果同步不成功,Mysql/data/auto.cnf(两台服务器)要删掉,然后按照步骤重新同步:

验证是否同步,DB1插入更新数据看DB2是否有同步即可

6、安装Keepalived

安装keepalived并将其配置成系统服务。DB1和DB2两台机器上都需要

1)安装依赖

yum install -y pcre-devel openssl-devel popt-devel

2)下载Keepalived

wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

3)解压

tar zxvf keepalived-1.2.7.tar.gz

4)进入目录

cd keepalived-1.2.7

5)编译指定安装目录,我这里为/usr/local/keepalived

./configure --prefix=/usr/local/keepalived

6)安装

make && make install

7)将keepalived配置成系统服务

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived/

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

chkconfig --add keepalived

chkconfig keepalived on

7.配置DB1上的Keepalived

vi /etc/keepalived/keepalived.conf    //清空,复制粘贴下面,在修改一下即可

! Configuration File for keepalived

global_defs {

      notification_email {

      sysadmin@firewall.loc

       }

      notification_email_from Alexandre.Cassen@firewall.loc

      smtp_server 127.0.0.1

      smtp_connect_timeout 30

      router_id mysql-1

}

vrrp_instance VI_1 {

      state BACKUP                

     interface eth0                

      virtual_router_id 51         

     priority 100                  

    advert_int 1

nopreempt         

    authentication {

     auth_type PASS

     auth_pass 1111

    }

    virtual_ipaddress {

        10.0.3.176                 #这里填VIP虚拟IP

    }

}

virtual_server 10.0.3.176 3306 { #这里填VIP虚拟IP

    delay_loop 2

   lb_algo rr

   lb_kind NAT

    persistence_timeout 50

    protocol TCP

    real_server 10.0.3.177 3306 { #这里填本机IP

        weight 3

     notify_down /usr/local/keepalived/mysql.sh   

       TCP_CHECK {

       connect_timeout 10         

       nb_get_retry 3              

       delay_before_retry 3

   connect_port 3306        

             } 

      }

}

8.编写脚本,并赋予权限。(DB1和DB2都要编写)

vi /usr/local/keepalived/mysql.sh

#!/bin/bash

pkill keepalived

chmod +x /usr/local/keepalived/mysql.sh   //赋予权限执行权限

/etc/init.d/keepalived start     // 启动Keepalived

echo "/etc/init.d/keepalivedstart " >> /etc/rc.d/rc.sysinit   //添加开机自启

9.配置DB2上的Keepalived,同DB1,只需要修改以下即可地方:

vi /etc/keepalived/keepalived.conf

priority为90     //优先级小于DB1

nopreempt   //不设置删除该行

real_server    设置本地IP

同样编写脚本,赋予权限,再启动Keepalived即可。

10.测试VIP连接地址

在其他服务器连接数据库

mysql -h10.0.3.176 -uroot -p

关闭DB1或DB2中一台服务器,再用其他服务器连接数据库

到此安装完毕。


常见问题:

1. keepalived配置lvs不生效

执行yum  -y install ipvsadm

再执行ipvsadm

2.如何修改mysql密码

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');

3.查看mysql主机名

show variables like "%hostname%";

4.防火墙如何配置

1)允许组播,两台设备上都需要执行 

2)修改:vi /etc/sysconfig/iptables  

适当位置添加以下内容:

-A INPUT -d 224.0.0.18 -j ACCEPT



参考文章:

http://blog.csdn.net/oguro/article/details/52905169

https://www.cnblogs.com/liuyisai/p/5998110.html

http://blog.csdn.net/nimasike/article/details/52463806

博客已迁移,请看签名

服务器相关,Tomcat,Oracle,Mysql调优

一、服务器相关配置优化

1. 修改文件最大句柄数(注:若是oracle服务器不需要优化此项)

原理:linux默认最大文件句柄数是1024个。在文件并发量比较大的情况下,这个数就不够用了,所以需要修改最大文件句柄数。

2. 查看下系统的句柄是多少,用ulimit -a 命令查看,默认是1024,如下图:


3.修改最大句柄数,vi /etc/security/limits.conf 文件添加以下内容,如下图:

*        soft    noproc...

一、服务器相关配置优化

1. 修改文件最大句柄数(注:若是oracle服务器不需要优化此项)

原理:linux默认最大文件句柄数是1024个。在文件并发量比较大的情况下,这个数就不够用了,所以需要修改最大文件句柄数。

2. 查看下系统的句柄是多少,用ulimit -a 命令查看,默认是1024,如下图:


3.修改最大句柄数,vi /etc/security/limits.conf 文件添加以下内容,如下图:

*        soft    noproc 65535

*        hard    noproc 65535

*        soft    nofile 65535

*        hard    nofile 65535

4.若是centos6.*还需要修改用户进程数为4096,vi /etc/security/limits.d/90-nproc.conf修改为以下内容,如下图:

5.最后注销用户,再登录使用ulimit –a验证是否生效:


二、Tomcat优化

1.以java1.8为例,查看java版本命令:java –version


2.优化Tomcat启动JVM参数,配置文件tomcat/bin/catalina.sh,添加以下内容(可根据硬件情况修改)

JAVA_OPTS="-server -Xms4096m -Xmx4096m-XX:MetaspaceSize=256M -XX:MaxNewSize=256m -XX:MaxMetaspaceSize=512m"

注:Xms和Xmx最好一样大,为物理内存的1/4,现场一般是16G,所以建议为4096m,我个人推荐的配置如上。


3.Tomcat线程数优化,修改配置文件tomcat/conf/server.xml(大约在69行),加入以下内容:

<Connector connectionTimeout="200000"port="8080" URIEncoding="utf-8"protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"

compression="on" compressionMinSize="2048"maxThreads="700" minSpareThreads="100" maxSpareThreads="500"  acceptCount="700"  

enableLookups="false"compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,text/json"

useURIValidationHack="false"/> 



三、Oracle优化

1.修改密码永不过期,默认oracle密码180天过期,SQL查看命令:

Select *from dba_profiles s where s.profile='DEFAULT' andresource_name='PASSWORD_LIFE_TIME';


2.设置密码永不过期执行命令:

ALTER PROFILE DEFAULT LIMITPASSWORD_LIFE_TIME UNLIMITED;

修改之后不需要重启动数据库,会立即生效,已经过期的用户修改密码后即永不过期了。

3.验证,执行步骤1,Limit 为UNLIMITED即成功。


4.修改oracle最大连接数和最大进程数:

查看当前最大进程数命令:

show parameter processes;

查看当前最大会话数命令:

show parameter sessions;

5.更改最大进程数processes=500, 最大会话数sessions=1000(根据实际情况可自行增减)

执行更改最大进程数命令:alter systemset processes=500 scope=spfile;

执行更改最大会话数命令:alter systemset sessions=1000 scope=spfile;

注:修改完后需要重启oracle服务器才能生效。

6.验证,执行步骤4命令。



四、Mysql优化

1.修改或添加/mysql/my.cnf参数:

lower_case_table_names=1

#设置不区分大小写

max_connect_errors=6000

#max_connect_errors是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况

max_connections=1024

#修改最大连接数为1024

query_cache_limit= 2M

#指定单个查询能够使用的缓冲区大小,默认为1M

综上添加或修改到my.cnf,重启mysql生效,其他默认即可:

lower_case_table_names=1

max_connect_errors=6000

max_connections=1024

query_cache_limit = 2M


验证:

命令:show VARIABLES like '%参数%';

如查看最大连接数:show VARIABLES like'%max_connect_errors%';





博客已迁移,请看签名

Centos搭建NFS实现文件共享

一、服务端配置

1. 安装NFS

yum -y install nfs-utils portmap

2.创建共享目录

mkdir /usr/local/share

3. 修改配置文件/etc/exports

vi /etc/exports

增加一行:/usr/local/share 192.168.186.*(insecure,rw,async,no_root_squash)


ro:设置输出的共享目录只读,与rw不能共同使用

rw:设置输出的共享目录可读写,与ro不能共同使用

sync:设置NFS服务器同步写磁盘,这样不会轻易丢失数据,建议...

一、服务端配置

1. 安装NFS

yum -y install nfs-utils portmap

2.创建共享目录

mkdir /usr/local/share

3. 修改配置文件/etc/exports

vi /etc/exports

增加一行:/usr/local/share 192.168.186.*(insecure,rw,async,no_root_squash)


ro:设置输出的共享目录只读,与rw不能共同使用

rw:设置输出的共享目录可读写,与ro不能共同使用

sync:设置NFS服务器同步写磁盘,这样不会轻易丢失数据,建议所有的NFS共享目录都使用该选项

4.使配置文件生效执行:

exportfs -r  

5.打开rpcbind服务、设置开机启动:

service rpcbind start

chkconfig rpcbind on

6.打开nfs服务、设置开机启动

service nfs start

chkconfig nfs on


7.固定nfs端口, vi /etc/sysconfig/nfs 在末尾加入以下:

RQUOTAD_PORT=6005 

LOCKD_TCPPORT=6004 

LOCKD_UDPPORT=6004 

MOUNTD_PORT=6002 

STATD_PORT=6003 

STATD_OUTGOING_PORT=6006 


8.开放端口:vi/etc/sysconfig/iptables加入以下规则

-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6002 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp --dport 6002 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6003 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp --dport 6003 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6004 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp --dport 6004 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6005 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp --dport 6005 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 6006 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp --dport 6006 -j ACCEPT

9.重启防火墙:serviceiptables restart

二、客户端配置

1.安装nfs-utils

yum -y install nfs-utils

2.创建挂载目录:

mkdir /test1

3.查看挂载目录

showmount -e 192.168.186.128

4.挂载

mount -t nfs192.168.186.128:/usr/local/share /test1

或者使用tcp挂载:mount -t nfs 192.168.186.128:/usr/local/share /test1  -o proto=tcp -o nolock

5.查看挂载情况

df –h


6.测试是否可读写:

服务端新建文件vi 1.txt写入任意内容

客户端打开修改vi 1.txt不报错即可。

7.设置开机启动挂载

在/etc/rc.local下加入一行:

mount -t nfs192.168.186.128:/usr/local/share /test1 -o proto=tcp -o nolock

 

 

-----附:

解除挂载:umount  /test1

若出现umount.nfs: /test1:device is busy

解决:

fuser -m -v /test1   #查看那些进程pid

kill -9 pid端口



博客已迁移,请看签名

Redis集群安装(两台服务器4主4从)

系统环境:两台Centos6.9

redis1:10.0.3.143 端口7001-7004

redis2:10.0.3.144 端口7001-7004

以下命令在两台 Redis 服务器上都要执行(除最后创建集群时)

最好关闭防火墙方便进行

1.ruby 环境安装

yum -y install ruby rubygems

2.gcc 环境安装

yum -y install gcc

3.下载 redis 源代码 

(若出现 wget 命令找不到 请执行 yum -y install wget后继续执行)

wget http...

系统环境:两台Centos6.9

redis1:10.0.3.143 端口7001-7004

redis2:10.0.3.144 端口7001-7004

以下命令在两台 Redis 服务器上都要执行(除最后创建集群时)

最好关闭防火墙方便进行

1.ruby 环境安装

yum -y install ruby rubygems

2.gcc 环境安装

yum -y install gcc

3.下载 redis 源代码 

(若出现 wget 命令找不到 请执行 yum -y install wget后继续执行)

wget http://download.redis.io/releases/redis-3.2.9.tar.gz

4.解压

tar xzf redis-3.2.9.tar.gz

5.进入解压文件夹中

cd redis-3.2.9

6.编译make

若报错 zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file ordirectory

则执行make MALLOC=libc

7.执行 创建集群代码 

请注意打开对应的防火墙 7001-7004 和 17001-17004 的 tcp input

例如:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 7001 -j ACCEPT

8.执行创建文件夹

mkdir -p /redis-cluster/redis{7001,7002,7003,7004}

9.修改原始文件 

修改redis-3.2.9 中的 redis.conf 中的 (61 行)

bind 127.0.0.1为监听 ip

例如:bind 10.0.3.143

10.遍历复制redis.conf配置文件

for dir in /redis-cluster/redis*; do cp -v /redis-3.2.9/redis.conf $dir ; done

11.遍历修改全部集群代码 

for dir in /root/redis-cluster/redis*; do myport=`basename $dir|sed 's/[a-zA-Z]*//g'`; sed -r -i "s@^\s*port.*@port $myport@;s@^\s*daemonize.*@daemonize yes@;s@^\s*pidfile.*@pidfile /var/run/redis_$myport.pid@;s@^\s*logfile.*@logfile /var/log/redis_$myport.log@;s@^\s*#?\s*cluster-enabled.*@cluster-enabled yes@;s@^\s*#?\s*cluster-config-file.*@cluster-config-file $dir/nodes-$myport.conf@;s@^\s*#?\s*cluster-node-timeout.*@cluster-node-timeout 15000@;s@^\s*dir.*@dir $dir@;" $dir/redis.conf; done

12.遍历执行启动 

for dir in /root/redis-cluster/redis700*; do /redis-3.2.9/src/redis-server $dir/redis.conf ; done

13.查看redis启动进程

ps -ef|grep redis,保证7001-7004redis都已经启动再接下来做集群

14.创建集群 

此命令只需在一台服务器上执行(任选) 

15.执行安装 gem redis 连接环境

wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem

gem install -l ./redis-3.2.1.gem

16.执行命令建立集群

/redis-3.2.9/src/redis-trib.rb create --replicas 1 10.0.3.143:7001 10.0.3.143:7002 10.0.3.143:7003 10.0.3.143:7004 10.0.3.144:7001 10.0.3.144:7002 10.0.3.144:7003 10.0.3.144:7004

17.确认创建

8 个节点会自动分配成四主四从,输入 yes 确认操作即可。

18.检查

执行:/redis-3.2.9/src/redis-cli -c -h 10.0.3.143 -p 7001

查看集群信息:cluster info

查看节点信息:cluster nodes

redis配置文件:find / -name '*nodes*.conf*'

参考链接1:http://blog.csdn.net/zh520qx/article/details/54577753

参考链接2:http://lcryblog.lofter.com/post/1e131973_11d65c3c

参考链接3:https://www.w3cschool.cn/redis/

参考链接4:http://blog.csdn.net/zh520qx/article/details/50977678

LOFTER

让兴趣,更有趣

简单随性的记录
丰富多彩的内容
让生活更加充实

下载移动端
关注最新消息