数据库MySQL,Mongodb,Redis及Zookeeper集群搭建文档

数据库MySQL,Mongodb,Redis及Zookeeper集群搭建文档

 

 

  • 为什么要用集群

为什么我们要用集群?

首先是集群的高可用性:

构建集群的一个最大亮点和优点就是集群都具有高可用性,可以提供不间断性服务,从而保证了业务的持续运行,当服务出现故障时,集群系统可以自动的将服务从故障节点切换到备用节点。对于一些要求实时服务很强的应用系统,必须保证服务的24小时不间断运行,而由于其他人为或者不可预知的原因,单一的设备运行环境很难提供这种服务要求,所以构建集群系统是不可或缺的选择。

其次是集群的可扩展性:

集群的可扩展性体现在随时能够满足用户的需求,随着业务量的加大,现有的集群服务实体不能满足需求时,可以向此集群中动态的加入一个或多个服务节点,增强集群的整体性能。这就是集群可扩展性的体现。

最后就是集群的负载均衡

通过灵活、有效的系统分担负载,结合集群量身定制的负载分担策略,将客户端的访问合理的分配到各个服务节点,从而有效的利用资源,实现负载均衡

  • 准备工作

准备3台机器组建一个小集群环境。它们的IP地址分别为10.105.44.118, 10.105.4.175和10.105.99.60. 将它们的host分别命名为db1,db2和db3。

 

服务器:DB1,DB2,DB3

系统:Centos 6.5 x64

安装包版本:

MySQL:mysql-5.6.26.tar.gz

Mongodb:mongodb-linux-x86_64-rhel62-3.0.3

Redis:redis-3.2.1.tar

Zookeeper:zookeeper-3.4.6.tar

 

 

三、安装集群

1、Zookeeper集群安装

注:先在DB1、DB2、DB3上分别执行(1)-(3)步,配置Java环境。

 

1、安装Zookeeper需要先装JDK,去Oracle的官网下载jdk。

http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz

 

2、解压安装包

tar –zxf jdk-7u79-linux-x64.tar.gz –C /usr/local

cd /usr/local

ln –sv jdk1.7.0_79/ jdk

 

[root@cdh1 ~]# vi /etc/profile.d/jdk.sh

export JAVA_HOME=/usr/local/jdk

export PATH=$PATH:JAVA_HOME/bin

 

[root@cdh1 ~]# chmod 755 /etc/profile.d/jdk.sh

[root@cdh1 ~]# . /etc/profile.d/jdk.sh

 

3、查看是否安装成功

[root@cdh1 ~]# java -version

java version "1.7.0_79"

Java(TM) SE Runtime Environment (build 1.7.0_79-b15)

Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

[root@cdh1 ~]#

 

 

 

 

4、安装zookeeper(先在DB1上执行)

(1)解压:这里以unilife作为用户名进行安装,将zookeeper-3.4.6.tar.gz解压到/home/unilife目录下。

#tar -zxvf zookeeper-3.4.6.tar.gz

#mv zookeeper-3.4.6 zookeeper-cluster/

(2)配置:将conf/zoo_sample.cfg拷贝一份命名为zoo.cfg,也放在conf目录下。然后按照如下值修改其中的配置:

tickTime=2000       

dataDir= /unilifeData/zookeeper/

initLimit=5

syncLimit=2

clientPort=2191

server.1=db1:2888:3888

server.2=db2:2888:3888

server.3=db3:2888:3888

 

tickTime:zookeeper中使用的基本时间单位, 毫秒值。

initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个 tickTime 时间间隔数。这里设置为5表名最长容忍时间为 5 * 2000 = 10 秒。

syncLimit:这个配置标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2 * 2000 = 4 秒。

dataDir 和 dataLogDir 看配置就知道干吗的了,不用解释。

clientPort:监听client连接的端口号,这里说的client就是连接到Zookeeper的代码程序。

server.{myid}={ip}:{leader服务器交换信息的端口}:{当leader服务器挂了后, 选举leader的端口}

 

(3)创建/home/unilife/zookeeper-cluster/data/快照目录,并创建server id文件。

 #mkdir /unilifeData/zookeeper/

 #cd /unilifeData/zookeeper/

 在该目录下创建名为myid的文件,内容为1(这个值随server而改变)。

 3c7a9b636deb998a65a17d136f54669e176.jpg

(4)将DB1上已经配置好的/home/unilife/zookeeper-cluster/目录拷贝至DB2和DB3。然后将其上的/home/unilife/zookeeper-cluster/data/myid的内容修改为2和3.

 scp -r /home/unilife/zookeeper-cluster/ db2:~/

 scp -r /home/unilife/zookeeper-cluster/ db3:~/

  

 b08f52fb61405cabc1fbebdb06e66e34d99.jpg

 

add61934812804f84f66722868bdfeb44f5.jpg

 

 

5、最后分别启动DB1、DB2、DB3上的zookeeper

/home/unilife/zookeeper-cluster/bin/zkServer.sh start #启动

 

2、MySQL集群(主从集群)

先在每台集群上安装MySQL,并启动服务

官网下载MySQL源码安装包,

wget https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.26.tar.gz

 

  1. 安装依赖环境

yum install -y gcc gcc-c++ cmake ncurses-devel

  1. 添加MySQL用户

useradd -M -s /sbin/nologin mysql

  1. 解压编译安装

tar –zxf mysql-5.6.26.tar.gz

cd mysql-5.6.26

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all

make

make install

  1. 初始化数据库

cd /usr/local/mysql/scripts

./ mysql_install_db –user=mysql –basedir=/usr/local/mysql –datadir=/ unilifeData/mysqlData

 

  1. 创建启动脚本和配置文件

#cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld

#chmod 755 /etc/rc.d/init.d/mysqld

#chkconfig mysqld on

#cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

#

 

DB1的my.cnf配置文件内容

[client]

port            = 3306

socket          = /unilifeData/mysqlData/mysql/mysql.sock

max_allowed_packet=64M

 

# The MySQL server

[mysqld]

log-error=/unilifeData/mysqlData/mysql/mysqld.err

lower_case_table_names=1

port            = 3306

socket          = /unilifeData/mysqlData/mysql/mysql.sock

datadir         = /unilifeData/mysqlData/mysql

character_set_server=utf8

skip-external-locking

key_buffer_size = 512M

max_allowed_packet=64M

table_open_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

innodb_buffer_pool_size = 4G

max_connections = 1000

 

log-bin=mysql-bin

binlog_format=mixed

server-id = 1

expire_logs_days = 31

 

# server-id 配置主从时,每台机器server-id不能一样

 

 

DB2的my.cnf配置文件内容

[client]

port            = 3306

socket          = /unilifeData/mysqlData/mysql/mysql.sock

max_allowed_packet=64M

 

# The MySQL server

[mysqld]

log-error=/unilifeData/mysqlData/mysql/mysqld.err

lower_case_table_names=1

port            = 3306

socket          = /unilifeData/mysqlData/mysql/mysql.sock

datadir         = /unilifeData/mysqlData/mysql

character_set_server=utf8

skip-external-locking

key_buffer_size = 512M

max_allowed_packet=64M

table_open_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

innodb_buffer_pool_size = 4G

max_connections = 1000

 

log-bin=mysql-bin

binlog_format=mixed

server-id = 2

expire_logs_days = 7

 

DB3的my.cnf配置文件内容

[client]

port            = 3306

socket          = /unilifeData/mysqlData/mysql/mysql.sock

max_allowed_packet=64M

 

# The MySQL server

[mysqld]

log-error=/unilifeData/mysqlData/mysql/mysqld.err

lower_case_table_names=1

port            = 3306

socket          = /unilifeData/mysqlData/mysql/mysql.sock

datadir         = /unilifeData/mysqlData/mysql

character_set_server=utf8

skip-external-locking

key_buffer_size = 512M

max_allowed_packet=64M

table_open_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

innodb_buffer_pool_size = 4G

max_connections = 1000

 

log-bin=mysql-bin

binlog_format=mixed

server-id = 3

expire_logs_days = 7

 

 

  1. 启动MySQL服务

service mysqld start

 

 

  1. 配置主从

这里以DB1作为主服务,DB2和DB3为从服务。

登录DB1的MySQL,创建一个用于同步数据的用户

#mysql –uroot –p

#grant replication slave,file,select on *.* to 'repl'@' 10.105.4.175' identified by '123456'

#grant replication slave,file,select on *.* to 'repl'@' 10.105.99.60' identified by '123456'

 

获取主服务器状态

show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000002 |      770 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

记录下这两个数值,等会同步会用到。

 

登录DB2和DB3的MySQL,执行以下命令同步数据库

#mysql –uroot –p

#change master to master_host='10.105.44.118',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=770;

#start slave;

 

查看同步状态

show slave status\G

bb54064be827bc3b73d9a1687d48bbdf07b.jpg

看到两个YES,则说明数据同步成功。主从集群到此搭建完成。

 

3、Mongodb集群(副本集)

只要在DB1上配置好一个,再拷贝到DB2,DB3上就可以。

 

1、解压安装包

tar –zxvf mongodb-linux-x86_64-rhel62-3.0.3 –C /usr/local

cd /usr/local

mv mongodb-linux-x86_64-rhel62-3.0.3 mongodb

 

2、创建mongodb目录和配置文件

mkdir /usr/local/mongodb/conf

mkdir /usr/local/mongodb/data

mkdir /usr/local/mongodb/logs

 

创建配置文件

vi /usr/local/mongodb/conf/replset.conf

 

加入以下内容:

dbpath=/usr/local/mongodb/data/replset

logpath=/usr/local/mongodb/logs/replset.log

pidfilepath=/usr/local/mongodb/replset.pid

replSet=rs

port=28018

fork=true

 

3、创建服务启动脚本

vi /usr/local/mongodb/mongodb.sh

 

添加以下内容:

#!/bin/sh

 

start() {

    /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/replset.conf

}

stop() {

   /usr/local/mongodb/bin/mongod --shutdown -f /usr/local/mongodb/conf/replset.conf

}

 

restart() {

   stop

   start

}

 

case $1 in

 

start)

  start

  ;;

 

stop)

  stop

  ;;

 

restart)

  restart

  ;;

 

*)

  echo "start|stop|restart"

  exit 1

 

esac

 

给脚本添加执行权限

chmod 755 /usr/local/mongodb/mongodb.sh

 

 

把mongodb目录发送到DB2,DB3相同路径下

#scp –r /usr/local/mongodb/ db2: /usr/local/

#scp –r /usr/local/mongodb/ db3: /usr/local/

 

 

启动服务

分别在DB1,DB2,DB3上执行命令:

/usr/local/mongodb/mongodb.sh start

 

 

创建副本集

在DB1上登录mongodb,执行以下命令。

#/usr/local/mongodb/bin/mongo 127.0.0.1:28018

f4a57ee8e0a0cdb6ef0c282d16cfcb44871.jpg

 

 

切换到管理员

#use admin

 

输入创建副本命令

 

 

 

db.runCommand(

    {

        "replSetInitiate":

        {

            "_id":"rs",

            "members":

            [

                {

                    "_id":1,

                    "host":"10.105.44.118:28018"

                },

                {

                    "_id":2,

                    "host":"10.105.4.175:28018"

                },

                {

                    "_id":3,

                    "host":"10.105.99.60:28018"

                }

            ]

        }

})

 

执行完,命令行左边会显示副本集名称和当前服务器的角色

rs:PRIMARY>

表示副本集是rs,角色PRIMARY是主节点,SECONDARY是从节点。

 

查看副本集状态

rs.status()

67774e61d0c78c07d2d68aa836f06c97ed2.jpg

4、Redis集群

1、安装ruby环境

yum install zlib ruby ruby-devel rubygems

 

2.编译安装redis

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

tar -zxvf redis-3.2.1.tar

cd redis-3.2.1/

make

 

创建redis集群目录

mkdir /usr/local/redis-cluster/

mkdir /usr/local/redis-cluster/{bin,logs,conf,db}

 

把当前编译目录下的redis.conf和utils目录拷贝到/usr/local/redis-cluster/

cp redis.conf /usr/local/redis-cluster/

cp –r utils /usr/local/redis-cluster/

 

把redis的一些二进制程序拷贝到/usr/local/redis-cluster/bin目录下

cd src

cp redis-c* /usr/local/redis-cluster/bin

cp redis-s* /usr/local/redis-cluster/bin

cp redis-trib.rb /usr/local/redis-cluster/bin

 

2、安装gem-redis

gem install redis --version 3.2.2  

#由于源的原因,可能下载失败,就手动下载下来安装  

wget http://rubygems.global.ssl.fastly.net/gems/redis-3.2.2.gem  

gem install -l redis-3.2.2.gem

 

 

3、创建redis实例

通过utils目录下的install_server.sh脚本安装实例

bc9fc87953e1b6fe9965521609d6ea644df.jpg

按回车确定,将生成实例,并创建一个启动脚本redis_7379,通过它可以启动服务。

 

 

4、修改配置文件

bind 0.0.0.0

daemonize    yes

pidfile /var/run/redis_7379.pid

appendonly  yes

cluster-enabled  yes

cluster-config-file  nodes-7379.conf

cluster-node-timeout  15000

 

 

5、拷贝文件到其他节点

scp –r /usr/local/redis-cluster/ db2:/usr/local

scp –r /usr/local/redis-cluster/ db3:/usr/local

scp /etc/rc.d/init.d/redis_7379 db2: /etc/rc.d/init.d/

scp /etc/rc.d/init.d/redis_7379 db3: /etc/rc.d/init.d/

 

6、重启redis服务

service redis_7379 restart

 

查看服务状态

de80b9a5c6592cd80e795095678ace97770.jpg

 

7、把节点添加到集群

# /usr/local/redis-cluster/bin/redis-trib.rb create --replicas 0 10.105.44.118:7379 10.105.4.175:7379 10.105.99.60:7379

 

 

8、检查集群状态

#/usr/local/redis-cluster/bin/redis-trib.rb check 10.105.44.118:7379

 

可以看到三个节点已经添加到集群,都为主节点。状态都是OK

到此Redis集群搭建完成。

转载于:https://my.oschina.net/u/1458864/blog/1845199

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值