數據庫MySQL,Mongodb,Redis及Zookeeper集羣搭建文檔

數據庫MySQL,Mongodb,Redis及Zookeeper集羣搭建文檔java

 

 

  • 爲何要用集羣

爲何咱們要用集羣?node

首先是集羣的高可用性:mysql

構建集羣的一個最大亮點和優勢就是集羣都具備高可用性,能夠提供不間斷性服務,從而保證了業務的持續運行,當服務出現故障時,集羣系統能夠自動的將服務從故障節點切換到備用節點。對於一些要求實時服務很強的應用系統,必須保證服務的24小時不間斷運行,而因爲其餘人爲或者不可預知的緣由,單一的設備運行環境很難提供這種服務要求,因此構建集羣系統是不可或缺的選擇。linux

其次是集羣的可擴展性:c++

集羣的可擴展性體如今隨時可以知足用戶的需求,隨着業務量的加大,現有的集羣服務實體不能知足需求時,能夠向此集羣中動態的加入一個或多個服務節點,加強集羣的總體性能。這就是集羣可擴展性的體現。redis

最後就是集羣的負載均衡sql

經過靈活、有效的系統分擔負載,結合集羣量身定製的負載分擔策略,將客戶端的訪問合理的分配到各個服務節點,從而有效的利用資源,實現負載均衡mongodb

  • 準備工做

準備3臺機器組建一個小集羣環境。它們的IP地址分別爲10.105.44.118, 10.105.4.175和10.105.99.60. 將它們的host分別命名爲db1,db2和db3。數據庫

 

服務器:DB1,DB2,DB3ruby

系統: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

 

 

3、安裝集羣

一、Zookeeper集羣安裝

注:先在DB一、DB二、DB3上分別執行(1)-(3)步,配置Java環境。

 

一、安裝Zookeeper須要先裝JDK,去Oracle的官網下載jdk。

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

 

二、解壓安裝包

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

 

三、查看是否安裝成功

[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 ~]#

 

 

 

 

四、安裝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而改變)。

 

(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:~/

  

 

 

 

 

五、最後分別啓動DB一、DB二、DB3上的zookeeper

/home/unilife/zookeeper-cluster/bin/zkServer.sh start #啓動

 

二、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

看到兩個YES,則說明數據同步成功。主從集羣到此搭建完成。

 

三、Mongodb集羣(副本集)

只要在DB1上配置好一個,再拷貝到DB2,DB3上就能夠。

 

一、解壓安裝包

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

 

二、建立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

 

三、建立服務啓動腳本

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

 

 

切換到管理員

#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()

四、Redis集羣

一、安裝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

 

二、安裝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

 

 

三、建立redis實例

經過utils目錄下的install_server.sh腳本安裝實例

按回車肯定,將生成實例,並建立一個啓動腳本redis_7379,經過它能夠啓動服務。

 

 

四、修改配置文件

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

 

 

五、拷貝文件到其餘節點

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/

 

六、重啓redis服務

service redis_7379 restart

 

查看服務狀態

 

七、把節點添加到集羣

# /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

 

 

八、檢查集羣狀態

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

 

能夠看到三個節點已經添加到集羣,都爲主節點。狀態都是OK

到此Redis集羣搭建完成。

相關文章
相關標籤/搜索