MaxScale 추가 설정하다가 이전 내용을 한번에 다 정리해봤습니다. CentOS7 최소 버전이 설치된 환경에서 MariaDB 10.1 버전을 기준으로 진행된 내용입니다.

 

[ MariaDB 설치하기 ]

1. mariadb repo 파일을 만듭니다. 

[mariadb]  
name = MariaDB  
baseurl = http://yum.mariadb.org/10.1/centos7-amd64  
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB  
gpgcheck=0 

2. MariaDB를 설치합니다.

yum install -y MariaDB MariaDB-server MariaDB-client 

[ Galera Cluster 설정 ]

 

1. 우선 config 파일을 설정합니다.
vi /etc/my.cnf.d/server.cnf

[mysqld] 
init_connect='SET NAMES utf8' 
character-set-server = utf8 
collation-server=utf8_unicode_ci 

[galera] 
# Mandatory settings 
wsrep_on=ON 
wsrep_provider=/usr/lib64/galera/libgalera_smm.so 
wsrep_cluster_address='gcomm://'  ### 추가 서버에서는 기존 가동중인 서버 ip를 입력하세요.
wsrep_cluster_name='cluster_name' 
wsrep_node_address='172.xx.xx.xx'  ### 자신의 ip를 입력하세요.
wsrep_node_name='server1'
wsrep_sst_method=rsync 
wsrep_auto_increment_control=off 
binlog_format=row 
default_storage_engine=InnoDB 
innodb_autoinc_lock_mode=2 

bind-address=0.0.0.0 

wsrep_slave_threads=1 
innodb_flush_log_at_trx_commit=0 


2. 방화벽 설정
  추가할 포트는 TCP 3306/4568/4444 port와 TCP, UDP 4567 입니다.

firewall-cmd --permanent --zone=public --add-port=해당 포트/tcp 


3. selinux 설정

 최소 버전에는 semanage가 없어 설치해야 합니다.

yum install policycoreutils-python  

아래와 같이 추가 설정을 해주세요.

> semanage port -a -t mysqld_port_t -p tcp 4567 
> semanage port -a -t mysqld_port_t -p tcp 4568 
> semanage port -a -t mysqld_port_t -p tcp 4444 
> semanage port -a -t mysqld_port_t -p udp 4567 
> semanage permissive -a mysqld_t 

 

이제 mariadb를 실행하여 테스트용 DB와 테이블을 만들어 서버별로 모두 존재하는지 테스트 해보시면 됩니다. 

클러스터 첫번째 node를 실행할 때는 gcomm에 node ip를 명시하지 않지만, 모두 가동후에는 다른 node들에 대한 ip를 추가한 후 재시작 하시기 바랍니다.

 


[ MaxScale 설치 ]

 

 HA Proxy(http://www.haproxy.org/.  high availability, load balancing, and proxying for TCP and HTTP-based applications. 주로 Load balancer로 사용됨. H/W 형식을 오픈소스로 구현한 프로젝트)와 유사하며, DB read/write 쿼리를 지정된 DB 서버로 분산하는 기능이 있는 등 DB에 좀 더 특화되어 있습니다.

1. yum 저장소 설치

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash 


2. MaxScale을 설치합니다. 

yum install -y maxscale 


3. MaxScale을 위한 유저 생성합니다. 필요한 권한만 설정합니다.

  create user 'maxscale'@'ip' identified by 'maxscalePW'; 
  grant select on mysql.user to 'maxscale'@'ip'; 
  grant select on mysql.db to 'maxscale'@'ip'; 
  grant select on mysql.tables_priv to 'maxscale'@'ip'; 
  grant show databases on *.* to 'maxscale'@'ip'; 


4. MaxScale을 모니터링 하기 위한 유저 계정을 생성합니다.

  create user 'ms_user'@'%' identified by 'ms_userPW'; 
  grant show databases on *.* to ms_user@'%'; 
  flush privileges; 



6. vi /etc/maxscale.cnf , config 파일 설정, 아래 내용을 통으로 사용하면 됩니다.

#Global MaxScale Settings 
[maxscale] 
threads=auto 

#Define Server Nodes 
[server1] 
type=server 
address=172.xx.xx.01
port=3306 
protocol=MariaDBBackend 

[server2] 
type=server 
address=172.xx.xx.02
port=3306 
protocol=MariaDBBackend 

[server3] 
type=server 
address=172.xx.xx.03
port=3306 
protocol=MariaDBBackend 


#Define Monitoring Service 
[Galera-Monitor] 
type=monitor 
module=galeramon 
servers=server1,server2,server3 
user=maxscale 
password=maxscalePW 
monitor_interval=1000 

#Define Galera Service 
[Galera-Service] 
type=service 
router=readconnroute 
router_options=synced 
servers=server1,server2,server3 
user=maxscale 
passwd=maxscalePW 

#Define Galera Listener 
[Galera-Listener] 
type=listener 
service=Galera-Service 
protocol=MariaDBClient 
port=4306 ### 기존 3306 포트 말고 이 포트로 쿼리를 보내면 됩니다.

#Define Administration Service 
[MaxAdmin-Service] 
type=service 
router=cli 

#Define Administration Listener 
[MaxAdmin-Listener] 
type=listener 
service=MaxAdmin-Service 
protocol=maxscaled 
socket=default 


7. 방화벽 설정. 쿼리를 받기 위한 포트입니다. 수정 가능합니다.

firewall-cmd --permanent --zone=public --add-port=4306/tcp 
firewall-cmd --reload 


8. MaxScale 시작 

systemctl start maxscale.service 
systemctl enable maxscale.service 



9. 테스트

 > maxctrl (maxadmin보다 깔끔하게 출력됩니다.)
          list servers
          show service Galera-Service 

'개발 이야기 > DATABASE' 카테고리의 다른 글

MariaDB, Galera Cluster, MaxScale 전체 정리  (0) 2019.07.04
SELinux for Galera cluster  (0) 2019.07.03
mariadb 시작 오류  (0) 2019.03.18
Galera 포트 리스트 및 용어 정리  (0) 2019.02.19
MariaDB MaxScale (발)번역  (0) 2015.01.23
mysql query browser 세션 문제  (0) 2014.07.02

CentOS에 Elasticsearch를 설치해 보았다. 정리할 생각이 없었는데, 하다보니 중간에 막히는 것들이 처리하면서 정리 한번 해둬야겠단 생각이 들었다. 


일단 처음 설치할 때 주의할 점은 Elasticsearch는 root 계정으로 실행할 수 없다. (실행 가능하게 하는 옵션이 있던데, 최신 버전에서는 안되는 듯. 그리고 보안의 측면에서도 당연히 좋지 않아 추천하지 않는다.) 그러므로 전용 계정을 설정해서 설치, 실행하자.


설치 환경 및 각종 버전은 아래와 같다. 

CentOS  7.5.x

Elasticsearch 6.3.0 (https://www.elastic.co/downloads/elasticsearch)

plugin, Elastic-HQ (https://github.com/ElasticHQ/elasticsearch-HQ)



wget으로 다운로드 받아 설치한다. 별도 인스톨 과정은 없다. bin/elasticsearch 로 실행 가능.


wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz

tar xvzf elasticsearch-6.3.0.tar.gz


실행전에 한 가지 수정하고 진행하자.

config/elasticsearch.yml에서 http.host를 자신이 사용하고자 하는 ip로 수정한다. 예를들어 내 ip가 172.150.x.x 이며 config를 수정하지 않고 실행할 경우 로컬에서 localhost로 접속은 되지만, 다른 PC에서 172.150.x.x로 접속되지는 않는다.


처음이니 데몬 옵션 주지말고 elasticsearch로 실행해보라. -d로 실행하며 혹시 모를 에러가 보이지 않으니 주의가 필요하다. 잘 실행되었는지 일단 확인해보자.


root 권한으로 실행되지 않으니 주의!


cluster 설정을 한 후 root로 실행하면 root권한으로 실행되지 않는다는 메세지와 함께, logs 폴더 아래 몇몇 로그 파일이 생긴다. 이를 지우지 않고 다른 계정으로 실행하면 log 파일 접근 실패 에러가 뜨면서 실행되지 않는다. 해당 로그 파일들을 삭제 후 다시 시작할 것!


curl 172.150.x.x:9200 ( 혹은 config를 수정하지 않았다면 localhost:9200)  

아래와 같은 간단한 health 정보가 출력되면 정상이다. 





혹시 그래도 접속이 안된다면 iptables에 9200번 ACCEPT 처리를 해주자.


 firewall-cmd --zone=public --permanent --add-port=9200/tcp


이제 플러그인 Elastic-HQ를 설치해보자. 이를 설치하기 위해 python 3.4 이상의 버전이 필요하다. CentOS 7.5 버전에는 기본적으로 2.x 버전이 설치되어 있다. 3.4 이상의 버전을 추가로 설치한 후 아래로 진행하자. 


( http://docs.elastichq.org/installation.html 참고)


git clone https://github.com/ElasticHQ/elasticsearch-HQ.git


설치에 필요한 추가 라이브러리를 설치한다. elasticsearch-HQ 폴더로 가서 아래를 실행.

(pip가 없다면 "yum install python-pip"로 설치.)


pip install -r requirements.txt

아래와 같은 에러 발생.

python-socketio 2.0.0 has requirement python-engineio>=2.2.0, but you'll have python-engineio 2.0.2 which is incompatible.

바로 업그레이드 시킴
pip3.6 install --upgrade python-engineio
(pip도 link설정 수정 안했다면 pip버전 지정해서 설정해야 함.)

이제 아래와 같이 실행 가능해졌다.

python3 application.py &
위에서 따로 언급 안했지만 python 3.x 버전을 추가로 설치 후 python 링크를 python3.6으로 대체했다면 시스템에 여러 문제가 발생할 수 있다. 

리눅스 시스템, 특히 CentOS는 python2를 많이 사용하고 있기 때문이다. 그래서 가능하면 python3.6.x 버전을 python3으로만 단축해서 사용해야 한다. 

HQ의 접속 포트는 5000번이다. iptables에 추가 후 브라우져로 접속해보면 아래와 같은 화면을 볼 수 있다.




주소를 지정하면 다음 화면으로 넘어간다.

HQ는 백그라운드로 실행했으므로 종료 시킬 때는 kill로... 


공식 문서에 python manage.py runserver 이걸로 실행하라는 이야기 있는데 에러가 나고, 해결책은 관심없어서 안 찾아봤음. 게다가 root 로 실행해야 함. -0-a 해결 방법 아시는 분 계시면 댓글 부탁드립니다. (공손..)


이까지.. 


다음은 Kibana 설치와 샘플 올려서 그래프 보는 방법에 문제가 있으면 이어서 계속, 별 문제 없으면 스킵.  :)


큰 건 아니고 작은 허들이 있어서 기록해 둠.

다운로드는 아래와 같이. (kibana는 elasticsearch와 동일한 버전을 다운받아 설정해야 한다. 안그럼 시작 시 경고 등장함.)

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.0-linux-x86_64.tar.gz
압축을 풀고 config 일부를 수정하자.

config/kibana.yml에서  아래 사항을 설정한다. 


server.host: "yourkibanaip"

elasticsearch.url: "http://yourip:9200"

xpack.security.enabled: false   <<- 이에 대한 경고가 뜬다. 일단 테스트 과정이니 넘어감.


elasticsearch.url을 현재까지는 멀티로 지정할 수 없다. 커뮤니티에서도 다들 stack 솔루션 중 kibana만 안된다고 성토 중. 
( 관련 링크 : https://github.com/elastic/kibana/issues/214)

host 주소를 정확히 입력해두고, elasticsearch 주소 설정, 시작할 때 관리자 비번 안물어보게 설정.


이제 실행!!


bin/kibana


그럼 아래와 같은 화면을 볼 수 있다.




이제 logstash와 실제 데이터를 연동해서 결과를 만들어 볼 차례.


그 과정에 또 허들이 생기면 이젠 다른 글에 이어 정리할 예정. 바이~~~!


[아래 문서를 같이 봐야 함.]


About max file descriptors



nodejs ver : 0.10.29

express ver : 3.4.8


아래와 같이 인스톨 해야 함.


npm install -g express-generator@3


그럼 유저계정/Appdata/Roaming/npm/node_modules/express-generator/bin에 javascript 로 작성된  express 파일을 생성한다.


이후부터 console에서 express를 실행할 수 있다.



1. ruby 설치

   http://rubyinstaller.org/downloads/ 에서 ruby 설치


2. rubygems 설치. 이것은 ruby를 위한 패키지 관리 프레임웍이다. 이를 설치하는 과정은 아래.

   gem update --system  입력하여 rubygem 설치

   gem install rubygems-update 입력

   update_rubygems 입력


3. rails 설치

   gem install rails 

  -> 설치 중 아래 에러 발생

Installing ri documentation for actionpack-4.1.0

ERROR:  While executing gem ... (Errno::EINVAL)

    Invalid argument - ./ActionDispatch/Routing/Mapper/Scoping/:

  -> gem install rdoc 한 후 재설치를 시작했지만 반응 없음. 중단!!

  -> gem uninstall rails 실행하여 삭제. 

  -> gem install rails 재입력. 에러 없음. 단, 이전에 에러가 난 actionpack-4.1.0을 재설치한 것이 아니라 이상함.

  -> gem install actionpack 재설치 시도. 정상적임.


3-1. rails new hello로 테스트 시도. 아래 에러 발생.

 Gem::InstallError: The 'json' native gem requires installed build tools.


4. devkit 설치

   https://github.com/oneclick/rubyinstaller/wiki/Development-Kit 에서 다운로드

   ruby가 설치된 폴더의 devkit폴더를 만들어 압축 품.

     * 이 사이트에서 폴더명에 공백이 있으면 안된다고 함. 전체 폴더 포함해서.

  devkit의 bin에 가서

  ruby dk.rb init/review/install 를 순서대로 처리. 모두 정상.

 

4-1. rails new hello로 다시 테스트 시도. 성공


4-2. rails server 테스트.  에러 발생

C:/Ruby200/lib/ruby/gems/2.0.0/gems/tzinfo-1.1.0/lib/tzinfo/data_source.rb:199:i

n `rescue in create_default_data_source': No timezone data source could be found

. To resolve this, either install TZInfo::Data (e.g. by running `gem install tzi

nfo-data`) or specify a zoneinfo directory using `TZInfo::DataSource.set(:zonein

fo, zoneinfo_path)`. (TZInfo::DataSourceNotFound)

  .

  .

[출처] ruby on rails 설치|작성자 바다와해

  이상한 건 설치된 tzinfo의 version이 2.2.2인 상태. 에러의 내용과 조금 다른게 아닌가 생각됨. gems 폴더에 가도 tzinfo-1.1.0 만 존재함.


4-3. bundle install 하라는 메세지가 떠서 일단 이거 실행. 에러에 대한 변화는 없음.


4-4. 아래 사이트에서 64bit 버전에서의 Gemfile에 빠져 있는 x64_mingw 옵션을 넣으면 된다는 아티클이 있지만, 역시 같은 결과임.

  http://stackoverflow.com/questions/23022258/tzinfodatasourcenotfound-error-starting-rails-v4-1-0-server-on-windows


gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]

Background

The TZInfo::DataSourceNotFound error is being raised by TZInfo, a dependency of the Active Support component of Rails. TZInfo is looking for a source of time zone data on your system, but failing to find one.

On many Unix-based systems (e.g. Linux), TZInfo is able to use the system zoneinfo directory as a source of data. However, Windows doesn't include such a directory, so the tzinfo-data gem needs to be installed instead. The tzinfo-data gem contains the same zoneinfo data, packaged as a set of Ruby modules.

Rails generates a default Gemfile when the application is first created. If the application is created on Windows, then a dependency for tzinfo-data will be included. However (as of Rails version 4.1.0), this omits :x64_mingw from the list of platforms, so doesn't work correctly on 64-bit Windows versions of Ruby. This should be fixed in future Rails releases.


4-5. devkit 32bit 버전을 재설치. 에러는 같은 상태.


4-6. 프로젝트 파일에 Gemfile 하단부에 64비트 버전 정보와 bundler 정보 추가

gem 'bundler'

gem 'tzinfo-data', platforms: [:mingw, :mswin , :x64_mingw]


4-7. rails server 성공!!



'개발 이야기' 카테고리의 다른 글

ruby on rails 시작해보기 - 1-1. 보충설명.  (0) 2014.05.04
ruby on rails 시작해보기 - 1  (0) 2014.05.03
ruby on rails 윈도우 설치  (0) 2014.04.20
Ruby on Rails  (0) 2014.04.16
SVN 속도 문제  (0) 2014.04.14
애자일, xp 등등...  (0) 2014.03.19

+ Recent posts